diff --git a/net/core/filter.c b/net/core/filter.c index ef3e78b6a39c45b9487931e0b7fa438e722aac2e..6008fea1750e21037c77f832fcb3220b811b3b76 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2175,6 +2175,11 @@ static int __bpf_redirect_common(struct sk_buff *skb, struct net_device *dev, return -ERANGE; } + if (unlikely(skb->len < dev->min_header_len)) { + kfree_skb(skb); + return -ERANGE; + } + bpf_push_mac_rcsum(skb); return flags & BPF_F_INGRESS ? __bpf_rx_skb(dev, skb) : __bpf_tx_skb(dev, skb);