Files
android_kernel_xiaomi_sm8450/include/linux
Jann Horn 16d51a590a sched/fair: Don't free p->numa_faults with concurrent readers
When going through execve(), zero out the NUMA fault statistics instead of
freeing them.

During execve, the task is reachable through procfs and the scheduler. A
concurrent /proc/*/sched reader can read data from a freed ->numa_faults
allocation (confirmed by KASAN) and write it back to userspace.
I believe that it would also be possible for a use-after-free read to occur
through a race between a NUMA fault and execve(): task_numa_fault() can
lead to task_numa_compare(), which invokes task_weight() on the currently
running task of a different CPU.

Another way to fix this would be to make ->numa_faults RCU-managed or add
extra locking, but it seems easier to wipe the NUMA fault statistics on
execve.

Signed-off-by: Jann Horn <jannh@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Deacon <will@kernel.org>
Fixes: 82727018b0 ("sched/numa: Call task_numa_free() from do_execve()")
Link: https://lkml.kernel.org/r/20190716152047.14424-1-jannh@google.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2019-07-25 15:37:04 +02:00
..
2019-06-20 09:23:22 +02:00
2019-05-31 11:13:10 +02:00
2019-07-10 09:00:57 -06:00
2019-05-14 19:52:50 -07:00
2019-07-01 08:18:54 -06:00
2019-07-10 09:00:57 -06:00
2019-07-10 09:00:57 -06:00
2019-04-09 17:05:46 -07:00
2019-05-07 08:39:02 -06:00
2019-06-12 20:27:13 +02:00
2019-07-18 09:49:30 +02:00
2019-02-28 03:28:53 -05:00
2019-06-12 20:30:39 +02:00
2019-02-28 08:24:23 -07:00
2019-04-22 09:48:12 -06:00
2019-07-05 21:34:50 +02:00
2019-06-26 13:19:46 -07:00
2019-06-10 13:00:24 +02:00
2019-04-08 22:56:14 +02:00
2019-07-05 15:19:10 -07:00
2019-03-07 18:32:03 -08:00
2019-07-08 19:25:19 -07:00
2019-06-13 09:02:33 -04:00
2019-02-20 07:22:17 -07:00
2019-02-20 07:22:10 -07:00
2019-07-09 14:15:37 -07:00
2019-07-16 19:23:25 -07:00
2019-05-14 19:52:51 -07:00
2019-06-12 11:42:13 +02:00
2019-06-15 12:25:49 +02:00
2019-05-14 19:52:48 -07:00
2019-04-02 17:57:35 +02:00
2019-05-08 22:14:36 +02:00
2019-05-31 12:37:46 -07:00
2019-05-16 15:51:55 -07:00
2019-07-09 14:32:14 -06:00
2019-07-08 10:51:25 +02:00
2019-07-12 11:05:43 -07:00
2019-06-27 21:22:15 +08:00
2019-07-07 11:50:03 +02:00
2019-06-05 11:54:38 +02:00
2019-05-15 17:35:54 +01:00
2019-04-09 15:14:49 -06:00
2019-07-10 09:00:57 -06:00