All of lore.kernel.org
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
	David Miller <davem@davemloft.net>, Arnd Bergmann <arnd@arndb.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [2.6.20.21 review 23/35] futex_compat: fix list traversal bugs
Date: Sat, 13 Oct 2007 17:28:45 +0200	[thread overview]
Message-ID: <20071013143503.%N@1wt.eu> (raw)
In-Reply-To: 20071013142822.%N@1wt.eu

[-- Attachment #1: 0078-futex_compat-fix-list-traversal-bugs.patch --]
[-- Type: text/plain, Size: 1998 bytes --]

commit 179c85ea53bef807621f335767e41e23f86f01df in mainline.

The futex list traversal on the compat side appears to have
a bug.

It's loop termination condition compares:

        while (compat_ptr(uentry) != &head->list)

But that can't be right because "uentry" has the special
"pi" indicator bit still potentially set at bit 0.  This
is cleared by fetch_robust_entry() into the "entry"
return value.

What this seems to mean is that the list won't terminate
when list iteration gets back to the the head.  And we'll
also process the list head like a normal entry, which could
cause all kinds of problems.

So we should check for equality with "entry".  That pointer
is of the non-compat type so we have to do a little casting
to keep the compiler and sparse happy.

The same problem can in theory occur with the 'pending'
variable, although that has not been reported from users
so far.

Based on the original patch from David Miller.

Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: David Miller <davem@davemloft.net>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 kernel/futex_compat.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Index: 2.6/kernel/futex_compat.c
===================================================================
--- 2.6.orig/kernel/futex_compat.c
+++ 2.6/kernel/futex_compat.c
@@ -61,10 +61,10 @@ void compat_exit_robust_list(struct task
 	if (fetch_robust_entry(&upending, &pending,
 			       &head->list_op_pending, &pip))
 		return;
-	if (upending)
+	if (pending)
 		handle_futex_death((void __user *)pending + futex_offset, curr, pip);
 
-	while (compat_ptr(uentry) != &head->list) {
+	while (entry != (struct robust_list __user *) &head->list) {
 		/*
 		 * A pending lock might already be on the list, so
 		 * dont process it twice:

-- 

  parent reply	other threads:[~2007-10-13 14:54 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-13 14:28 [2.6.20.21 review 00/35] 2.6.20.21 -stable review Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 01/35] ACPICA: Fixed possible corruption of global GPE list Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 02/35] AVR32: Fix atomic_add_unless() and atomic_sub_unless() Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 03/35] r8169: avoid needless NAPI poll scheduling Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 04/35] i386: allow debuggers to access the vsyscall page with compat vDSO Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 05/35] DCCP: Fix DCCP GFP_KERNEL allocation in atomic context Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 06/35] Netfilter: Missing Kbuild entry for netfilter Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 07/35] SNAP: Fix SNAP protocol header accesses Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 09/35] SPARC64: Fix sparc64 task stack traces Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 10/35] TCP: Do not autobind ports for TCP sockets Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 11/35] TCP: Fix TCP rate-halving on bidirectional flows Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 13/35] USB: allow retry on descriptor fetch errors Willy Tarreau
2007-10-13 17:15   ` [2.6.20.21 review 12/35] TCP: Fix TCP handling of SACK in bidirectional flows Ilpo Järvinen
2007-10-13 17:22     ` Willy Tarreau
2007-10-13 17:50       ` Adrian Bunk
2007-10-13 18:10         ` Willy Tarreau
2007-10-14  8:55           ` Ilpo Järvinen
2007-10-13 15:28 ` [2.6.20.21 review 14/35] USB: fix DoS in pwc USB video driver Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 15/35] Convert snd-page-alloc proc file to use seq_file Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 16/35] setpgid(child) fails if the child was forked by sub-thread Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 17/35] sigqueue_free: fix the race with collect_signal() Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 18/35] USB: fix linked list insertion bugfix for usb core Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 19/35] POWERPC: Flush registers to proper task context Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 21/35] V4L: cx88: Avoid a NULL pointer dereference during mpeg_open() Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 22/35] Fix "Fix DAC960 driver on machines which dont support 64-bit DMA" Willy Tarreau
2007-10-13 15:28 ` Willy Tarreau [this message]
2007-10-13 15:28 ` [2.6.20.21 review 24/35] Leases can be hidden by flocks Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 25/35] nfs: fix oops re sysctls and V4 support Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 26/35] dir_index: error out instead of BUG on corrupt dx dirs Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 27/35] ieee1394: ohci1394: fix initialization if built non-modular Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 28/35] Fix race with shared tag queue maps Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 29/35] crypto: blkcipher_get_spot() handling of buffer at end of page Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 30/35] fix realtek phy id in forcedeth Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 31/35] Fix IPV6 append OOPS Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 33/35] Fix ipv6 double-sock-release with MSG_CONFIRM Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 34/35] Fix datagram recvmsg NULL iov handling regression Willy Tarreau
2007-10-13 15:28 ` [2.6.20.21 review 35/35] sysfs: store sysfs inode nrs in s_ino to avoid readdir oopses Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071013143503.%N@1wt.eu \
    --to=w@1wt.eu \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=davem@davemloft.net \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=stable@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.