Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/lib/list_debug.c

  1 /*
  2  * Copyright 2006, Red Hat, Inc., Dave Jones
  3  * Released under the General Public License (GPL).
  4  *
  5  * This file contains the linked list validation for DEBUG_LIST.
  6  */
  7 
  8 #include <linux/export.h>
  9 #include <linux/list.h>
 10 #include <linux/bug.h>
 11 #include <linux/kernel.h>
 12 #include <linux/rculist.h>
 13 
 14 /*
 15  * Check that the data structures for the list manipulations are reasonably
 16  * valid. Failures here indicate memory corruption (and possibly an exploit
 17  * attempt).
 18  */
 19 
 20 bool __list_add_valid(struct list_head *new, struct list_head *prev,
 21                       struct list_head *next)
 22 {
 23         CHECK_DATA_CORRUPTION(next->prev != prev,
 24                 "list_add corruption. next->prev should be prev (%p), but was %p. (next=%p).\n",
 25                 prev, next->prev, next);
 26         CHECK_DATA_CORRUPTION(prev->next != next,
 27                 "list_add corruption. prev->next should be next (%p), but was %p. (prev=%p).\n",
 28                 next, prev->next, prev);
 29         CHECK_DATA_CORRUPTION(new == prev || new == next,
 30                 "list_add double add: new=%p, prev=%p, next=%p.\n",
 31                 new, prev, next);
 32 
 33         return true;
 34 }
 35 EXPORT_SYMBOL(__list_add_valid);
 36 
 37 bool __list_del_entry_valid(struct list_head *entry)
 38 {
 39         struct list_head *prev, *next;
 40 
 41         prev = entry->prev;
 42         next = entry->next;
 43 
 44         CHECK_DATA_CORRUPTION(next == LIST_POISON1,
 45                 "list_del corruption, %p->next is LIST_POISON1 (%p)\n",
 46                 entry, LIST_POISON1);
 47         CHECK_DATA_CORRUPTION(prev == LIST_POISON2,
 48                 "list_del corruption, %p->prev is LIST_POISON2 (%p)\n",
 49                 entry, LIST_POISON2);
 50         CHECK_DATA_CORRUPTION(prev->next != entry,
 51                 "list_del corruption. prev->next should be %p, but was %p\n",
 52                 entry, prev->next);
 53         CHECK_DATA_CORRUPTION(next->prev != entry,
 54                 "list_del corruption. next->prev should be %p, but was %p\n",
 55                 entry, next->prev);
 56         return true;
 57 
 58 }
 59 EXPORT_SYMBOL(__list_del_entry_valid);
 60 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us