X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=kernel%2Ffork.c;h=2a372a0e206fa2de99dbfdd594f86f6eb927bf40;hb=5ce1bbb97bf1e6707102d30499e7feaa1e6a2134;hp=f6083561dfe0a9f8d2a13138f7332bc358a51653;hpb=88ed86fee6651033de9b7038dac7869a9f19775a;p=~andy%2Flinux diff --git a/kernel/fork.c b/kernel/fork.c index f6083561dfe..2a372a0e206 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -519,6 +520,16 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) { struct completion *vfork_done = tsk->vfork_done; + /* Get rid of any futexes when releasing the mm */ +#ifdef CONFIG_FUTEX + if (unlikely(tsk->robust_list)) + exit_robust_list(tsk); +#ifdef CONFIG_COMPAT + if (unlikely(tsk->compat_robust_list)) + compat_exit_robust_list(tsk); +#endif +#endif + /* Get rid of any cached register state */ deactivate_mm(tsk, mm);