> -     entry->next = LIST_POISON1;
> -     entry->prev = LIST_POISON2;
> +     entry->next = static_cast<struct list_head *>(LIST_POISON1);
> +     entry->prev = static_cast<struct list_head *>(LIST_POISON2);

There is a better way ;-)

--- a/include/linux/poison.h
+++ b/include/linux/poison.h
@@ -2,6 +2,22 @@
 #ifndef _LINUX_POISON_H
 #define _LINUX_POISON_H
 
+class POISON {
+       unsigned long p;
+
+public:
+       explicit POISON(unsigned long val)
+               : p{val}
+       {
+       }
+
+       template<typename T>
+       operator T*() const
+       {
+               return p;
+       }
+};
+
 /********** include/linux/list.h **********/
 
 /*
@@ -20,15 +36,15 @@
  * under normal circumstances, used to verify that nobody uses
  * non-initialized list entries.
  */
-#define LIST_POISON1  ((void *) 0x100 + POISON_POINTER_DELTA)
-#define LIST_POISON2  ((void *) 0x200 + POISON_POINTER_DELTA)
+#define LIST_POISON1  POISON{0x100UL + POISON_POINTER_DELTA}
+#define LIST_POISON2  POISON{0x200UL + POISON_POINTER_DELTA}
 
 /********** include/linux/timer.h **********/
 /*
  * Magic number "tsta" to indicate a static timer initializer
  * for the object debugging code.
  */
-#define TIMER_ENTRY_STATIC     ((void *) 0x300 + POISON_POINTER_DELTA)
+#define TIMER_ENTRY_STATIC     POISON{0x300UL + POISON_POINTER_DELTA}
 
 /********** mm/debug-pagealloc.c **********/
 #ifdef CONFIG_PAGE_POISONING_ZERO
@@ -39,7 +55,7 @@
 
 /********** mm/page_alloc.c ************/
 
-#define TAIL_MAPPING   ((void *) 0x400 + POISON_POINTER_DELTA)
+#define TAIL_MAPPING   POISON{0x400UL + POISON_POINTER_DELTA}
 
 /********** mm/slab.c **********/
 /*
@@ -81,7 +97,7 @@
 /********** kernel/mutexes **********/
 #define MUTEX_DEBUG_INIT       0x11
 #define MUTEX_DEBUG_FREE       0x22
-#define MUTEX_POISON_WW_CTX    ((void *) 0x500 + POISON_POINTER_DELTA)
+#define MUTEX_POISON_WW_CTX    POISON{0x500UL + POISON_POINTER_DELTA}
 
 /********** lib/flex_array.c **********/
 #define FLEX_ARRAY_FREE        0x6c    /* for use-after-free poisoning */

Reply via email to