Messages in this thread Patch in this message | | | From | Vasily Averin <> | Subject | [PATCH NET 7/7] bpf: use pskb_realloc_headroom in bpf_out_neigh_v4/6 | Date | Mon, 12 Jul 2021 16:27:26 +0300 |
| |
Unlike skb_realloc_headroom, new helper pskb_realloc_headroom does not allocate a new skb if possible.
Additionally this patch replaces commonly used dereferencing with variables.
Signed-off-by: Vasily Averin <vvs@virtuozzo.com> --- net/core/filter.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-)
diff --git a/net/core/filter.c b/net/core/filter.c index 65ab4e2..cf6cd93 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2179,17 +2179,10 @@ static int bpf_out_neigh_v6(struct net *net, struct sk_buff *skb, skb->tstamp = 0; if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) { - struct sk_buff *skb2; + skb = pskb_realloc_headroom(skb, hh_len); - skb2 = skb_realloc_headroom(skb, hh_len); - if (unlikely(!skb2)) { - kfree_skb(skb); + if (!skb) return -ENOMEM; - } - if (skb->sk) - skb_set_owner_w(skb2, skb->sk); - consume_skb(skb); - skb = skb2; } rcu_read_lock_bh(); @@ -2286,17 +2279,10 @@ static int bpf_out_neigh_v4(struct net *net, struct sk_buff *skb, skb->tstamp = 0; if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) { - struct sk_buff *skb2; + skb = pskb_realloc_headroom(skb, hh_len); - skb2 = skb_realloc_headroom(skb, hh_len); - if (unlikely(!skb2)) { - kfree_skb(skb); + if (!skb) return -ENOMEM; - } - if (skb->sk) - skb_set_owner_w(skb2, skb->sk); - consume_skb(skb); - skb = skb2; } rcu_read_lock_bh(); -- 1.8.3.1
| |