| Submitter | Sami Liedes |
|---|---|
| Date | Dec. 13, 2012, 10:04 p.m. |
| Message ID | <20121213220429.GN9713@sli.dy.fi> |
| Download | mbox | patch |
| Permalink | /patch/206260/ |
| State | New |
| Headers | show |
Comments
Patch
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)
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@iki.fi> --- lib/ext2fs/kernel-list.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)