qemu-nbd: regression with arguments passing into nbd_client_thread()
Unfortunately
    commit 03b6762144
    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>
			
			
This commit is contained in:
		
				
					committed by
					
						 Eric Blake
						Eric Blake
					
				
			
			
				
	
			
			
			
						parent
						
							ccdd312676
						
					
				
				
					commit
					e5b815b0de
				
			| @@ -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, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user