diff options
author | Ingo Molnar <mingo@kernel.org> | 2018-07-25 12:29:58 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2018-07-25 12:29:58 +0300 |
commit | 4765096f4f7829d933354ddffedfad32cf063467 (patch) | |
tree | e8ab2bfc2062324911de12d034f5d4f222c480b6 /net/bpf/test_run.c | |
parent | af0fffd9300b97d8875aa745bc78e2f6fdb3c1f0 (diff) | |
parent | f3d133ee0a17d5694c6f21873eec9863e11fa423 (diff) | |
download | linux-4765096f4f7829d933354ddffedfad32cf063467.tar.xz |
Merge branch 'sched/urgent' into sched/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'net/bpf/test_run.c')
-rw-r--r-- | net/bpf/test_run.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 68c3578343b4..22a78eedf4b1 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -96,6 +96,7 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, u32 size = kattr->test.data_size_in; u32 repeat = kattr->test.repeat; u32 retval, duration; + int hh_len = ETH_HLEN; struct sk_buff *skb; void *data; int ret; @@ -131,12 +132,22 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, skb_reset_network_header(skb); if (is_l2) - __skb_push(skb, ETH_HLEN); + __skb_push(skb, hh_len); if (is_direct_pkt_access) bpf_compute_data_pointers(skb); retval = bpf_test_run(prog, skb, repeat, &duration); - if (!is_l2) - __skb_push(skb, ETH_HLEN); + if (!is_l2) { + if (skb_headroom(skb) < hh_len) { + int nhead = HH_DATA_ALIGN(hh_len - skb_headroom(skb)); + + if (pskb_expand_head(skb, nhead, 0, GFP_USER)) { + kfree_skb(skb); + return -ENOMEM; + } + } + memset(__skb_push(skb, hh_len), 0, hh_len); + } + size = skb->len; /* bpf program can never convert linear skb to non-linear */ if (WARN_ON_ONCE(skb_is_nonlinear(skb))) |