>>>>> On Sun, 4 Jan 2004 22:03:27 +0100, Dimitri Torfs <dimitri@sonycom.com>
>>>>> said:
>> It seems there should be another definition of USER_DS for
>> CONFIG_MIPS32 in 2.6.
dimitri> Yes, I'm setting USER_DS to 0x80000000 for CONFIG_MIPS32:
Now we can see this fix in CVS 2.6 tree (Thank you, Ralf).
Then, how about this one?
>>>>> On Sun, 04 Jan 2004 21:05:32 +0900 (JST), Atsushi Nemoto
>>>>> <anemo@mba.ocn.ne.jp> said:
> Second, __access_ok for 64bit kernel is broken both 2.4 and 2.6. It
> returns 0 if 'addr' + 'size' == TASK_SIZE (which should be OK).
>
> 2.4 mips64:
> #define __access_ok(addr, size, mask) \
> (((mask) & ((addr) | ((addr) + (size)) | __ua_size(size))) == 0)
> 2.6:
> #define __access_ok(addr, size, mask) \
> (((signed long)((mask) & ((addr) | ((addr) + (size)) |
> __ua_size(size)))) == 0)
>
> I think these macros should be:
>
> 2.4 mips64:
> #define __access_ok(addr, size, mask) \
> (((mask) & ((addr) | ((addr) + (size) - 1) | __ua_size(size))) == 0)
> 2.6:
> #define __access_ok(addr, size, mask) \
> (((signed long)((mask) & ((addr) | ((addr) + (size) - 1) |
> __ua_size(size)))) == 0)
For example, currently, access_ok(0xfffffff000UL, 0x1000) will return
0. This must be legal (and this is a real problem for n64 mount
syscall which may grab user stack. See copy_mount_option()).
---
Atsushi Nemoto
|