diff options
author | David Miller <davem@davemloft.net> | 2017-05-02 17:36:45 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-05-02 17:46:28 +0200 |
commit | 586f8525979ad9574bf61637fd58c98d5077f29d (patch) | |
tree | 6f6d73b367e877b7c4cc14d991ea659df5959480 /net | |
parent | bpf: Do not dereference user pointer in bpf_test_finish(). (diff) | |
download | linux-586f8525979ad9574bf61637fd58c98d5077f29d.tar.xz linux-586f8525979ad9574bf61637fd58c98d5077f29d.zip |
bpf: Align packet data properly in program testing framework.
Make sure we apply NET_IP_ALIGN when reserving headroom for SKB
and XDP test runs, just like a real driver would.
Signed-off-by: David S. Miller <davem@davemloft.net>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/bpf/test_run.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index f946912c8a81..6be41a44d688 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -100,7 +100,7 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, void *data; int ret; - data = bpf_test_init(kattr, size, NET_SKB_PAD, + data = bpf_test_init(kattr, size, NET_SKB_PAD + NET_IP_ALIGN, SKB_DATA_ALIGN(sizeof(struct skb_shared_info))); if (IS_ERR(data)) return PTR_ERR(data); @@ -125,7 +125,7 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, return -ENOMEM; } - skb_reserve(skb, NET_SKB_PAD); + skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN); __skb_put(skb, size); skb->protocol = eth_type_trans(skb, current->nsproxy->net_ns->loopback_dev); skb_reset_network_header(skb); @@ -156,16 +156,16 @@ int bpf_prog_test_run_xdp(struct bpf_prog *prog, const union bpf_attr *kattr, void *data; int ret; - data = bpf_test_init(kattr, size, XDP_PACKET_HEADROOM, 0); + data = bpf_test_init(kattr, size, XDP_PACKET_HEADROOM + NET_IP_ALIGN, 0); if (IS_ERR(data)) return PTR_ERR(data); xdp.data_hard_start = data; - xdp.data = data + XDP_PACKET_HEADROOM; + xdp.data = data + XDP_PACKET_HEADROOM + NET_IP_ALIGN; xdp.data_end = xdp.data + size; retval = bpf_test_run(prog, &xdp, repeat, &duration); - if (xdp.data != data + XDP_PACKET_HEADROOM) + if (xdp.data != data + XDP_PACKET_HEADROOM + NET_IP_ALIGN) size = xdp.data_end - xdp.data; ret = bpf_test_finish(kattr, uattr, xdp.data, size, retval, duration); kfree(data); |