Messages in this thread Patch in this message |  | | From | Mathieu Desnoyers <> | Subject | [RFC PATCH 1/3] Fix: sched: task_rcu_dereference: check probe_kernel_address return value | Date | Tue, 3 Sep 2019 12:00:34 -0400 |
| |
probe_kernel_address can return -EFAULT on error, which leads to use of an uninitialized or partially initialized sighand variable.
There is ongoing discussion on removing task_rcu_dereference altogether, which seems like a nice way forward. This patch is submitted as a fix aiming to be backported to prior stable kernel releases.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Russell King - ARM Linux admin <linux@armlinux.org.uk> Cc: Chris Metcalf <cmetcalf@ezchip.com> Cc: Christoph Lameter <cl@linux.com> Cc: Kirill Tkhai <tkhai@yandex.ru> Cc: Mike Galbraith <efault@gmx.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> --- kernel/exit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/exit.c b/kernel/exit.c index 5b4a5dcce8f8..b1c3e1ba501c 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -249,7 +249,8 @@ struct task_struct *task_rcu_dereference(struct task_struct **ptask) if (!task) return NULL; - probe_kernel_address(&task->sighand, sighand); + if (probe_kernel_address(&task->sighand, sighand)) + sighand = NULL; /* * Pairs with atomic_dec_and_test() in put_task_struct(). If this task -- 2.17.1
|  |