Messages in this thread | | | From | Arnd Bergmann <> | Subject | Re: [PATCH 05/12] unicore32 additional architecture files: low-level lib: uaccess | Date | Thu, 17 Feb 2011 18:45:00 +0100 |
| |
On Wednesday 16 February 2011, Guan Xuetao wrote: > + > +#define __kernel_ok (segment_eq(get_fs(), KERNEL_DS)) > +#define __user_ok(addr, size) (((size) <= TASK_SIZE) \ > + && ((addr) <= TASK_SIZE - (size))) > +#define __access_ok(addr, size) (__kernel_ok || __user_ok((addr), (size)))
A nice trick to simplify this is to introduce a per-process variable for comparing the pointer, set_fs() then sets this variable to either TASK_SIZE or UINT_MAX.
This saves one conditional branch for each call to __access_ok.
Arnd
| |