diff mbox series

[bpf-next] bpf: fix virtio-net's length calc for XDP_PASS

Message ID 20180423041648.2285-1-tehnerd@tehnerd.com
State Accepted, archived
Delegated to: BPF Maintainers
Headers show
Series [bpf-next] bpf: fix virtio-net's length calc for XDP_PASS | expand

Commit Message

Nikita V. Shirokov April 23, 2018, 4:16 a.m. UTC
In commit 6870de435b90 ("bpf: make virtio compatible w/ 
bpf_xdp_adjust_tail") i didn't account for vi->hdr_len during new 
packet's length calculation after bpf_prog_run in receive_mergeable. 
because of this all packets, if they were passed to the kernel, 
were truncated by 12 bytes.

Fixes:6870de435b90 ("bpf: make virtio compatible w/ bpf_xdp_adjust_tail")
Reported-by: David Ahern <dsahern@gmail.com>

Signed-off-by: Nikita V. Shirokov <tehnerd@tehnerd.com>
---

Notes:
    unfortunately it looks like that xdp_tx is still broken because
    fix by Jason (introduced in "XDP_TX for virtio_net not working in recent kernel?
    " thread) haven't landed yet)

 drivers/net/virtio_net.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jason Wang April 23, 2018, 6:33 a.m. UTC | #1
On 2018年04月23日 12:16, Nikita V. Shirokov wrote:
> In commit 6870de435b90 ("bpf: make virtio compatible w/
> bpf_xdp_adjust_tail") i didn't account for vi->hdr_len during new
> packet's length calculation after bpf_prog_run in receive_mergeable.
> because of this all packets, if they were passed to the kernel,
> were truncated by 12 bytes.
>
> Fixes:6870de435b90 ("bpf: make virtio compatible w/ bpf_xdp_adjust_tail")
> Reported-by: David Ahern <dsahern@gmail.com>
>
> Signed-off-by: Nikita V. Shirokov <tehnerd@tehnerd.com>
> ---
>
> Notes:
>      unfortunately it looks like that xdp_tx is still broken because
>      fix by Jason (introduced in "XDP_TX for virtio_net not working in recent kernel?
>      " thread) haven't landed yet)
>
>   drivers/net/virtio_net.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 779a4f798522..08ac2cc986aa 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -761,7 +761,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
>   			/* recalculate len if xdp.data or xdp.data_end were
>   			 * adjusted
>   			 */
> -			len = xdp.data_end - xdp.data;
> +			len = xdp.data_end - xdp.data + vi->hdr_len;
>   			/* We can only create skb based on xdp_page. */
>   			if (unlikely(xdp_page != page)) {
>   				rcu_read_unlock();

Acked-by: Jason Wang <jasowang@redhat.com>
Daniel Borkmann April 23, 2018, 9:30 a.m. UTC | #2
On 04/23/2018 08:33 AM, Jason Wang wrote:
> On 2018年04月23日 12:16, Nikita V. Shirokov wrote:
>> In commit 6870de435b90 ("bpf: make virtio compatible w/
>> bpf_xdp_adjust_tail") i didn't account for vi->hdr_len during new
>> packet's length calculation after bpf_prog_run in receive_mergeable.
>> because of this all packets, if they were passed to the kernel,
>> were truncated by 12 bytes.
>>
>> Fixes:6870de435b90 ("bpf: make virtio compatible w/ bpf_xdp_adjust_tail")
>> Reported-by: David Ahern <dsahern@gmail.com>
>>
>> Signed-off-by: Nikita V. Shirokov <tehnerd@tehnerd.com>
[...]
> 
> Acked-by: Jason Wang <jasowang@redhat.com>

Applied to bpf-next, thanks everyone!
diff mbox series

Patch

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 779a4f798522..08ac2cc986aa 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -761,7 +761,7 @@  static struct sk_buff *receive_mergeable(struct net_device *dev,
 			/* recalculate len if xdp.data or xdp.data_end were
 			 * adjusted
 			 */
-			len = xdp.data_end - xdp.data;
+			len = xdp.data_end - xdp.data + vi->hdr_len;
 			/* We can only create skb based on xdp_page. */
 			if (unlikely(xdp_page != page)) {
 				rcu_read_unlock();