public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Stefano Brivio <sbrivio@redhat.com>
Cc: passt-dev@passt.top
Subject: Re: [PATCH 2/3] packet: Don't have struct pool specify its buffer
Date: Sat, 21 Dec 2024 17:59:59 +1100	[thread overview]
Message-ID: <Z2Znb63_QyYoRCrX@zatzit> (raw)
In-Reply-To: <20241220105133.6f6ee3d6@elisabeth>

[-- Attachment #1: Type: text/plain, Size: 3675 bytes --]

On Fri, Dec 20, 2024 at 10:51:33AM +0100, Stefano Brivio wrote:
> On Fri, 20 Dec 2024 11:59:09 +1100
> David Gibson <david@gibson.dropbear.id.au> wrote:
> 
> > On Thu, Dec 19, 2024 at 10:00:11AM +0100, Stefano Brivio wrote:
> > > On Fri, 13 Dec 2024 23:01:55 +1100
> > > David Gibson <david@gibson.dropbear.id.au> wrote:
> > >   
> > > > struct pool, which represents a batch of packets includes values giving
> > > > the buffer in which all the packets lie - or for vhost_user a link to the
> > > > vu_dev_region array in which the packets sit.  Originally that made sense
> > > > because we stored each packet as an offset and length within that buffer.
> > > > 
> > > > However dd143e389 ("packet: replace struct desc by struct iovec") replaced
> > > > the offset and length with a struct iovec which can directly reference a
> > > > packet anywhere in memory.  This means we no longer need the buffer
> > > > reference to interpret packets from the pool.  So there's really no need
> > > > to check where the packet sits.  We can remove the buf reference and all
> > > > checks associated with it.  As a bonus this removes the special case for
> > > > vhost-user.
> > > > 
> > > > Similarly the old representation used a 16-bit length, so there were some
> > > > checks that packets didn't exceed that.  That's also no longer necessary
> > > > with the struct iovec which uses a size_t length.
> > > > 
> > > > I think under an unlikely set of circumstances it might have been possible
> > > > to hit that 16-bit limit for a legitimate packet: other parts of the code
> > > > place a limit of 65535 bytes on the L2 frame, however that doesn't include
> > > > the length tag used by the qemu socket protocol.  That tag *is* included in
> > > > the packet as stored in the pool, however, meaning we could get a 65539
> > > > byte packet at this level.  
> > > 
> > > As I mentioned in the call on Monday: sure, we need to fix this, but at
> > > the same time I'm not quite convinced that it's a good idea to drop all
> > > these sanity checks.
> > > 
> > > Even if they're not based on offsets anymore, I think it's still
> > > valuable to ensure that the packets are not exactly _anywhere_ in
> > > memory, but only where we expect them to be.
> > > 
> > > If it's doable, I would rather keep these checks, and change the ones
> > > on the length to allow a maximum value of 65539 bytes. I mean, there's
> > > a big difference between 65539 and, say, 4294967296.  
> > 
> > Right, I have draft patches that do basically this.
> > 
> > > By the way, I haven't checked what happens with MTUs slightly bigger
> > > than 65520 bytes: virtio-net (at least with QEMU) doesn't budge if I
> > > set more than 65520, but I didn't actually send big packets. I'll try
> > > to have a look (also with muvm) unless you already checked.  
> > 
> > I'm not sure what you mean by "doesn't budge".  No, I haven't checked
> > with either qemu or muvm.  There could of course be limits applied by
> > either VMM, or by the guest virtio-net driver.
> 
> Oh, sorry, I was deep in the perspective of trying to make things
> crash... and it didn't do anything, just accepted the setting and kept
> sending packets out.

Right.  Even without my packet pool changes, I'm not aware of a way to
make it crash, just ways to cause packets to be dropped when they
shouldn't.

> Let me try that then, with and without your new series...
> 

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2024-12-21  7:21 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-13 12:01 [PATCH 0/3] Cleanups to packet pool handling and sizing David Gibson
2024-12-13 12:01 ` [PATCH 1/3] packet: Use flexible array member in struct pool David Gibson
2024-12-13 12:01 ` [PATCH 2/3] packet: Don't have struct pool specify its buffer David Gibson
2024-12-19  9:00   ` Stefano Brivio
2024-12-20  0:59     ` David Gibson
2024-12-20  9:51       ` Stefano Brivio
2024-12-21  6:59         ` David Gibson [this message]
2024-12-13 12:01 ` [PATCH 3/3] tap: Don't size pool_tap[46] for the maximum number of packets David Gibson
2024-12-19  9:00   ` Stefano Brivio
2024-12-20  1:13     ` David Gibson
2024-12-20  9:51       ` Stefano Brivio
2024-12-21  7:00         ` David Gibson

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=Z2Znb63_QyYoRCrX@zatzit \
    --to=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    --cc=sbrivio@redhat.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

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 IMAP folder(s).