qemu-nbd: regression with arguments passing into nbd_client_thread()
Unfortunately commit03b6762144
(7.2:6e216d21b5
) 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> (cherry picked from commite5b815b0de
) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> (Mjt: add reference to6e216d21b5
for 7.2 branch)
This commit is contained in:
parent
742612345a
commit
3b80317c91
@ -584,6 +584,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();
|
||||
@ -1122,7 +1125,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,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user