All of lore.kernel.org
 help / color / mirror / Atom feed
* tun issue after e0b46d0ee9c: tun: Use iovec iterators
@ 2014-11-28 19:25 Marcelo Ricardo Leitner
  2014-11-28 20:37 ` Al Viro
  2014-11-28 23:59 ` Herbert Xu
  0 siblings, 2 replies; 12+ messages in thread
From: Marcelo Ricardo Leitner @ 2014-11-28 19:25 UTC (permalink / raw)
  To: herbert; +Cc: netdev

Hi,

I saw there are tun updates on Dave's queue but none seemed to handle this.

I can't use current net-next (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a 
kvm hypervisor because tun got clogged somehow. Bisected down to:

commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Fri Nov 7 21:22:23 2014 +0800

     tun: Use iovec iterators

     This patch removes the use of skb_copy_datagram_const_iovec in
     favour of the iovec iterator-based skb_copy_datagram_iter.


tun interface, host drops 1 incoming packets from guest, shown at ip -s l l, 
and keeps like that forever. netstat -s didn't mention any checksum issue

12: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master 
virbr0 state UNKNOWN mode DEFAULT group default qlen 500
     link/ether fe:54:00:10:3f:06 brd ff:ff:ff:ff:ff:ff
     RX: bytes  packets  errors  dropped overrun mcast
     0          0        0       1       0       0
     TX: bytes  packets  errors  dropped carrier collsns
     2704       51       0       0       0       0

And tap interfaces go counting dropped++ every time:

20: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master 
virbr0 state UNKNOWN mode DEFAULT group default qlen 500
     link/ether fe:97:a4:a6:14:65 brd ff:ff:ff:ff:ff:ff
     RX: bytes  packets  errors  dropped overrun mcast
     0          0        0       16      0       0
     TX: bytes  packets  errors  dropped carrier collsns
     1456       28       0       0       0       0


traffic capture on guest shows incoming and outgoing packets just fine, while 
on host, it shows no incoming packets at all.

Tested with virtio_net and e1000.

With:

tun.c tun_get_user():
         if (zerocopy)
                 err = zerocopy_sg_from_iter(skb, from);
         else {
                 err = skb_copy_datagram_from_iter(skb, 0, from, len); <- fails
                 if (!err && msg_control) {
                         struct ubuf_info *uarg = msg_control;
                         uarg->callback(uarg, false);
                 }
         }

         if (err) {
                 tun->dev->stats.rx_dropped++;
                 kfree_skb(skb);
                 pr_err("%d %d %d %p\n", __LINE__, zerocopy, err, msg_control);
                 return -EFAULT;
         }

And net/core/datagram.c, skb_copy_datagram_from_iter():
         if (copy > 0) {
                 int ret;
                 if (copy > len)
                         copy = len;
                 ret = copy_from_iter(skb->data + offset, copy, from);
                 if (ret != copy) {
                         pr_err("%d ret=%d copy=%d offset=%d len=%d\n", 
__LINE__, ret, copy, offset, len);
                         goto fault;
                 }


I get, for tun interfaces:
[   75.435552] 506 ret=80 copy=90 offset=0 len=90
[   75.435563] tun: 1124 0 -14           (null)
[   75.499528] 506 ret=80 copy=90 offset=0 len=90
[   75.499540] tun: 1124 0 -14           (null)

These were 1 drop on 1 interface each

And for tap interfaces:
[  301.982639] 506 ret=80 copy=90 offset=0 len=90
[  301.982649] tun: 1124 0 -14           (null)
[  301.988625] 506 ret=80 copy=90 offset=0 len=90
[  301.988635] tun: 1124 0 -14           (null)
[  301.994762] 506 ret=80 copy=90 offset=0 len=90
[  301.994773] tun: 1124 0 -14           (null)
[  302.229962] 506 ret=332 copy=342 offset=0 len=342
[  302.229972] tun: 1124 0 -14           (null)
[  302.230621] 506 ret=332 copy=342 offset=0 len=342
[  302.230627] tun: 1124 0 -14           (null)
[  302.239065] 506 ret=332 copy=342 offset=0 len=342
[  302.239071] tun: 1124 0 -14           (null)

It's returning 10 bytes less than the expected... ideas?

I can provide more info if needed, it's easy to reproduce in here.

Thanks,
Marcelo

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 19:25 tun issue after e0b46d0ee9c: tun: Use iovec iterators Marcelo Ricardo Leitner
@ 2014-11-28 20:37 ` Al Viro
  2014-11-28 22:10   ` Marcelo Ricardo Leitner
  2014-11-28 23:59 ` Herbert Xu
  1 sibling, 1 reply; 12+ messages in thread
From: Al Viro @ 2014-11-28 20:37 UTC (permalink / raw)
  To: Marcelo Ricardo Leitner; +Cc: herbert, netdev

On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
> Hi,
> 
> I saw there are tun updates on Dave's queue but none seemed to handle this.
> 
> I can't use current net-next
> (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
> because tun got clogged somehow. Bisected down to:

Umm...  In host, presumably?

> And net/core/datagram.c, skb_copy_datagram_from_iter():
>         if (copy > 0) {
>                 int ret;
>                 if (copy > len)
>                         copy = len;
>                 ret = copy_from_iter(skb->data + offset, copy, from);
>                 if (ret != copy) {
>                         pr_err("%d ret=%d copy=%d offset=%d
> len=%d\n", __LINE__, ret, copy, offset, len);
>                         goto fault;
>                 }
> 
> 
> I get, for tun interfaces:
> [   75.435552] 506 ret=80 copy=90 offset=0 len=90
> [   75.435563] tun: 1124 0 -14           (null)
> [   75.499528] 506 ret=80 copy=90 offset=0 len=90
> [   75.499540] tun: 1124 0 -14           (null)
> 
> These were 1 drop on 1 interface each
> 
> And for tap interfaces:
> [  301.982639] 506 ret=80 copy=90 offset=0 len=90
> [  301.982649] tun: 1124 0 -14           (null)
> [  301.988625] 506 ret=80 copy=90 offset=0 len=90
> [  301.988635] tun: 1124 0 -14           (null)
> [  301.994762] 506 ret=80 copy=90 offset=0 len=90
> [  301.994773] tun: 1124 0 -14           (null)
> [  302.229962] 506 ret=332 copy=342 offset=0 len=342
> [  302.229972] tun: 1124 0 -14           (null)
> [  302.230621] 506 ret=332 copy=342 offset=0 len=342
> [  302.230627] tun: 1124 0 -14           (null)
> [  302.239065] 506 ret=332 copy=342 offset=0 len=342
> [  302.239071] tun: 1124 0 -14           (null)
> 
> It's returning 10 bytes less than the expected... ideas?

Could you print vnet_hdr_sz and sizeof(gso) right after that
copy_from_iter(&gso, ...)?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 20:37 ` Al Viro
@ 2014-11-28 22:10   ` Marcelo Ricardo Leitner
  2014-11-28 22:35     ` Al Viro
  0 siblings, 1 reply; 12+ messages in thread
From: Marcelo Ricardo Leitner @ 2014-11-28 22:10 UTC (permalink / raw)
  To: Al Viro; +Cc: herbert, netdev

On 28-11-2014 18:37, Al Viro wrote:
> On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
>> Hi,
>>
>> I saw there are tun updates on Dave's queue but none seemed to handle this.
>>
>> I can't use current net-next
>> (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
>> because tun got clogged somehow. Bisected down to:
>
> Umm...  In host, presumably?
>

Exactly

>> And net/core/datagram.c, skb_copy_datagram_from_iter():
>>          if (copy > 0) {
>>                  int ret;
>>                  if (copy > len)
>>                          copy = len;
>>                  ret = copy_from_iter(skb->data + offset, copy, from);
>>                  if (ret != copy) {
>>                          pr_err("%d ret=%d copy=%d offset=%d
>> len=%d\n", __LINE__, ret, copy, offset, len);
>>                          goto fault;
>>                  }
>>
>>
>> I get, for tun interfaces:
>> [   75.435552] 506 ret=80 copy=90 offset=0 len=90
>> [   75.435563] tun: 1124 0 -14           (null)
>> [   75.499528] 506 ret=80 copy=90 offset=0 len=90
>> [   75.499540] tun: 1124 0 -14           (null)
>>
>> These were 1 drop on 1 interface each
>>
>> And for tap interfaces:
>> [  301.982639] 506 ret=80 copy=90 offset=0 len=90
>> [  301.982649] tun: 1124 0 -14           (null)
>> [  301.988625] 506 ret=80 copy=90 offset=0 len=90
>> [  301.988635] tun: 1124 0 -14           (null)
>> [  301.994762] 506 ret=80 copy=90 offset=0 len=90
>> [  301.994773] tun: 1124 0 -14           (null)
>> [  302.229962] 506 ret=332 copy=342 offset=0 len=342
>> [  302.229972] tun: 1124 0 -14           (null)
>> [  302.230621] 506 ret=332 copy=342 offset=0 len=342
>> [  302.230627] tun: 1124 0 -14           (null)
>> [  302.239065] 506 ret=332 copy=342 offset=0 len=342
>> [  302.239071] tun: 1124 0 -14           (null)
>>
>> It's returning 10 bytes less than the expected... ideas?
>
> Could you print vnet_hdr_sz and sizeof(gso) right after that
> copy_from_iter(&gso, ...)?

Did a:
         else {
                 err = skb_copy_datagram_from_iter(skb, 0, from, len);
+               pr_err("vnet_hdr_sz=%d sizeof(gso)=%lu\n", tun->vnet_hdr_sz, 
sizeof(gso));
                 if (!err && msg_control) {

Got, for tun:
[   50.514165] tun: vnet_hdr_sz=12 sizeof(gso)=10

for tap:
[   82.911840] tun: vnet_hdr_sz=10 sizeof(gso)=10

other values were just as before.

Marcelo

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 22:10   ` Marcelo Ricardo Leitner
@ 2014-11-28 22:35     ` Al Viro
  2014-11-29  4:49       ` Marcelo Ricardo Leitner
  0 siblings, 1 reply; 12+ messages in thread
From: Al Viro @ 2014-11-28 22:35 UTC (permalink / raw)
  To: Marcelo Ricardo Leitner; +Cc: herbert, netdev

On Fri, Nov 28, 2014 at 08:10:03PM -0200, Marcelo Ricardo Leitner wrote:
> >Could you print vnet_hdr_sz and sizeof(gso) right after that
> >copy_from_iter(&gso, ...)?
> 
> Did a:
>         else {
>                 err = skb_copy_datagram_from_iter(skb, 0, from, len);
> +               pr_err("vnet_hdr_sz=%d sizeof(gso)=%lu\n",
> tun->vnet_hdr_sz, sizeof(gso));
>                 if (!err && msg_control) {
> 
> Got, for tun:
> [   50.514165] tun: vnet_hdr_sz=12 sizeof(gso)=10
> 
> for tap:
> [   82.911840] tun: vnet_hdr_sz=10 sizeof(gso)=10
> 
> other values were just as before.

Hmm...  Do you have
commit 8c847d254146d32c86574a1b16923ff91bb784dd
Author: Jason Wang <jasowang@redhat.com>
Date:   Thu Nov 13 16:54:14 2014 +0800

    tun: fix issues of iovec iterators using in tun_put_user()
in your tree?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 19:25 tun issue after e0b46d0ee9c: tun: Use iovec iterators Marcelo Ricardo Leitner
  2014-11-28 20:37 ` Al Viro
@ 2014-11-28 23:59 ` Herbert Xu
  2014-11-29  5:08   ` Marcelo Ricardo Leitner
  2014-11-30 10:03   ` Herbert Xu
  1 sibling, 2 replies; 12+ messages in thread
From: Herbert Xu @ 2014-11-28 23:59 UTC (permalink / raw)
  To: Marcelo Ricardo Leitner; +Cc: netdev

On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
> 
> I saw there are tun updates on Dave's queue but none seemed to handle this.
> 
> I can't use current net-next
> (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
> because tun got clogged somehow. Bisected down to:
> 
> commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
> Author: Herbert Xu <herbert@gondor.apana.org.au>
> Date:   Fri Nov 7 21:22:23 2014 +0800

Does this patch help?

-- >8 --
Subject: tun: Fix GSO meta-data handling in tun_get_user

When we write the GSO meta-data in tun_get_user we end up advancing
the IO vector twice, thus exhausting the user buffer before we can
finish writing the packet.

Fixes: f5ff53b4d97c ("{macvtap,tun}_get_user(): switch to iov_iter")
Reported-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 4b743c6..9357871 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1052,7 +1052,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
 
 		if (gso.hdr_len > len)
 			return -EINVAL;
-		iov_iter_advance(from, tun->vnet_hdr_sz);
+		iov_iter_advance(iter, tun->vnet_hdr_sz - sizeof(gso));
 	}
 
 	if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) {

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 22:35     ` Al Viro
@ 2014-11-29  4:49       ` Marcelo Ricardo Leitner
  0 siblings, 0 replies; 12+ messages in thread
From: Marcelo Ricardo Leitner @ 2014-11-29  4:49 UTC (permalink / raw)
  To: Al Viro; +Cc: herbert, netdev

On 28-11-2014 20:35, Al Viro wrote:
> On Fri, Nov 28, 2014 at 08:10:03PM -0200, Marcelo Ricardo Leitner wrote:
>>> Could you print vnet_hdr_sz and sizeof(gso) right after that
>>> copy_from_iter(&gso, ...)?
>>
>> Did a:
>>          else {
>>                  err = skb_copy_datagram_from_iter(skb, 0, from, len);
>> +               pr_err("vnet_hdr_sz=%d sizeof(gso)=%lu\n",
>> tun->vnet_hdr_sz, sizeof(gso));
>>                  if (!err && msg_control) {
>>
>> Got, for tun:
>> [   50.514165] tun: vnet_hdr_sz=12 sizeof(gso)=10
>>
>> for tap:
>> [   82.911840] tun: vnet_hdr_sz=10 sizeof(gso)=10
>>
>> other values were just as before.
>
> Hmm...  Do you have
> commit 8c847d254146d32c86574a1b16923ff91bb784dd
> Author: Jason Wang <jasowang@redhat.com>
> Date:   Thu Nov 13 16:54:14 2014 +0800
>
>      tun: fix issues of iovec iterators using in tun_put_user()
> in your tree?
>

Yes I have. I'm using based on net-next's 
799d2fff1858004526ad75d66a5dd8a5cce6ad40.

Marcelo

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 23:59 ` Herbert Xu
@ 2014-11-29  5:08   ` Marcelo Ricardo Leitner
  2014-11-30  8:21     ` Herbert Xu
  2014-11-30 10:03   ` Herbert Xu
  1 sibling, 1 reply; 12+ messages in thread
From: Marcelo Ricardo Leitner @ 2014-11-29  5:08 UTC (permalink / raw)
  To: Herbert Xu; +Cc: netdev

On 28-11-2014 21:59, Herbert Xu wrote:
> On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
>>
>> I saw there are tun updates on Dave's queue but none seemed to handle this.
>>
>> I can't use current net-next
>> (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
>> because tun got clogged somehow. Bisected down to:
>>
>> commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
>> Author: Herbert Xu <herbert@gondor.apana.org.au>
>> Date:   Fri Nov 7 21:22:23 2014 +0800
>
> Does this patch help?

Yay, it does! Works for me, thanks Herbert.
I didn't test performance, but dhcp could get through.

Are you sure about the Fixes tag? Because bisect really pointed to e0b46d0ee9c.

Cheers,
Marcelo

> -- >8 --
> Subject: tun: Fix GSO meta-data handling in tun_get_user
>
> When we write the GSO meta-data in tun_get_user we end up advancing
> the IO vector twice, thus exhausting the user buffer before we can
> finish writing the packet.
>
> Fixes: f5ff53b4d97c ("{macvtap,tun}_get_user(): switch to iov_iter")
> Reported-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
>
> diff --git a/drivers/net/tun.c b/drivers/net/tun.c
> index 4b743c6..9357871 100644
> --- a/drivers/net/tun.c
> +++ b/drivers/net/tun.c
> @@ -1052,7 +1052,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
>
>   		if (gso.hdr_len > len)
>   			return -EINVAL;
> -		iov_iter_advance(from, tun->vnet_hdr_sz);
> +		iov_iter_advance(iter, tun->vnet_hdr_sz - sizeof(gso));
>   	}
>
>   	if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) {
>
> Cheers,
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-29  5:08   ` Marcelo Ricardo Leitner
@ 2014-11-30  8:21     ` Herbert Xu
  2014-12-01 13:05       ` Marcelo Ricardo Leitner
  0 siblings, 1 reply; 12+ messages in thread
From: Herbert Xu @ 2014-11-30  8:21 UTC (permalink / raw)
  To: Marcelo Ricardo Leitner; +Cc: netdev

On Sat, Nov 29, 2014 at 03:08:09AM -0200, Marcelo Ricardo Leitner wrote:
> On 28-11-2014 21:59, Herbert Xu wrote:
> >On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
> >>
> >>I saw there are tun updates on Dave's queue but none seemed to handle this.
> >>
> >>I can't use current net-next
> >>(799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
> >>because tun got clogged somehow. Bisected down to:
> >>
> >>commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
> >>Author: Herbert Xu <herbert@gondor.apana.org.au>
> >>Date:   Fri Nov 7 21:22:23 2014 +0800
> >
> >Does this patch help?
> 
> Yay, it does! Works for me, thanks Herbert.
> I didn't test performance, but dhcp could get through.
> 
> Are you sure about the Fixes tag? Because bisect really pointed to e0b46d0ee9c.

Well according to your report you were having problems with
tun_get_user.  The bug I introduced was in tun_put_user and has
already been fixed by Jason Wang.

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-28 23:59 ` Herbert Xu
  2014-11-29  5:08   ` Marcelo Ricardo Leitner
@ 2014-11-30 10:03   ` Herbert Xu
  2014-12-01  5:33     ` Jason Wang
  2014-12-03  4:54     ` David Miller
  1 sibling, 2 replies; 12+ messages in thread
From: Herbert Xu @ 2014-11-30 10:03 UTC (permalink / raw)
  To: Marcelo Ricardo Leitner; +Cc: netdev

On Sat, Nov 29, 2014 at 07:59:35AM +0800, Herbert Xu wrote:
> On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
> > 
> > I saw there are tun updates on Dave's queue but none seemed to handle this.
> > 
> > I can't use current net-next
> > (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
> > because tun got clogged somehow. Bisected down to:
> > 
> > commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
> > Author: Herbert Xu <herbert@gondor.apana.org.au>
> > Date:   Fri Nov 7 21:22:23 2014 +0800
> 
> Does this patch help?

Oops, there was an embarrassing typo in the patch which causes
it to not even build.  Here is the corrected version.

-- >8 --
Subject: tun: Fix GSO meta-data handling in tun_get_user
    
When we write the GSO meta-data in tun_get_user we end up advancing
the IO vector twice, thus exhausting the user buffer before we can
finish writing the packet.
    
Fixes: f5ff53b4d97c ("{macvtap,tun}_get_user(): switch to iov_iter")
Reported-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 4b743c6..6d44da1 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1052,7 +1052,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
 
 		if (gso.hdr_len > len)
 			return -EINVAL;
-		iov_iter_advance(from, tun->vnet_hdr_sz);
+		iov_iter_advance(from, tun->vnet_hdr_sz - sizeof(gso));
 	}
 
 	if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) {

Thanks,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-30 10:03   ` Herbert Xu
@ 2014-12-01  5:33     ` Jason Wang
  2014-12-03  4:54     ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: Jason Wang @ 2014-12-01  5:33 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Marcelo Ricardo Leitner, netdev



On Sun, Nov 30, 2014 at 6:03 PM, Herbert Xu 
<herbert@gondor.apana.org.au> wrote:
> On Sat, Nov 29, 2014 at 07:59:35AM +0800, Herbert Xu wrote:
>>  On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner 
>> wrote:
>>  > 
>>  > I saw there are tun updates on Dave's queue but none seemed to 
>> handle this.
>>  > 
>>  > I can't use current net-next
>>  > (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
>>  > because tun got clogged somehow. Bisected down to:
>>  > 
>>  > commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
>>  > Author: Herbert Xu <herbert@gondor.apana.org.au>
>>  > Date:   Fri Nov 7 21:22:23 2014 +0800
>>  
>>  Does this patch help?
> 
> Oops, there was an embarrassing typo in the patch which causes
> it to not even build.  Here is the corrected version.
> 
> -- >8 --
> Subject: tun: Fix GSO meta-data handling in tun_get_user
>     
> When we write the GSO meta-data in tun_get_user we end up advancing
> the IO vector twice, thus exhausting the user buffer before we can
> finish writing the packet.
>     
> Fixes: f5ff53b4d97c ("{macvtap,tun}_get_user(): switch to iov_iter")
> Reported-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> 
> diff --git a/drivers/net/tun.c b/drivers/net/tun.c
> index 4b743c6..6d44da1 100644
> --- a/drivers/net/tun.c
> +++ b/drivers/net/tun.c
> @@ -1052,7 +1052,7 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  
>  		if (gso.hdr_len > len)
>  			return -EINVAL;
> -		iov_iter_advance(from, tun->vnet_hdr_sz);
> +		iov_iter_advance(from, tun->vnet_hdr_sz - sizeof(gso));
>  	}
>  
>  	if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) {
> 

Acked-by: Jason Wang <jasowang@redhat.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-30  8:21     ` Herbert Xu
@ 2014-12-01 13:05       ` Marcelo Ricardo Leitner
  0 siblings, 0 replies; 12+ messages in thread
From: Marcelo Ricardo Leitner @ 2014-12-01 13:05 UTC (permalink / raw)
  To: Herbert Xu; +Cc: netdev

On 30-11-2014 06:21, Herbert Xu wrote:
> On Sat, Nov 29, 2014 at 03:08:09AM -0200, Marcelo Ricardo Leitner wrote:
>> On 28-11-2014 21:59, Herbert Xu wrote:
>>> On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
>>>>
>>>> I saw there are tun updates on Dave's queue but none seemed to handle this.
>>>>
>>>> I can't use current net-next
>>>> (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
>>>> because tun got clogged somehow. Bisected down to:
>>>>
>>>> commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
>>>> Author: Herbert Xu <herbert@gondor.apana.org.au>
>>>> Date:   Fri Nov 7 21:22:23 2014 +0800
>>>
>>> Does this patch help?
>>
>> Yay, it does! Works for me, thanks Herbert.
>> I didn't test performance, but dhcp could get through.
>>
>> Are you sure about the Fixes tag? Because bisect really pointed to e0b46d0ee9c.
>
> Well according to your report you were having problems with
> tun_get_user.  The bug I introduced was in tun_put_user and has
> already been fixed by Jason Wang.

Ahh yes, ok. Thanks

Cheers,
Marcelo

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: tun issue after e0b46d0ee9c: tun: Use iovec iterators
  2014-11-30 10:03   ` Herbert Xu
  2014-12-01  5:33     ` Jason Wang
@ 2014-12-03  4:54     ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2014-12-03  4:54 UTC (permalink / raw)
  To: herbert; +Cc: mleitner, netdev

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Sun, 30 Nov 2014 18:03:31 +0800

> On Sat, Nov 29, 2014 at 07:59:35AM +0800, Herbert Xu wrote:
>> On Fri, Nov 28, 2014 at 05:25:27PM -0200, Marcelo Ricardo Leitner wrote:
>> > 
>> > I saw there are tun updates on Dave's queue but none seemed to handle this.
>> > 
>> > I can't use current net-next
>> > (799d2fff1858004526ad75d66a5dd8a5cce6ad40) on a kvm hypervisor
>> > because tun got clogged somehow. Bisected down to:
>> > 
>> > commit e0b46d0ee9c240c7430a47e9b0365674d4a04522
>> > Author: Herbert Xu <herbert@gondor.apana.org.au>
>> > Date:   Fri Nov 7 21:22:23 2014 +0800
>> 
>> Does this patch help?
> 
> Oops, there was an embarrassing typo in the patch which causes
> it to not even build.  Here is the corrected version.
> 
> -- >8 --
> Subject: tun: Fix GSO meta-data handling in tun_get_user
>     
> When we write the GSO meta-data in tun_get_user we end up advancing
> the IO vector twice, thus exhausting the user buffer before we can
> finish writing the packet.
>     
> Fixes: f5ff53b4d97c ("{macvtap,tun}_get_user(): switch to iov_iter")
> Reported-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Applied, thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2014-12-03  4:50 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-28 19:25 tun issue after e0b46d0ee9c: tun: Use iovec iterators Marcelo Ricardo Leitner
2014-11-28 20:37 ` Al Viro
2014-11-28 22:10   ` Marcelo Ricardo Leitner
2014-11-28 22:35     ` Al Viro
2014-11-29  4:49       ` Marcelo Ricardo Leitner
2014-11-28 23:59 ` Herbert Xu
2014-11-29  5:08   ` Marcelo Ricardo Leitner
2014-11-30  8:21     ` Herbert Xu
2014-12-01 13:05       ` Marcelo Ricardo Leitner
2014-11-30 10:03   ` Herbert Xu
2014-12-01  5:33     ` Jason Wang
2014-12-03  4:54     ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.