Re: [PATCH v2 4/5] bug: Provide toggle for BUG on data corruption

From: Steven Rostedt
Date: Wed Aug 17 2016 - 09:21:30 EST


On Tue, 16 Aug 2016 17:20:28 -0700
Kees Cook <keescook@xxxxxxxxxxxx> wrote:


> EXPORT_SYMBOL(__list_add_valid);
> @@ -46,26 +41,18 @@ bool __list_del_entry_valid(struct list_head *entry)
> prev = entry->prev;
> next = entry->next;
>
> - if (unlikely(next == LIST_POISON1)) {
> - WARN(1, "list_del corruption, %p->next is LIST_POISON1 (%p)\n",
> - entry, LIST_POISON1);
> - return false;
> - }
> - if (unlikely(prev == LIST_POISON2)) {
> - WARN(1, "list_del corruption, %p->prev is LIST_POISON2 (%p)\n",
> - entry, LIST_POISON2);
> - return false;
> - }
> - if (unlikely(prev->next != entry)) {
> - WARN(1, "list_del corruption. prev->next should be %p, but was %p\n",
> - entry, prev->next);
> - return false;
> - }
> - if (unlikely(next->prev != entry)) {
> - WARN(1, "list_del corruption. next->prev should be %p, but was %p\n",
> - entry, next->prev);
> - return false;
> - }
> + CHECK_DATA_CORRUPTION(next == LIST_POISON1,
> + "list_del corruption, %p->next is LIST_POISON1 (%p)\n",
> + entry, LIST_POISON1);
> + CHECK_DATA_CORRUPTION(prev == LIST_POISON2,
> + "list_del corruption, %p->prev is LIST_POISON2 (%p)\n",
> + entry, LIST_POISON2);
> + CHECK_DATA_CORRUPTION(prev->next != entry,
> + "list_del corruption. prev->next should be %p, but was %p\n",
> + entry, prev->next);
> + CHECK_DATA_CORRUPTION(next->prev != entry,
> + "list_del corruption. next->prev should be %p, but was %p\n",
> + entry, next->prev);

OK, you totally rewrote the WARN() section anyway, thus ignore my
comment on the previous email.

-- Steve

> return true;
>
> }