On Sun, Jul 12, 2015 at 11:47 AM, Josh Triplett <josh@xxxxxxxxxxxxxxxx> wrote: > On Sun, Jul 12, 2015 at 02:06:26PM -0400, Mathieu Desnoyers wrote: >> Expose a new system call allowing threads to register a userspace memory >> area where to store the current CPU number. Scheduler migration sets the >> TIF_NOTIFY_RESUME flag on the current thread. Upon return to user-space, >> a notify-resume handler updates the current CPU value within that >> user-space memory area. >> >> + >> +/* >> + * sys_getcpu_cache - setup getcpu cache for caller thread >> + */ >> +SYSCALL_DEFINE2(getcpu_cache, int32_t __user *, gcp, int, flags) >> +{ >> + if (flags) >> + return -EINVAL; >> + if (gcp != NULL && !access_ok(VERIFY_WRITE, gcp, sizeof(int32_t))) >> + return -EFAULT; >> + current->getcpu_cache = gcp; > > So, you store a userspace address, and intentionally only validate it > when initially set, not when used. You clear it on exec, though not on > fork. Could any cases other than exec could make this problematic? In > particular, what about unusual personality flags, such as > ADDR_LIMIT_32BIT or ADDR_LIMIT_3GB? > On x86, this is safe, although it does violate the rules. That being said, I've never understood why access_ok cares at all what kind of task we're in. -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html