long offset;
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(1);
- FPU_get_user(base, (u_char *) (*fpu_eip)); /* The SIB byte */
+ FPU_code_access_ok(1);
+ FPU_get_user(base, (u_char __user *) (*fpu_eip)); /* The SIB byte */
RE_ENTRANT_CHECK_ON;
(*fpu_eip)++;
ss = base >> 6;
/* 8 bit signed displacement */
long displacement;
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(1);
- FPU_get_user(displacement, (signed char *) (*fpu_eip));
+ FPU_code_access_ok(1);
+ FPU_get_user(displacement, (signed char __user *) (*fpu_eip));
offset += displacement;
RE_ENTRANT_CHECK_ON;
(*fpu_eip)++;
/* 32 bit displacement */
long displacement;
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(4);
- FPU_get_user(displacement, (long *) (*fpu_eip));
+ FPU_code_access_ok(4);
+ FPU_get_user(displacement, (long __user *) (*fpu_eip));
offset += displacement;
RE_ENTRANT_CHECK_ON;
(*fpu_eip) += 4;
{
struct desc_struct descriptor;
unsigned long base_address, limit, address, seg_top;
- unsigned short selector;
segment--;
/* fs and gs aren't used by the kernel, so they still have their
user-space values. */
case PREFIX_FS_-1:
- /* The cast is needed here to get gcc 2.8.0 to use a 16 bit register
- in the assembler statement. */
-
- __asm__("mov %%fs,%0":"=r" (selector));
- addr->selector = selector;
+ /* N.B. - movl %seg, mem is a 2 byte write regardless of prefix */
+ savesegment(fs, addr->selector);
break;
case PREFIX_GS_-1:
- /* The cast is needed here to get gcc 2.8.0 to use a 16 bit register
- in the assembler statement. */
- __asm__("mov %%gs,%0":"=r" (selector));
- addr->selector = selector;
+ savesegment(gs, addr->selector);
break;
default:
addr->selector = PM_REG_(segment);
*/
-void *FPU_get_address(u_char FPU_modrm, unsigned long *fpu_eip,
+void __user *FPU_get_address(u_char FPU_modrm, unsigned long *fpu_eip,
struct address *addr,
fpu_addr_modes addr_modes)
{
{
/* Special case: disp32 */
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(4);
- FPU_get_user(address, (unsigned long *) (*fpu_eip));
+ FPU_code_access_ok(4);
+ FPU_get_user(address, (unsigned long __user *) (*fpu_eip));
(*fpu_eip) += 4;
RE_ENTRANT_CHECK_ON;
addr->offset = address;
- return (void *) address;
+ return (void __user *) address;
}
else
{
address = *cpu_reg_ptr; /* Just return the contents
of the cpu register */
addr->offset = address;
- return (void *) address;
+ return (void __user *) address;
}
case 1:
/* 8 bit signed displacement */
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(1);
- FPU_get_user(address, (signed char *) (*fpu_eip));
+ FPU_code_access_ok(1);
+ FPU_get_user(address, (signed char __user *) (*fpu_eip));
RE_ENTRANT_CHECK_ON;
(*fpu_eip)++;
break;
case 2:
/* 32 bit displacement */
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(4);
- FPU_get_user(address, (long *) (*fpu_eip));
+ FPU_code_access_ok(4);
+ FPU_get_user(address, (long __user *) (*fpu_eip));
(*fpu_eip) += 4;
RE_ENTRANT_CHECK_ON;
break;
EXCEPTION(EX_INTERNAL|0x133);
}
- return (void *)address;
+ return (void __user *)address;
}
-void *FPU_get_address_16(u_char FPU_modrm, unsigned long *fpu_eip,
+void __user *FPU_get_address_16(u_char FPU_modrm, unsigned long *fpu_eip,
struct address *addr,
fpu_addr_modes addr_modes)
{
{
/* Special case: disp16 */
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(2);
- FPU_get_user(address, (unsigned short *) (*fpu_eip));
+ FPU_code_access_ok(2);
+ FPU_get_user(address, (unsigned short __user *) (*fpu_eip));
(*fpu_eip) += 2;
RE_ENTRANT_CHECK_ON;
goto add_segment;
case 1:
/* 8 bit signed displacement */
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(1);
- FPU_get_user(address, (signed char *) (*fpu_eip));
+ FPU_code_access_ok(1);
+ FPU_get_user(address, (signed char __user *) (*fpu_eip));
RE_ENTRANT_CHECK_ON;
(*fpu_eip)++;
break;
case 2:
/* 16 bit displacement */
RE_ENTRANT_CHECK_OFF;
- FPU_code_verify_area(2);
- FPU_get_user(address, (unsigned short *) (*fpu_eip));
+ FPU_code_access_ok(2);
+ FPU_get_user(address, (unsigned short __user *) (*fpu_eip));
(*fpu_eip) += 2;
RE_ENTRANT_CHECK_ON;
break;
EXCEPTION(EX_INTERNAL|0x131);
}
- return (void *)address ;
+ return (void __user *)address ;
}