From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
qemu-block@nongnu.org,
"Richard Henderson" <richard.henderson@linaro.org>,
"Max Reitz" <mreitz@redhat.com>,
"Klaus Jensen" <its@irrelevant.dk>,
qemu-ppc@nongnu.org, "Gerd Hoffmann" <kraxel@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Keith Busch" <kbusch@kernel.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: [PATCH 08/23] hw/block/nvme: Avoid dynamic stack allocation
Date: Wed, 5 May 2021 23:10:32 +0200 [thread overview]
Message-ID: <20210505211047.1496765-9-philmd@redhat.com> (raw)
In-Reply-To: <20210505211047.1496765-1-philmd@redhat.com>
Use autofree heap allocation instead of variable-length
array on the stack.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/block/nvme.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 2f6d4925826..905c4bb57af 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -652,7 +652,7 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, uint64_t prp1,
len -= trans_len;
if (len) {
if (len > n->page_size) {
- uint64_t prp_list[n->max_prp_ents];
+ g_autofree uint64_t *prp_list = NULL;
uint32_t nents, prp_trans;
int i = 0;
@@ -662,8 +662,10 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, uint64_t prp1,
* that offset.
*/
nents = (n->page_size - (prp2 & (n->page_size - 1))) >> 3;
- prp_trans = MIN(n->max_prp_ents, nents) * sizeof(uint64_t);
- ret = nvme_addr_read(n, prp2, (void *)prp_list, prp_trans);
+ prp_trans = MIN(n->max_prp_ents, nents);
+ prp_list = g_new(uint64_t, prp_trans);
+ ret = nvme_addr_read(n, prp2, (void *)prp_list,
+ prp_trans * sizeof(uint64_t));
if (ret) {
trace_pci_nvme_err_addr_read(prp2);
status = NVME_DATA_TRAS_ERROR;
@@ -682,9 +684,8 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, uint64_t prp1,
i = 0;
nents = (len + n->page_size - 1) >> n->page_bits;
nents = MIN(nents, n->max_prp_ents);
- prp_trans = nents * sizeof(uint64_t);
ret = nvme_addr_read(n, prp_ent, (void *)prp_list,
- prp_trans);
+ nents * sizeof(uint64_t));
if (ret) {
trace_pci_nvme_err_addr_read(prp_ent);
status = NVME_DATA_TRAS_ERROR;
@@ -2510,10 +2511,10 @@ static uint16_t nvme_dsm(NvmeCtrl *n, NvmeRequest *req)
if (attr & NVME_DSMGMT_AD) {
int64_t offset;
size_t len;
- NvmeDsmRange range[nr];
+ g_autofree NvmeDsmRange *range = g_new(NvmeDsmRange, nr);
uintptr_t *discards = (uintptr_t *)&req->opaque;
- status = nvme_h2c(n, (uint8_t *)range, sizeof(range), req);
+ status = nvme_h2c(n, (uint8_t *)range, sizeof(*range) * nr, req);
if (status) {
return status;
}
--
2.26.3
next prev parent reply other threads:[~2021-05-05 21:26 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-05 21:10 [PATCH 00/23] misc: Remove variable-length arrays on the stack Philippe Mathieu-Daudé
2021-05-05 21:10 ` [PATCH 01/23] block/vpc: Avoid dynamic stack allocation Philippe Mathieu-Daudé
2021-05-05 21:10 ` [PATCH 02/23] chardev/baum: Replace magic values by X_MAX / Y_MAX definitions Philippe Mathieu-Daudé
2021-05-05 21:12 ` Samuel Thibault
2021-05-05 21:24 ` Marc-André Lureau
2021-05-05 21:10 ` [PATCH 03/23] chardev/baum: Use definitions to avoid dynamic stack allocation Philippe Mathieu-Daudé
2021-05-05 21:14 ` Samuel Thibault
2021-05-05 21:27 ` Marc-André Lureau
2021-05-05 21:39 ` Samuel Thibault
2021-05-05 21:10 ` [PATCH 04/23] chardev/baum: Avoid " Philippe Mathieu-Daudé
2021-05-05 21:15 ` Samuel Thibault
2021-05-05 21:29 ` Marc-André Lureau
2021-05-05 21:10 ` [PATCH 05/23] io/channel-websock: Replace strlen(const_str) by sizeof(const_str) - 1 Philippe Mathieu-Daudé
2021-05-06 8:36 ` Daniel P. Berrangé
2021-05-05 21:10 ` [PATCH 06/23] hw/block/dataplane/virtio-blk: Avoid dynamic stack allocation Philippe Mathieu-Daudé
2021-05-06 8:53 ` Stefan Hajnoczi
2021-05-06 9:01 ` Philippe Mathieu-Daudé
2021-05-06 14:47 ` Stefan Hajnoczi
2021-05-06 15:19 ` Philippe Mathieu-Daudé
2021-05-10 9:09 ` Stefan Hajnoczi
2021-05-05 21:10 ` [PATCH 07/23] hw/block/nvme: Use definition to avoid " Philippe Mathieu-Daudé
2021-05-05 21:22 ` Keith Busch
2021-05-05 22:07 ` Philippe Mathieu-Daudé
2021-05-05 23:09 ` Eric Blake
2021-05-06 0:14 ` Warner Losh
2021-05-06 2:15 ` Keith Busch
2021-05-06 6:42 ` Philippe Mathieu-Daudé
2021-05-07 16:22 ` Richard Henderson
2021-05-06 6:27 ` Klaus Jensen
2021-05-07 15:59 ` Richard Henderson
2021-05-05 21:10 ` Philippe Mathieu-Daudé [this message]
2021-05-06 6:43 ` [PATCH 08/23] hw/block/nvme: Avoid " Klaus Jensen
2021-05-05 21:10 ` [PATCH 09/23] hw/net/e1000e_core: Use definition to avoid " Philippe Mathieu-Daudé
2021-05-06 3:35 ` Jason Wang
2021-05-07 16:29 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 10/23] hw/ppc/pnv: Avoid " Philippe Mathieu-Daudé
2021-05-06 2:12 ` David Gibson
2021-05-05 21:10 ` [PATCH 11/23] hw/intc/xics: " Philippe Mathieu-Daudé
2021-05-06 2:13 ` David Gibson
2021-05-06 8:22 ` Greg Kurz
2021-05-06 13:52 ` Philippe Mathieu-Daudé
2021-05-05 21:10 ` [PATCH 12/23] hw/i386/multiboot: " Philippe Mathieu-Daudé
2021-05-07 16:27 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 13/23] hw/usb/hcd-xhci: " Philippe Mathieu-Daudé
2021-05-07 16:34 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 14/23] hw/usb/hcd-ohci: Use definition to avoid " Philippe Mathieu-Daudé
2021-05-07 16:39 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 15/23] net: Avoid " Philippe Mathieu-Daudé
2021-05-06 2:15 ` David Gibson
2021-05-06 7:09 ` Jason Wang
2021-05-05 21:10 ` [PATCH 16/23] ui/curses: " Philippe Mathieu-Daudé
2021-05-07 16:42 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 17/23] ui/spice-display: " Philippe Mathieu-Daudé
2021-05-05 21:10 ` [PATCH 18/23] ui/vnc-enc-hextile: Use definitions to avoid " Philippe Mathieu-Daudé
2021-05-07 16:46 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 19/23] ui/vnc-enc-tight: Avoid " Philippe Mathieu-Daudé
2021-05-05 21:10 ` [PATCH 20/23] util/iov: " Philippe Mathieu-Daudé
2021-05-05 21:10 ` [PATCH 21/23] target/ppc/kvm: " Philippe Mathieu-Daudé
2021-05-06 2:16 ` David Gibson
2021-05-05 21:10 ` [PATCH 22/23] tests/unit/test-vmstate: " Philippe Mathieu-Daudé
2021-05-07 16:52 ` Richard Henderson
2021-05-05 21:10 ` [PATCH 23/23] configure: Prohibit variable-length allocations by using -Wvla CPPFLAG Philippe Mathieu-Daudé
2021-05-07 16:56 ` Richard Henderson
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=20210505211047.1496765-9-philmd@redhat.com \
--to=philmd@redhat.com \
--cc=berrange@redhat.com \
--cc=its@irrelevant.dk \
--cc=kbusch@kernel.org \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=richard.henderson@linaro.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).