From: don.mullis@gmail.com
To: Artem.Bityutskiy@nokia.com, aelder@sgi.com, airlied@linux.ie
Cc: stable@kernel.org, linux-kernel@vger.kernel.org,
Don Mullis <don.mullis@gmail.com>
Subject: [PATCH 10/10] lib/list_sort: fix bad args in callback to clients cmp()
Date: Tue, 24 Aug 2010 08:47:31 -0700 [thread overview]
Message-ID: <20100824154902.101408966@gmail.com> (raw)
In-Reply-To: 20100824154721.995117660@gmail.com
[-- Attachment #1: lib_list_sort_-fix-bad-args-in-callback-to-client_s-cmp__.patch --]
[-- Type: text/plain, Size: 1494 bytes --]
Commit 835cc0c8477fdbc59e0217891d6f11061b1ac4e2 introduced the bug
that if the list to be sorted is a power-of-two in length, cmp() may
be passed pointers to the list header rather than to a list element.
This typically causes the caller's cmp() to read from invalid memory
locations off one end or the other of the list_head struct.
Signed-off-by: Don Mullis <don.mullis@gmail.com>
Tested-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
To: Alex Elder <aelder@sgi.com>
To: David Airlie <airlied@linux.ie>
Cc: stable@kernel.org
---
Examination of client code in xfs_buf.c and drm_modes.c showed no
obvious vulnerability to crashing: memory at offsets reachable by
cmp() appeared to always be readable, and the cmp() functions do not
dereference any pointers in the struct that they assume they have been
passed.
lib/list_sort.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: linux-next/lib/list_sort.c
===================================================================
--- linux-next.orig/lib/list_sort.c 2010-08-23 22:59:59.899177219 -0700
+++ linux-next/lib/list_sort.c 2010-08-23 23:01:48.007177492 -0700
@@ -70,7 +70,7 @@ static void merge_and_restore_back_links
* element comparison is needed, so the client's cmp()
* routine can invoke cond_resched() periodically.
*/
- (*cmp)(priv, tail, tail);
+ (*cmp)(priv, tail->next, tail->next);
tail->next->prev = tail;
tail = tail->next;
prev parent reply other threads:[~2010-08-24 16:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-24 15:47 [PATCH 00/10] lib/list_sort: strengthen self-test to expose a bug, then fix the bug don.mullis
2010-08-24 15:47 ` [PATCH 01/10] lib/list_sort: selftest: enabled with CONFIG_TEST_LIST_SORT don.mullis
2010-08-24 15:47 ` [PATCH 02/10] lib/list_sort: selftest: use more appropriate printk levels don.mullis
2010-08-24 15:47 ` [PATCH 03/10] lib/list_sort: selftest: cleanups: use random32(), rename variables don.mullis
2010-08-24 15:47 ` [PATCH 04/10] lib/list_sort: selftest: permit normal boot after test failure don.mullis
2010-08-24 15:47 ` [PATCH 05/10] lib/list_sort: selftest: improve printk wording don.mullis
2010-08-24 15:47 ` [PATCH 06/10] lib/list_sort: selftest: cleanups: use signed arithmetic, noinline don.mullis
2010-08-24 15:47 ` [PATCH 07/10] lib/list_sort: selftest: strengthen checking to expose corner case don.mullis
2010-08-24 15:47 ` [PATCH 08/10] lib/list_sort: selftest: stress algorithm with lists of various lengths don.mullis
2010-08-24 15:47 ` [PATCH 09/10] lib/list_sort: improve list_sort() function documentation don.mullis
2010-08-24 15:47 ` don.mullis [this message]
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=20100824154902.101408966@gmail.com \
--to=don.mullis@gmail.com \
--cc=Artem.Bityutskiy@nokia.com \
--cc=aelder@sgi.com \
--cc=airlied@linux.ie \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox