Commit a7b1a075 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Thomas Gleixner

futex: Nullify robust lists after cleanup

The robust list pointers of user space held futexes are kept intact
over an exec() call. When the exec'ed task exits exit_robust_list() is
called with the stale pointer. The risk of corruption is minimal, but
still it is incorrect to keep the pointers valid. Actually glibc
should uninstall the robust list before calling exec() but we have to
deal with it anyway.

Nullify the pointers after [compat_]exit_robust_list() has been
called.
Reported-by: default avatarAnirban Sinha <ani@anirban.org>
Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
LKML-Reference: <new-submission>
Cc: stable@kernel.org
parent cfa0c194
...@@ -575,11 +575,15 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) ...@@ -575,11 +575,15 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm)
/* Get rid of any futexes when releasing the mm */ /* Get rid of any futexes when releasing the mm */
#ifdef CONFIG_FUTEX #ifdef CONFIG_FUTEX
if (unlikely(tsk->robust_list)) if (unlikely(tsk->robust_list)) {
exit_robust_list(tsk); exit_robust_list(tsk);
tsk->robust_list = NULL;
}
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
if (unlikely(tsk->compat_robust_list)) if (unlikely(tsk->compat_robust_list)) {
compat_exit_robust_list(tsk); compat_exit_robust_list(tsk);
tsk->compat_robust_list = NULL;
}
#endif #endif
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment