diff options
author | Vegard Nossum <vegard.nossum@gmail.com> | 2008-08-30 06:16:35 -0400 |
---|---|---|
committer | Vegard Nossum <vegard.nossum@gmail.com> | 2009-06-15 09:49:25 -0400 |
commit | fe55f6d5c0cfec4a710ef6ff63f162b99d5f7842 (patch) | |
tree | 4c4f0960d7355647e67f62e30e10c9215c123b65 | |
parent | fc7d0c9f2122e8bf58deaf1252b0e750df5b0e91 (diff) |
net: use kmemcheck bitfields API for skbuff
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
-rw-r--r-- | include/linux/skbuff.h | 7 | ||||
-rw-r--r-- | net/core/skbuff.c | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 5fd389162f01..ed6537fc5b48 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define _LINUX_SKBUFF_H | 15 | #define _LINUX_SKBUFF_H |
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/kmemcheck.h> | ||
18 | #include <linux/compiler.h> | 19 | #include <linux/compiler.h> |
19 | #include <linux/time.h> | 20 | #include <linux/time.h> |
20 | #include <linux/cache.h> | 21 | #include <linux/cache.h> |
@@ -346,6 +347,7 @@ struct sk_buff { | |||
346 | }; | 347 | }; |
347 | }; | 348 | }; |
348 | __u32 priority; | 349 | __u32 priority; |
350 | kmemcheck_bitfield_begin(flags1); | ||
349 | __u8 local_df:1, | 351 | __u8 local_df:1, |
350 | cloned:1, | 352 | cloned:1, |
351 | ip_summed:2, | 353 | ip_summed:2, |
@@ -356,6 +358,7 @@ struct sk_buff { | |||
356 | ipvs_property:1, | 358 | ipvs_property:1, |
357 | peeked:1, | 359 | peeked:1, |
358 | nf_trace:1; | 360 | nf_trace:1; |
361 | kmemcheck_bitfield_end(flags1); | ||
359 | __be16 protocol; | 362 | __be16 protocol; |
360 | 363 | ||
361 | void (*destructor)(struct sk_buff *skb); | 364 | void (*destructor)(struct sk_buff *skb); |
@@ -375,6 +378,8 @@ struct sk_buff { | |||
375 | __u16 tc_verd; /* traffic control verdict */ | 378 | __u16 tc_verd; /* traffic control verdict */ |
376 | #endif | 379 | #endif |
377 | #endif | 380 | #endif |
381 | |||
382 | kmemcheck_bitfield_begin(flags2); | ||
378 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 383 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
379 | __u8 ndisc_nodetype:2; | 384 | __u8 ndisc_nodetype:2; |
380 | #endif | 385 | #endif |
@@ -382,6 +387,8 @@ struct sk_buff { | |||
382 | __u8 do_not_encrypt:1; | 387 | __u8 do_not_encrypt:1; |
383 | __u8 requeue:1; | 388 | __u8 requeue:1; |
384 | #endif | 389 | #endif |
390 | kmemcheck_bitfield_end(flags2); | ||
391 | |||
385 | /* 0/13/14 bit hole */ | 392 | /* 0/13/14 bit hole */ |
386 | 393 | ||
387 | #ifdef CONFIG_NET_DMA | 394 | #ifdef CONFIG_NET_DMA |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index c2e4fb8f3546..f0c4c6ad774b 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/module.h> | 39 | #include <linux/module.h> |
40 | #include <linux/types.h> | 40 | #include <linux/types.h> |
41 | #include <linux/kernel.h> | 41 | #include <linux/kernel.h> |
42 | #include <linux/kmemcheck.h> | ||
42 | #include <linux/mm.h> | 43 | #include <linux/mm.h> |
43 | #include <linux/interrupt.h> | 44 | #include <linux/interrupt.h> |
44 | #include <linux/in.h> | 45 | #include <linux/in.h> |
@@ -201,6 +202,8 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask, | |||
201 | skb->data = data; | 202 | skb->data = data; |
202 | skb_reset_tail_pointer(skb); | 203 | skb_reset_tail_pointer(skb); |
203 | skb->end = skb->tail + size; | 204 | skb->end = skb->tail + size; |
205 | kmemcheck_annotate_bitfield(skb, flags1); | ||
206 | kmemcheck_annotate_bitfield(skb, flags2); | ||
204 | /* make sure we initialize shinfo sequentially */ | 207 | /* make sure we initialize shinfo sequentially */ |
205 | shinfo = skb_shinfo(skb); | 208 | shinfo = skb_shinfo(skb); |
206 | atomic_set(&shinfo->dataref, 1); | 209 | atomic_set(&shinfo->dataref, 1); |
@@ -217,6 +220,8 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask, | |||
217 | struct sk_buff *child = skb + 1; | 220 | struct sk_buff *child = skb + 1; |
218 | atomic_t *fclone_ref = (atomic_t *) (child + 1); | 221 | atomic_t *fclone_ref = (atomic_t *) (child + 1); |
219 | 222 | ||
223 | kmemcheck_annotate_bitfield(child, flags1); | ||
224 | kmemcheck_annotate_bitfield(child, flags2); | ||
220 | skb->fclone = SKB_FCLONE_ORIG; | 225 | skb->fclone = SKB_FCLONE_ORIG; |
221 | atomic_set(fclone_ref, 1); | 226 | atomic_set(fclone_ref, 1); |
222 | 227 | ||
@@ -633,6 +638,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask) | |||
633 | n = kmem_cache_alloc(skbuff_head_cache, gfp_mask); | 638 | n = kmem_cache_alloc(skbuff_head_cache, gfp_mask); |
634 | if (!n) | 639 | if (!n) |
635 | return NULL; | 640 | return NULL; |
641 | |||
642 | kmemcheck_annotate_bitfield(n, flags1); | ||
643 | kmemcheck_annotate_bitfield(n, flags2); | ||
636 | n->fclone = SKB_FCLONE_UNAVAILABLE; | 644 | n->fclone = SKB_FCLONE_UNAVAILABLE; |
637 | } | 645 | } |
638 | 646 | ||