aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/skbuff.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r--include/linux/skbuff.h18
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
2570static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 2570static 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
2583static 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.