From: Keith Busch <kbusch@meta.com>
To: <hch@lst.de>, <sagi@grimberg.me>, <linux-nvme@lists.infradead.org>
Cc: Keith Busch <kbusch@kernel.org>
Subject: [PATCH-part-2 0/9] nvme support for sgl mptr, safe passthrough
Date: Wed, 4 Sep 2024 11:38:08 -0700 [thread overview]
Message-ID: <20240904183818.713941-1-kbusch@meta.com> (raw)
From: Keith Busch <kbusch@kernel.org>
NVMe's implicit memory lengths is a danger to buffer overflows. It's
been know for a long time this vulnerability exists.
The nvme protocol provides sgl with explicit lengths, so if the hardware
is capable, let's use that.
This patch series sets up the driver to always prefer SGL
representations on user passthrough requests. An added bonus to using
SGL for MPTR is that we can support multi-segment integrity buffers,
allowing merging once again. Request merging with metadata, though, is
kind of broken, so that functionality depends on this block patchset
(hence the "part-2" subject prefix):
https://lore.kernel.org/linux-nvme/20240904152605.4055570-1-kbusch@meta.com/
I currently don't have real hardware that supports sgl mptr, but I
believe that's coming to me soon. But in the meantime, if you're like
me, you can use the emulated device. Support for MPTR SGL is provided in
this currently unmerged (but very simple) patch to qemu:
https://lists.nongnu.org/archive/html/qemu-block/2024-08/msg00332.html
Keith Busch (9):
nvme-pci: use sgl capable helper function
nvme-pci: provide prp selection helper
nvme-pci: split out the simple dma mapping
nvme-pci: remove "dma_len" from nvme_iod
nvme-pci: simplify io setup function parameters
nvme-pci: common dma pool alloc helper
nvme-pci: provide a sgl mapping helper
nvme-pci: add support for sgl metadata
nvme: force sgls on user passthrough if possible
drivers/nvme/host/core.c | 4 +-
drivers/nvme/host/ioctl.c | 17 ++
drivers/nvme/host/nvme.h | 7 +
drivers/nvme/host/pci.c | 319 ++++++++++++++++++++++++++------------
include/linux/nvme.h | 1 +
5 files changed, 246 insertions(+), 102 deletions(-)
--
2.43.5
next reply other threads:[~2024-09-04 18:38 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-04 18:38 Keith Busch [this message]
2024-09-04 18:38 ` [PATCH-part-2 1/9] nvme-pci: use sgl capable helper function Keith Busch
2024-09-04 18:38 ` [PATCH-part-2 2/9] nvme-pci: provide prp selection helper Keith Busch
2024-09-06 11:22 ` Anuj Gupta
2024-09-04 18:38 ` [PATCH-part-2 3/9] nvme-pci: split out the simple dma mapping Keith Busch
2024-09-04 18:38 ` [PATCH-part-2 4/9] nvme-pci: remove "dma_len" from nvme_iod Keith Busch
2024-09-04 18:38 ` [PATCH-part-2 5/9] nvme-pci: simplify io setup function parameters Keith Busch
2024-09-06 11:24 ` Anuj Gupta
2024-09-04 18:38 ` [PATCH-part-2 6/9] nvme-pci: common dma pool alloc helper Keith Busch
2024-09-04 18:38 ` [PATCH-part-2 7/9] nvme-pci: provide a sgl mapping helper Keith Busch
2024-09-04 18:38 ` [PATCH-part-2 8/9] nvme-pci: add support for sgl metadata Keith Busch
2024-09-04 19:22 ` Keith Busch
2024-09-04 18:38 ` [PATCH-part-2 9/9] nvme: force sgls on user passthrough if possible Keith Busch
2024-09-04 19:23 ` Keith Busch
2024-09-06 17:29 ` [PATCH-part-2 0/9] nvme support for sgl mptr, safe passthrough Keith Busch
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=20240904183818.713941-1-kbusch@meta.com \
--to=kbusch@meta.com \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
/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