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.