On Tue, 16 Aug 2016 17:20:28 -0700
Kees Cook <keesc...@chromium.org> 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;
>  
>  }

Reply via email to