The do_exit function in kernel/exit.c in the Linux kernel before 2.6.36.2 does not properly handle a KERNEL_DS get_fs value which allows local users to bypass intended access_ok restrictions overwrite arbitrary kernel memory locations and gain privileges by leveraging a (1) BUG (2) NULL pointer dereference or (3) page fault as demonstrated by vectors involving the clear_child_tid feature and the splice system call.