| From stable-bounces@linux.kernel.org Tue Jul 31 00:48:04 2007 |
| From: Andreas Schwab <schwab@suse.de> |
| Date: Tue, 31 Jul 2007 00:38:51 -0700 |
| Subject: futex: pass nr_wake2 to futex_wake_op |
| To: torvalds@linux-foundation.org |
| Cc: schwab@suse.de, akpm@linux-foundation.org, mingo@elte.hu, drepper@redhat.com, stable@kernel.org |
| Message-ID: <200707310738.l6V7cpPP022186@imap1.linux-foundation.org> |
| |
| |
| From: Andreas Schwab <schwab@suse.de> |
| |
| The fourth argument of sys_futex is ignored when op == FUTEX_WAKE_OP, |
| but futex_wake_op expects it as its nr_wake2 parameter. |
| |
| The only user of this operation in glibc is always passing 1, so this |
| bug had no consequences so far. |
| |
| Signed-off-by: Andreas Schwab <schwab@suse.de> |
| Cc: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Ulrich Drepper <drepper@redhat.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| kernel/futex.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/kernel/futex.c |
| +++ b/kernel/futex.c |
| @@ -2061,8 +2061,10 @@ asmlinkage long sys_futex(u32 __user *ua |
| } |
| /* |
| * requeue parameter in 'utime' if cmd == FUTEX_REQUEUE. |
| + * number of waiters to wake in 'utime' if cmd == FUTEX_WAKE_OP. |
| */ |
| - if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE) |
| + if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE || |
| + cmd == FUTEX_WAKE_OP) |
| val2 = (u32) (unsigned long) utime; |
| |
| return do_futex(uaddr, op, val, tp, uaddr2, val2, val3); |