netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Shirley Ma <mashirle@us.ibm.com>
Cc: "Michał Mirosław" <mirqus@gmail.com>,
	"Ben Hutchings" <bhutchings@solarflare.com>,
	"David Miller" <davem@davemloft.net>,
	"Eric Dumazet" <eric.dumazet@gmail.com>,
	"Avi Kivity" <avi@redhat.com>, "Arnd Bergmann" <arnd@arndb.de>,
	netdev@vger.kernel.org, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH V5 2/6 net-next] netdevice.h: Add zero-copy flag in netdevice
Date: Wed, 18 May 2011 19:36:33 +0300	[thread overview]
Message-ID: <20110518163633.GB22001@redhat.com> (raw)
In-Reply-To: <1305734857.32080.53.camel@localhost.localdomain>

On Wed, May 18, 2011 at 09:07:37AM -0700, Shirley Ma wrote:
> On Wed, 2011-05-18 at 18:47 +0300, Michael S. Tsirkin wrote:
> > On Wed, May 18, 2011 at 07:38:27AM -0700, Shirley Ma wrote:
> > > On Wed, 2011-05-18 at 13:40 +0200, Michał Mirosław wrote:
> > > > >> >> Not more other restrictions, skb clone is OK.
> > pskb_expand_head()
> > > > looks
> > > > >> >> OK to me from code review.
> > > > >> > Hmm. pskb_expand_head calls skb_release_data while keeping
> > > > >> > references to pages. How is that ok? What do I miss?
> > > > >> It's making copy of the skb_shinfo earlier, so the pages
> > refcount
> > > > >> stays the same.
> > > > > Exactly. But the callback is invoked so the guest thinks it's ok
> > to
> > > > > change this memory. If it does a corrupted packet will be sent
> > out.
> > > > 
> > > > Hmm. I tool a quick look at skb_clone(), and it looks like this
> > > > sequence will break this scheme:
> > > > 
> > > > skb2 = skb_clone(skb...);
> > > > kfree_skb(skb) or pskb_expand_head(skb);  /* callback called */
> > > > [use skb2, pages still referenced]
> > > > kfree_skb(skb); /* callback called again */
> > > > 
> > > > This sequence is common in bridge, might be in other places.
> > > > 
> > > > Maybe this ubuf thing should just track clones? This will make it
> > work
> > > > on all devices then.
> > > 
> > > The callback was only invoked when last reference of skb was gone.
> > > skb_clone does increase skb refcnt. I tested tcpdump on lower
> > device, it
> > > worked.
> > 
> > Right, it will normally work, but two issues I think you miss:
> > 1. malicious guest can change the memory between when it is sent out
> > by
> >    device and consumed by tcpdump, so you will see different things
> >    (not sure how important this is).
> > 2. if tcpdump stops consuming stuff from the packet socket (it's
> >    userspace, can't be trusted) then we won't get a callback for
> >    page potentially forever, guest networking will get blocked etc.
> > > For the sequence of:
> > > 
> > > skb_clone  -> last refcnt + 1
> > > kfree_skb() or pskb_expand_head -> callback not called
> > > kfree_skb() -> callback called
> > > 
> > > I will check page refcount to see whether it's balanced.
> > > 
> > > Thanks
> > > shirley
> > 
> > 
> > pskb_expand_head is a problem anyway I think as it
> > can hang on to pages after it calls release_data.
> > Then guest will modify these pages and you get trash there. 
> 
> This can be avoid by allowing pskb_expand_head in fastpath only, I
> think. But not sure whether tcpdump can still work with this.
> 
> Thanks
> Shirley

Yes, I agree.  I think for tcpdump, we really need to copy the data
anyway, to avoid guest changing it in between.  So we do that and then
use the copy everywhere, release the old one. Hmm?

-- 
MST

  reply	other threads:[~2011-05-18 16:36 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-16 19:28 [PATCH V5 2/6 net-next] netdevice.h: Add zero-copy flag in netdevice Shirley Ma
2011-05-16 19:35 ` Ben Hutchings
2011-05-16 19:38   ` Shirley Ma
2011-05-16 19:47     ` Ben Hutchings
2011-05-16 21:14       ` Michael S. Tsirkin
2011-05-16 23:32         ` Shirley Ma
2011-05-17  6:21           ` Michael S. Tsirkin
2011-05-17 20:53             ` Shirley Ma
2011-05-17 21:48           ` Michał Mirosław
2011-05-17 22:28             ` Shirley Ma
2011-05-17 22:58               ` Michał Mirosław
2011-05-17 23:44                 ` Shirley Ma
2011-05-18  9:06                   ` Michał Mirosław
2011-05-18 10:38               ` Michael S. Tsirkin
2011-05-18 11:10                 ` Michał Mirosław
2011-05-18 11:17                   ` Michael S. Tsirkin
2011-05-18 11:40                     ` Michał Mirosław
2011-05-18 11:47                       ` Michael S. Tsirkin
2011-05-18 14:38                       ` Shirley Ma
2011-05-18 15:47                         ` Michael S. Tsirkin
2011-05-18 16:07                           ` Shirley Ma
2011-05-18 16:36                             ` Michael S. Tsirkin [this message]
2011-05-18 16:45                               ` Shirley Ma
2011-05-18 16:51                                 ` Michael S. Tsirkin
2011-05-18 17:00                                   ` Shirley Ma
2011-05-19 19:42                                     ` Shirley Ma
2011-05-19 23:41                                       ` Michael S. Tsirkin
2011-05-25 22:49                                         ` Shirley Ma
2011-05-26  8:49                                           ` Michael S. Tsirkin
2011-05-26 15:27                                             ` Shirley Ma
2011-05-26 19:11                                             ` Shirley Ma
2011-05-18 16:02                         ` Shirley Ma
2011-05-18 16:23                           ` Michael S. Tsirkin
2011-05-18 16:50                       ` Michael S. Tsirkin
2011-05-18 11:47                     ` Michał Mirosław
2011-05-18 11:56                       ` Michael S. Tsirkin
2011-05-18 12:48                         ` Michał Mirosław
2011-05-18 13:19                           ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110518163633.GB22001@redhat.com \
    --to=mst@redhat.com \
    --cc=arnd@arndb.de \
    --cc=avi@redhat.com \
    --cc=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mashirle@us.ibm.com \
    --cc=mirqus@gmail.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).