aboutsummaryrefslogtreecommitdiff
path: root/qemu-nbd.c
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2023-07-27 12:58:28 +0200
committerEric Blake <eblake@redhat.com>2023-07-27 08:33:44 -0500
commite5b815b0defcc3617f473ba70c3e675ef0ee69c2 (patch)
treea5600a661f32ec925144eb7775adc96f364a16cb /qemu-nbd.c
parentccdd31267678db9d80578b5f80bbe94141609ef4 (diff)
downloadqemu-e5b815b0defcc3617f473ba70c3e675ef0ee69c2.zip
qemu-e5b815b0defcc3617f473ba70c3e675ef0ee69c2.tar.gz
qemu-e5b815b0defcc3617f473ba70c3e675ef0ee69c2.tar.bz2
qemu-nbd: regression with arguments passing into nbd_client_thread()
Unfortunately commit 03b67621445d601c9cdc7dfe25812e9f19b81488 Author: Denis V. Lunev <den@openvz.org> Date: Mon Jul 17 16:55:40 2023 +0200 qemu-nbd: pass structure into nbd_client_thread instead of plain char* has introduced a regression. struct NbdClientOpts resides on stack inside 'if' block. This specifically means that this stack space could be reused once the execution will leave that block of the code. This means that parameters passed into nbd_client_thread could be overwritten at any moment. The patch moves the data to the namespace of main() function effectively preserving it for the whole process lifetime. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Eric Blake <eblake@redhat.com> CC: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> CC: <qemu-stable@nongnu.org> Reviewed-by: Eric Blake <eblake@redhat.com> Message-ID: <20230727105828.324314-1-den@openvz.org> Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'qemu-nbd.c')
-rw-r--r--qemu-nbd.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 5b27579..aaccaa3 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -589,6 +589,9 @@ int main(int argc, char **argv)
const char *pid_file_name = NULL;
const char *selinux_label = NULL;
BlockExportOptions *export_opts;
+#if HAVE_NBD_DEVICE
+ struct NbdClientOpts opts;
+#endif
#ifdef CONFIG_POSIX
os_setup_early_signal_handling();
@@ -1145,7 +1148,7 @@ int main(int argc, char **argv)
if (device) {
#if HAVE_NBD_DEVICE
int ret;
- struct NbdClientOpts opts = {
+ opts = (struct NbdClientOpts) {
.device = device,
.fork_process = fork_process,
.verbose = verbose,