diff options
author | David S. Miller <davem@davemloft.net> | 2022-05-11 12:44:30 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-05-11 12:44:30 +0100 |
commit | e508af8abbf9ced64f644755f2ddd509c935173f (patch) | |
tree | 50766a68454ddebad5e7adddf4a236c72e6f5459 /net/core/dev.c | |
parent | dc3a2001f61611347c057fea422c382b9ce3cfcb (diff) | |
parent | eeee4b77dc52b9128ee450c110caeb92ce3f3f9c (diff) |
Merge branch 'debug-net'
Eric Dumazet says:
====================
net: CONFIG_DEBUG_NET and friends
This patch series is inspired by some syzbot reports
hinting that skb transport_header might be not set
in places we expect it being set.
Add a new CONFIG_DEBUG_NET option
and DEBUG_NET_WARN_ON_ONCE() helper, so that we can start
adding more sanity checks in the future.
Replace two BUG() in skb_checksum_help()
with less risky code.
v2: make first patch compile on more arches/compilers
add the 5th patch to add more debugging in skb_checksum_help()
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 186c6b07c60c..91b7e7784da9 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3265,12 +3265,18 @@ int skb_checksum_help(struct sk_buff *skb) } offset = skb_checksum_start_offset(skb); - BUG_ON(offset >= skb_headlen(skb)); + ret = -EINVAL; + if (WARN_ON_ONCE(offset >= skb_headlen(skb))) { + DO_ONCE_LITE(skb_dump, KERN_ERR, skb, false); + goto out; + } csum = skb_checksum(skb, offset, skb->len - offset, 0); offset += skb->csum_offset; - BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb)); - + if (WARN_ON_ONCE(offset + sizeof(__sum16) > skb_headlen(skb))) { + DO_ONCE_LITE(skb_dump, KERN_ERR, skb, false); + goto out; + } ret = skb_ensure_writable(skb, offset + sizeof(__sum16)); if (ret) goto out; |