mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-15 11:44:11 +00:00
bpf: Move skb->len == 0 checks into __bpf_redirect
[ Upstream commit114039b342
] To avoid potentially breaking existing users. Both mac/no-mac cases have to be amended; mac_header >= network_header is not enough (verified with a new test, see next patch). Fixes:fd18942244
("bpf: Don't redirect packets with invalid pkt_len") Signed-off-by: Stanislav Fomichev <sdf@google.com> Link: https://lore.kernel.org/r/20221121180340.1983627-1-sdf@google.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5ea508992f
commit
de500c588a
2 changed files with 6 additions and 4 deletions
|
@ -470,9 +470,6 @@ static int convert___skb_to_skb(struct sk_buff *skb, struct __sk_buff *__skb)
|
|||
{
|
||||
struct qdisc_skb_cb *cb = (struct qdisc_skb_cb *)skb->cb;
|
||||
|
||||
if (!skb->len)
|
||||
return -EINVAL;
|
||||
|
||||
if (!__skb)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -2123,6 +2123,11 @@ static int __bpf_redirect_no_mac(struct sk_buff *skb, struct net_device *dev,
|
|||
{
|
||||
unsigned int mlen = skb_network_offset(skb);
|
||||
|
||||
if (unlikely(skb->len <= mlen)) {
|
||||
kfree_skb(skb);
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
if (mlen) {
|
||||
__skb_pull(skb, mlen);
|
||||
|
||||
|
@ -2144,7 +2149,7 @@ static int __bpf_redirect_common(struct sk_buff *skb, struct net_device *dev,
|
|||
u32 flags)
|
||||
{
|
||||
/* Verify that a link layer header is carried */
|
||||
if (unlikely(skb->mac_header >= skb->network_header)) {
|
||||
if (unlikely(skb->mac_header >= skb->network_header || skb->len == 0)) {
|
||||
kfree_skb(skb);
|
||||
return -ERANGE;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue