Skip to content
Snippets Groups Projects
Commit e5b815b0 authored by Denis V. Lunev's avatar Denis V. Lunev Committed by Eric Blake
Browse files

qemu-nbd: regression with arguments passing into nbd_client_thread()


Unfortunately
    commit 03b67621
    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: default avatarDenis 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: default avatarEric Blake <eblake@redhat.com>
Message-ID: <20230727105828.324314-1-den@openvz.org>
Signed-off-by: default avatarEric Blake <eblake@redhat.com>
parent ccdd3126
No related branches found
No related tags found
No related merge requests found
......@@ -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,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment