qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

use g_path_get_basename instead of basename

basename(3) and dirname(3) modify their argument and may return
pointers to statically allocated memory which may be overwritten by
subsequent calls.
g_path_get_basename and g_path_get_dirname have no such issues, and
therefore more preferable.

Signed-off-by: Julia Suvorova <jusual@mail.ru>
Message-Id: <1519888086-4207-1-git-send-email-jusual@mail.ru>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

authored by

Julia Suvorova and committed by
Paolo Bonzini
3e015d81 4060e671

+15 -12
+9 -6
fsdev/virtfs-proxy-helper.c
··· 55 55 56 56 static bool is_daemon; 57 57 static bool get_version; /* IOC getversion IOCTL supported */ 58 + static char *prog_name; 58 59 59 60 static void GCC_FMT_ATTR(2, 3) do_log(int loglevel, const char *format, ...) 60 61 { ··· 785 786 return -1; 786 787 } 787 788 788 - static void usage(char *prog) 789 + static void usage(void) 789 790 { 790 791 fprintf(stderr, "usage: %s\n" 791 792 " -p|--path <path> 9p path to export\n" ··· 795 796 " access to this socket\n" 796 797 " \tNote: -s & -f can not be used together\n" 797 798 " [-n|--nodaemon] Run as a normal program\n", 798 - basename(prog)); 799 + prog_name); 799 800 } 800 801 801 802 static int process_reply(int sock, int type, ··· 1045 1046 struct statfs st_fs; 1046 1047 #endif 1047 1048 1049 + prog_name = g_path_get_basename(argv[0]); 1050 + 1048 1051 is_daemon = true; 1049 1052 sock = -1; 1050 1053 own_u = own_g = -1; ··· 1077 1080 case '?': 1078 1081 case 'h': 1079 1082 default: 1080 - usage(argv[0]); 1083 + usage(); 1081 1084 exit(EXIT_FAILURE); 1082 1085 } 1083 1086 } ··· 1085 1088 /* Parameter validation */ 1086 1089 if ((sock_name == NULL && sock == -1) || rpath == NULL) { 1087 1090 fprintf(stderr, "socket, socket descriptor or path not specified\n"); 1088 - usage(argv[0]); 1091 + usage(); 1089 1092 return -1; 1090 1093 } 1091 1094 1092 1095 if (sock_name && sock != -1) { 1093 1096 fprintf(stderr, "both named socket and socket descriptor specified\n"); 1094 - usage(argv[0]); 1097 + usage(); 1095 1098 exit(EXIT_FAILURE); 1096 1099 } 1097 1100 ··· 1099 1102 fprintf(stderr, "owner uid:gid not specified, "); 1100 1103 fprintf(stderr, 1101 1104 "owner uid:gid specifies who can access the socket file\n"); 1102 - usage(argv[0]); 1105 + usage(); 1103 1106 exit(EXIT_FAILURE); 1104 1107 } 1105 1108
+1 -1
hw/s390x/s390-ccw.c
··· 48 48 return; 49 49 } 50 50 51 - cdev->mdevid = g_strdup(basename(dev_path)); 51 + cdev->mdevid = g_path_get_basename(dev_path); 52 52 53 53 tmp = basename(dirname(dev_path)); 54 54 if (sscanf(tmp, "%2x.%1x.%4x", &cssid, &ssid, &devid) != 3) {
+1 -1
hw/vfio/pci.c
··· 2807 2807 return; 2808 2808 } 2809 2809 2810 - vdev->vbasedev.name = g_strdup(basename(vdev->vbasedev.sysfsdev)); 2810 + vdev->vbasedev.name = g_path_get_basename(vdev->vbasedev.sysfsdev); 2811 2811 vdev->vbasedev.ops = &vfio_pci_ops; 2812 2812 vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI; 2813 2813 vdev->vbasedev.dev = &vdev->pdev.qdev;
+1 -1
hw/vfio/platform.c
··· 561 561 /* @sysfsdev takes precedence over @host */ 562 562 if (vbasedev->sysfsdev) { 563 563 g_free(vbasedev->name); 564 - vbasedev->name = g_strdup(basename(vbasedev->sysfsdev)); 564 + vbasedev->name = g_path_get_basename(vbasedev->sysfsdev); 565 565 } else { 566 566 if (!vbasedev->name || strchr(vbasedev->name, '/')) { 567 567 error_setg(errp, "wrong host device name");
+1 -1
qemu-io.c
··· 504 504 #endif 505 505 506 506 module_call_init(MODULE_INIT_TRACE); 507 - progname = basename(argv[0]); 507 + progname = g_path_get_basename(argv[0]); 508 508 qemu_init_exec_dir(argv[0]); 509 509 510 510 qcrypto_init(&error_fatal);
+2 -2
qga/commands-posix.c
··· 808 808 len = readlink(dpath, buf, sizeof(buf) - 1); 809 809 if (len != -1) { 810 810 buf[len] = 0; 811 - driver = g_strdup(basename(buf)); 811 + driver = g_path_get_basename(buf); 812 812 } 813 813 g_free(dpath); 814 814 g_free(path); ··· 1053 1053 } 1054 1054 1055 1055 if (!fs->name) { 1056 - fs->name = g_strdup(basename(syspath)); 1056 + fs->name = g_path_get_basename(syspath); 1057 1057 } 1058 1058 1059 1059 g_debug(" parse sysfs path '%s'", syspath);