[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20121213220429.GN9713@sli.dy.fi>
Date: Fri, 14 Dec 2012 00:04:29 +0200
From: Sami Liedes <sami.liedes@....fi>
To: linux-ext4@...r.kernel.org
Subject: [PATCH 6/8] lib/ext2fs/kernel-list.h: Fix undefined behavior in
list_entry() macro
Fix the macro, which is essentially a copy of the container_of() in
the kernel, to use offsetof instead of a null pointer dereference.
Caught by clang -fsanitize=undefined.
Signed-off-by: Sami Liedes <sami.liedes@....fi>
---
lib/ext2fs/kernel-list.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/lib/ext2fs/kernel-list.h b/lib/ext2fs/kernel-list.h
index e07d06b..85ae213 100644
--- a/lib/ext2fs/kernel-list.h
+++ b/lib/ext2fs/kernel-list.h
@@ -103,8 +103,10 @@ static __inline__ void list_splice(struct list_head *list, struct list_head *hea
}
}
-#define list_entry(ptr, type, member) \
- ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
+#define list_entry(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+
#define list_for_each(pos, head) \
for (pos = (head)->next; pos != (head); pos = pos->next)
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists