On Wed, May 20, 2026 at 11:07:50AM +1000, David Gibson wrote: > On Tue, May 19, 2026 at 10:03:39AM +0200, Laurent Vivier wrote: > > On 5/19/26 07:08, David Gibson wrote: > > > On Mon, May 18, 2026 at 02:26:25PM +0200, Laurent Vivier wrote: > > > > Change udp_update_hdr4() and udp_update_hdr6() to take an iov_tail > > > > pointing at the UDP frame instead of a contiguous udp_payload_t buffer > > > > and explicit data length. This lets vhost-user pass scatter-gather > > > > virtqueue buffers directly without an intermediate copy. > > > > > > > > The UDP header is built into a local struct udphdr and written back with > > > > IOV_PUSH_HEADER(). On the tap side, udp_tap_prepare() wraps the > > > > existing udp_payload_t in a two-element iov to match the new interface. > > > > > > > > Signed-off-by: Laurent Vivier > > > > > > Alas, this still has a potentially aliased memcpy(), see below. > > > > Did you see I updated patch 2 to avoid the memcpy() if the header is > > already in place? > > (I think I should have removed your R-b...) > > I saw the note in the changelog, but I didn't spot the place in the > code specifically - I think I skipped patch 2 because of the R-b and > assumed the change was in patch 3. Unfortunately the one in this > patch is still there. Duh, sorry, I misunderstood how you were fixing the problem. I see you changed PUSH_HEADER to be safe in this circumstance, which does also fix the case in patch 3. Will have that in mind when I review v10. -- 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