diff options
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r-- | include/linux/skbuff.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index abde271c18ae..18ddf9684a27 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -2567,20 +2567,26 @@ __wsum __skb_checksum(const struct sk_buff *skb, int offset, int len, | |||
2567 | __wsum skb_checksum(const struct sk_buff *skb, int offset, int len, | 2567 | __wsum skb_checksum(const struct sk_buff *skb, int offset, int len, |
2568 | __wsum csum); | 2568 | __wsum csum); |
2569 | 2569 | ||
2570 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, | 2570 | static inline void *__skb_header_pointer(const struct sk_buff *skb, int offset, |
2571 | int len, void *buffer) | 2571 | int len, void *data, int hlen, void *buffer) |
2572 | { | 2572 | { |
2573 | int hlen = skb_headlen(skb); | ||
2574 | |||
2575 | if (hlen - offset >= len) | 2573 | if (hlen - offset >= len) |
2576 | return skb->data + offset; | 2574 | return data + offset; |
2577 | 2575 | ||
2578 | if (skb_copy_bits(skb, offset, buffer, len) < 0) | 2576 | if (!skb || |
2577 | skb_copy_bits(skb, offset, buffer, len) < 0) | ||
2579 | return NULL; | 2578 | return NULL; |
2580 | 2579 | ||
2581 | return buffer; | 2580 | return buffer; |
2582 | } | 2581 | } |
2583 | 2582 | ||
2583 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, | ||
2584 | int len, void *buffer) | ||
2585 | { | ||
2586 | return __skb_header_pointer(skb, offset, len, skb->data, | ||
2587 | skb_headlen(skb), buffer); | ||
2588 | } | ||
2589 | |||
2584 | /** | 2590 | /** |
2585 | * skb_needs_linearize - check if we need to linearize a given skb | 2591 | * skb_needs_linearize - check if we need to linearize a given skb |
2586 | * depending on the given device features. | 2592 | * depending on the given device features. |