From: Peter Xu <peterx@redhat.com>
To: Alexander Bulekov <alxndr@bu.edu>
Cc: "Akihiko Odaki" <akihiko.odaki@daynix.com>,
qemu-devel@nongnu.org,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [PATCH] softmmu: Use memmove in flatview_write_continue
Date: Mon, 30 Jan 2023 15:28:28 -0500 [thread overview]
Message-ID: <Y9gobLLlMrBnJeZi@x1n> (raw)
In-Reply-To: <20230130200300.be736j6ya5srnphb@mozz.bu.edu>
On Mon, Jan 30, 2023 at 03:03:00PM -0500, Alexander Bulekov wrote:
> On 230130 2251, Akihiko Odaki wrote:
> > We found a case where the source passed to flatview_write_continue() may
> > overlap with the destination when fuzzing igb, a new proposed network
> > device with sanitizers.
> >
> > igb uses pci_dma_map() to get Tx packet, and pci_dma_write() to write Rx
> > buffer. While pci_dma_write() is usually used to write data from
> > memory not mapped to the guest, if igb is configured to perform
> > loopback, the data will be sourced from the guest memory. The source and
> > destination can overlap and the usage of memcpy() will be invalid in
> > such a case.
> >
> > While we do not really have to deal with such an invalid request for
> > igb, detecting the overlap in igb code beforehand requires complex code,
> > and only covers this specific case. Instead, just replace memcpy() with
> > memmove() to torelate overlaps. Using memmove() will slightly damage the
> > performance as it will need to check overlaps before using SIMD
> > instructions for copying, but the cost should be negiligble, considering
> > the inherent complexity of flatview_write_continue().
> >
> > The test cases generated by the fuzzer is available at:
> > https://patchew.org/QEMU/20230129053316.1071513-1-alxndr@bu.edu/
> >
> > The fixed test case is:
> > fuzz/crash_47dfe62d9f911bf523ff48cd441b61c0013ed805
> >
> > Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
>
> Since this is called fairly often, I went down a rabit hole looking at
> memmove vs memcpy perf, but It looks like this should not be much of a
> problem.
Similar here. I quickly had a look at the dump of memmove() and it seems to
me it's directly invoking the SIMD instructions. I'm not sure whether it
means in many cases the SIMD insts are compatible with overlapped buffers
already, so it can be mostly the same as memcpy() in modern hardwares.
>
> Acked-by: Akihiko Odaki <akihiko.odaki@daynix.com>
I received this reply from Alexander Bulekov, but I think this is the
author's contact?
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2023-01-30 20:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-30 13:51 [PATCH] softmmu: Use memmove in flatview_write_continue Akihiko Odaki
2023-01-30 16:37 ` Peter Xu
2023-01-30 20:03 ` Alexander Bulekov
2023-01-30 20:28 ` Peter Xu [this message]
2023-01-30 23:49 ` Alexander Bulekov
2023-01-30 23:03 ` Philippe Mathieu-Daudé
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=Y9gobLLlMrBnJeZi@x1n \
--to=peterx@redhat.com \
--cc=akihiko.odaki@daynix.com \
--cc=alxndr@bu.edu \
--cc=david@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.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).