Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+5 -5
+5 -5
net/bpf/test_run.c
··· 100 100 void *data; 101 101 int ret; 102 102 103 - data = bpf_test_init(kattr, size, NET_SKB_PAD, 103 + data = bpf_test_init(kattr, size, NET_SKB_PAD + NET_IP_ALIGN, 104 104 SKB_DATA_ALIGN(sizeof(struct skb_shared_info))); 105 105 if (IS_ERR(data)) 106 106 return PTR_ERR(data); ··· 125 125 return -ENOMEM; 126 126 } 127 127 128 - skb_reserve(skb, NET_SKB_PAD); 128 + skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN); 129 129 __skb_put(skb, size); 130 130 skb->protocol = eth_type_trans(skb, current->nsproxy->net_ns->loopback_dev); 131 131 skb_reset_network_header(skb); ··· 156 156 void *data; 157 157 int ret; 158 158 159 - data = bpf_test_init(kattr, size, XDP_PACKET_HEADROOM, 0); 159 + data = bpf_test_init(kattr, size, XDP_PACKET_HEADROOM + NET_IP_ALIGN, 0); 160 160 if (IS_ERR(data)) 161 161 return PTR_ERR(data); 162 162 163 163 xdp.data_hard_start = data; 164 - xdp.data = data + XDP_PACKET_HEADROOM; 164 + xdp.data = data + XDP_PACKET_HEADROOM + NET_IP_ALIGN; 165 165 xdp.data_end = xdp.data + size; 166 166 167 167 retval = bpf_test_run(prog, &xdp, repeat, &duration); 168 - if (xdp.data != data + XDP_PACKET_HEADROOM) 168 + if (xdp.data != data + XDP_PACKET_HEADROOM + NET_IP_ALIGN) 169 169 size = xdp.data_end - xdp.data; 170 170 ret = bpf_test_finish(kattr, uattr, xdp.data, size, retval, duration); 171 171 kfree(data);