Message ID | f8ae302060dc9cd7640199f3dca0a275f3351968.1531005542.git.rodrigosiqueiramelo@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, Jul 07, 2018 at 08:23:30PM -0300, Rodrigo Siqueira wrote: > This patch fix the following GCC warning: > > intel_gvtg_test.c: In function ‘create_guest’: > intel_gvtg_test.c:127:50: warning: ‘%s’ directive writing up to 4095 > bytes into a region of size 4077 [-Wformat-overflow=] > [..] > intel_gvtg_test.c:127:5: note: ‘sprintf’ output between 36 and 8226 > bytes into a destination of size 4096 > [..] > > This patch changes the approach for allocating memory to handle QEMU > commands by dynamically allocate space to save the whole command. > > Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> > --- > tools/intel_gvtg_test.c | 27 ++++++++++++++++++--------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/tools/intel_gvtg_test.c b/tools/intel_gvtg_test.c > index 659b7956..93c05e37 100644 > --- a/tools/intel_gvtg_test.c > +++ b/tools/intel_gvtg_test.c > @@ -120,16 +120,25 @@ static int check_tools(void) > > static void create_guest(void) > { > - char create_qcow_cmd[PATH_MAX] = {0}; > - char create_vgpu_cmd[PATH_MAX] = {0}; > - char create_instance_cmd[PATH_MAX] = {0}; > + unsigned int max_size_cmd = sysconf(_SC_ARG_MAX); That's 2097152 on my system. Quite an overkill. I know that we have lazy page table assigement, but memseting the whole 2GB defeats it. The qemu invocation looks like the longest one, and we have 3 components that may take up to PATH_MAX each and some extra stuff, so going with 4*PATH_MAX should be enough. BTW, why do you memset it to 0 before each sprintf?
diff --git a/tools/intel_gvtg_test.c b/tools/intel_gvtg_test.c index 659b7956..93c05e37 100644 --- a/tools/intel_gvtg_test.c +++ b/tools/intel_gvtg_test.c @@ -120,16 +120,25 @@ static int check_tools(void) static void create_guest(void) { - char create_qcow_cmd[PATH_MAX] = {0}; - char create_vgpu_cmd[PATH_MAX] = {0}; - char create_instance_cmd[PATH_MAX] = {0}; + unsigned int max_size_cmd = sysconf(_SC_ARG_MAX); + char *command; - sprintf(create_qcow_cmd, "qemu-img create -b %s -f qcow2 %s.qcow2", + command = malloc(max_size_cmd); + if (!command) + return; + + sprintf(command, "qemu-img create -b %s -f qcow2 %s.qcow2", hda_path, hda_path); - sprintf(create_vgpu_cmd, "echo \"%s\" > /sys/bus/pci/devices/0000:00:02.0/" + igt_assert_eq(system(command), 0); + memset(command, 0, max_size_cmd); + + sprintf(command, "echo \"%s\" > /sys/bus/pci/devices/0000:00:02.0/" "mdev_supported_types/$(ls /sys/bus/pci/devices/0000:00:02.0/" "mdev_supported_types |awk {'print $1'}|tail -1)/create", uuid); - sprintf(create_instance_cmd, "%s -m 2048 -smp 2 -M pc -name gvtg_guest" + igt_assert_eq(system(command), 0); + memset(command, 0, max_size_cmd); + + sprintf(command, "%s -m 2048 -smp 2 -M pc -name gvtg_guest" " -hda %s.qcow2 -bios %s -enable-kvm --net nic,macaddr=%s -net" " tap,script=/etc/qemu-ifup -vga cirrus -k en-us" " -serial stdio -vnc :1 -machine kernel_irqchip=on -global" @@ -137,9 +146,9 @@ static void create_guest(void) " -usb -usbdevice tablet -device vfio-pci,sysfsdev=" "/sys/bus/pci/devices/0000:00:02.0/%s &", qemu_path, hda_path, bios_path, mac_addr, uuid); - igt_assert_eq(system(create_qcow_cmd), 0); - igt_assert_eq(system(create_vgpu_cmd), 0); - igt_assert_eq(system(create_instance_cmd), 0); + igt_assert_eq(system(command), 0); + + free(command); } static void destroy_all_guest(void)
This patch fix the following GCC warning: intel_gvtg_test.c: In function ‘create_guest’: intel_gvtg_test.c:127:50: warning: ‘%s’ directive writing up to 4095 bytes into a region of size 4077 [-Wformat-overflow=] [..] intel_gvtg_test.c:127:5: note: ‘sprintf’ output between 36 and 8226 bytes into a destination of size 4096 [..] This patch changes the approach for allocating memory to handle QEMU commands by dynamically allocate space to save the whole command. Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> --- tools/intel_gvtg_test.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-)