On Fri, Jan 02, 2004 at 03:59:41PM +0100, Dimitri Torfs wrote: > the mask used in access_ok to check the validity of an address range > evaluates to -TASK_SIZE for user processes. In case of > CONFIG_MIPS32, TASK_SIZE is defined as 0x7fff8000UL, so -TASK_SIZE > evaluates to 0x80008000, making access_ok return false for all > addresses with bit 15 and 31 set. Surely the mask should be 0x80000000. > > Does anybody know why TASK_SIZE is set to 0x7fff8000 and not > 0x80000000 ? There is a weird special case were 32-bit code running on a 64-bit kernel with c0_status.ux set will behave differently than on a 32-bit processor or with c0_status.ux clear. The workaround for 64-bit kernels is to leave the top 32kB of the 2GB user virtual address space unused. For sake of symmetry we do this on both 32-bit and 64-bit kernels. Ralf