lib/list_debug.c: print unmangled addresses
The entire point of printing the pointers in list_debug is to see if there's any useful information in them (eg poison values, ASCII, etc); obscuring them to see if they compare equal makes them much less useful. If an attacker can force this message to be printed, we've already lost. Link: http://lkml.kernel.org/r/20180401223237.GV13332@bombadil.infradead.org Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com> Reviewed-by: Tobin C. Harding <me@tobin.cc> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Eric Biggers <ebiggers3@gmail.com> Cc: Kees Cook <keescook@chromium.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3175060092
commit
68c1f08203
|
@ -21,13 +21,13 @@ bool __list_add_valid(struct list_head *new, struct list_head *prev,
|
||||||
struct list_head *next)
|
struct list_head *next)
|
||||||
{
|
{
|
||||||
if (CHECK_DATA_CORRUPTION(next->prev != prev,
|
if (CHECK_DATA_CORRUPTION(next->prev != prev,
|
||||||
"list_add corruption. next->prev should be prev (%p), but was %p. (next=%p).\n",
|
"list_add corruption. next->prev should be prev (%px), but was %px. (next=%px).\n",
|
||||||
prev, next->prev, next) ||
|
prev, next->prev, next) ||
|
||||||
CHECK_DATA_CORRUPTION(prev->next != next,
|
CHECK_DATA_CORRUPTION(prev->next != next,
|
||||||
"list_add corruption. prev->next should be next (%p), but was %p. (prev=%p).\n",
|
"list_add corruption. prev->next should be next (%px), but was %px. (prev=%px).\n",
|
||||||
next, prev->next, prev) ||
|
next, prev->next, prev) ||
|
||||||
CHECK_DATA_CORRUPTION(new == prev || new == next,
|
CHECK_DATA_CORRUPTION(new == prev || new == next,
|
||||||
"list_add double add: new=%p, prev=%p, next=%p.\n",
|
"list_add double add: new=%px, prev=%px, next=%px.\n",
|
||||||
new, prev, next))
|
new, prev, next))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -43,16 +43,16 @@ bool __list_del_entry_valid(struct list_head *entry)
|
||||||
next = entry->next;
|
next = entry->next;
|
||||||
|
|
||||||
if (CHECK_DATA_CORRUPTION(next == LIST_POISON1,
|
if (CHECK_DATA_CORRUPTION(next == LIST_POISON1,
|
||||||
"list_del corruption, %p->next is LIST_POISON1 (%p)\n",
|
"list_del corruption, %px->next is LIST_POISON1 (%px)\n",
|
||||||
entry, LIST_POISON1) ||
|
entry, LIST_POISON1) ||
|
||||||
CHECK_DATA_CORRUPTION(prev == LIST_POISON2,
|
CHECK_DATA_CORRUPTION(prev == LIST_POISON2,
|
||||||
"list_del corruption, %p->prev is LIST_POISON2 (%p)\n",
|
"list_del corruption, %px->prev is LIST_POISON2 (%px)\n",
|
||||||
entry, LIST_POISON2) ||
|
entry, LIST_POISON2) ||
|
||||||
CHECK_DATA_CORRUPTION(prev->next != entry,
|
CHECK_DATA_CORRUPTION(prev->next != entry,
|
||||||
"list_del corruption. prev->next should be %p, but was %p\n",
|
"list_del corruption. prev->next should be %px, but was %px\n",
|
||||||
entry, prev->next) ||
|
entry, prev->next) ||
|
||||||
CHECK_DATA_CORRUPTION(next->prev != entry,
|
CHECK_DATA_CORRUPTION(next->prev != entry,
|
||||||
"list_del corruption. next->prev should be %p, but was %p\n",
|
"list_del corruption. next->prev should be %px, but was %px\n",
|
||||||
entry, next->prev))
|
entry, next->prev))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue