diff options
author | Richard Henderson | 2021-11-19 11:01:46 +0100 |
---|---|---|
committer | Richard Henderson | 2021-11-19 11:01:46 +0100 |
commit | 9c25e1db18d872cbab3f028f93db37931dbc6ae2 (patch) | |
tree | ade57d02097d43ea1f5a1082fe6b2a9ebb91712a /hw/nvme/subsys.c | |
parent | Merge tag 'net-pull-request' of https://github.com/jasowang/qemu into staging (diff) | |
parent | hw/nvme: fix buffer overrun in nvme_changed_nslist (CVE-2021-3947) (diff) | |
download | qemu-9c25e1db18d872cbab3f028f93db37931dbc6ae2.tar.gz qemu-9c25e1db18d872cbab3f028f93db37931dbc6ae2.tar.xz qemu-9c25e1db18d872cbab3f028f93db37931dbc6ae2.zip |
Merge tag 'nvme-fixes-for-6.2-pull-request' of git://git.infradead.org/qemu-nvme into staging
hw/nvme fixes
* Fix CVE-2021-3947
* Controller hotplugging fixes
# gpg: Signature made Fri 19 Nov 2021 08:59:03 AM CET
# gpg: using RSA key 522833AA75E2DCE6A24766C04DE1AF316D4F0DE9
# gpg: Good signature from "Klaus Jensen <its@irrelevant.dk>" [unknown]
# gpg: aka "Klaus Jensen <k.jensen@samsung.com>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg: There is no indication that the signature belongs to the owner.
# Primary key fingerprint: DDCA 4D9C 9EF9 31CC 3468 4272 63D5 6FC5 E55D A838
# Subkey fingerprint: 5228 33AA 75E2 DCE6 A247 66C0 4DE1 AF31 6D4F 0DE9
* tag 'nvme-fixes-for-6.2-pull-request' of git://git.infradead.org/qemu-nvme:
hw/nvme: fix buffer overrun in nvme_changed_nslist (CVE-2021-3947)
hw/nvme: change nvme-ns 'shared' default
hw/nvme: reattach subsystem namespaces on hotplug
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'hw/nvme/subsys.c')
-rw-r--r-- | hw/nvme/subsys.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/hw/nvme/subsys.c b/hw/nvme/subsys.c index 495dcff5eb..fb58d63950 100644 --- a/hw/nvme/subsys.c +++ b/hw/nvme/subsys.c @@ -14,7 +14,7 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp) { NvmeSubsystem *subsys = n->subsys; - int cntlid; + int cntlid, nsid; for (cntlid = 0; cntlid < ARRAY_SIZE(subsys->ctrls); cntlid++) { if (!subsys->ctrls[cntlid]) { @@ -29,12 +29,20 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp) subsys->ctrls[cntlid] = n; + for (nsid = 1; nsid < ARRAY_SIZE(subsys->namespaces); nsid++) { + NvmeNamespace *ns = subsys->namespaces[nsid]; + if (ns && ns->params.shared && !ns->params.detached) { + nvme_attach_ns(n, ns); + } + } + return cntlid; } void nvme_subsys_unregister_ctrl(NvmeSubsystem *subsys, NvmeCtrl *n) { subsys->ctrls[n->cntlid] = NULL; + n->cntlid = -1; } static void nvme_subsys_setup(NvmeSubsystem *subsys) |