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>
This commit is contained in:
parent
4060e671c3
commit
3e015d815b
@ -55,6 +55,7 @@ static struct option helper_opts[] = {
|
|||||||
|
|
||||||
static bool is_daemon;
|
static bool is_daemon;
|
||||||
static bool get_version; /* IOC getversion IOCTL supported */
|
static bool get_version; /* IOC getversion IOCTL supported */
|
||||||
|
static char *prog_name;
|
||||||
|
|
||||||
static void GCC_FMT_ATTR(2, 3) do_log(int loglevel, const char *format, ...)
|
static void GCC_FMT_ATTR(2, 3) do_log(int loglevel, const char *format, ...)
|
||||||
{
|
{
|
||||||
@ -785,7 +786,7 @@ error:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(char *prog)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: %s\n"
|
fprintf(stderr, "usage: %s\n"
|
||||||
" -p|--path <path> 9p path to export\n"
|
" -p|--path <path> 9p path to export\n"
|
||||||
@ -795,7 +796,7 @@ static void usage(char *prog)
|
|||||||
" access to this socket\n"
|
" access to this socket\n"
|
||||||
" \tNote: -s & -f can not be used together\n"
|
" \tNote: -s & -f can not be used together\n"
|
||||||
" [-n|--nodaemon] Run as a normal program\n",
|
" [-n|--nodaemon] Run as a normal program\n",
|
||||||
basename(prog));
|
prog_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int process_reply(int sock, int type,
|
static int process_reply(int sock, int type,
|
||||||
@ -1045,6 +1046,8 @@ int main(int argc, char **argv)
|
|||||||
struct statfs st_fs;
|
struct statfs st_fs;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
prog_name = g_path_get_basename(argv[0]);
|
||||||
|
|
||||||
is_daemon = true;
|
is_daemon = true;
|
||||||
sock = -1;
|
sock = -1;
|
||||||
own_u = own_g = -1;
|
own_u = own_g = -1;
|
||||||
@ -1077,7 +1080,7 @@ int main(int argc, char **argv)
|
|||||||
case '?':
|
case '?':
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
default:
|
||||||
usage(argv[0]);
|
usage();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1085,13 +1088,13 @@ int main(int argc, char **argv)
|
|||||||
/* Parameter validation */
|
/* Parameter validation */
|
||||||
if ((sock_name == NULL && sock == -1) || rpath == NULL) {
|
if ((sock_name == NULL && sock == -1) || rpath == NULL) {
|
||||||
fprintf(stderr, "socket, socket descriptor or path not specified\n");
|
fprintf(stderr, "socket, socket descriptor or path not specified\n");
|
||||||
usage(argv[0]);
|
usage();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sock_name && sock != -1) {
|
if (sock_name && sock != -1) {
|
||||||
fprintf(stderr, "both named socket and socket descriptor specified\n");
|
fprintf(stderr, "both named socket and socket descriptor specified\n");
|
||||||
usage(argv[0]);
|
usage();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1099,7 +1102,7 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, "owner uid:gid not specified, ");
|
fprintf(stderr, "owner uid:gid not specified, ");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"owner uid:gid specifies who can access the socket file\n");
|
"owner uid:gid specifies who can access the socket file\n");
|
||||||
usage(argv[0]);
|
usage();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ static void s390_ccw_get_dev_info(S390CCWDevice *cdev,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cdev->mdevid = g_strdup(basename(dev_path));
|
cdev->mdevid = g_path_get_basename(dev_path);
|
||||||
|
|
||||||
tmp = basename(dirname(dev_path));
|
tmp = basename(dirname(dev_path));
|
||||||
if (sscanf(tmp, "%2x.%1x.%4x", &cssid, &ssid, &devid) != 3) {
|
if (sscanf(tmp, "%2x.%1x.%4x", &cssid, &ssid, &devid) != 3) {
|
||||||
|
@ -2807,7 +2807,7 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev->vbasedev.name = g_strdup(basename(vdev->vbasedev.sysfsdev));
|
vdev->vbasedev.name = g_path_get_basename(vdev->vbasedev.sysfsdev);
|
||||||
vdev->vbasedev.ops = &vfio_pci_ops;
|
vdev->vbasedev.ops = &vfio_pci_ops;
|
||||||
vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI;
|
vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI;
|
||||||
vdev->vbasedev.dev = &vdev->pdev.qdev;
|
vdev->vbasedev.dev = &vdev->pdev.qdev;
|
||||||
|
@ -561,7 +561,7 @@ static int vfio_base_device_init(VFIODevice *vbasedev, Error **errp)
|
|||||||
/* @sysfsdev takes precedence over @host */
|
/* @sysfsdev takes precedence over @host */
|
||||||
if (vbasedev->sysfsdev) {
|
if (vbasedev->sysfsdev) {
|
||||||
g_free(vbasedev->name);
|
g_free(vbasedev->name);
|
||||||
vbasedev->name = g_strdup(basename(vbasedev->sysfsdev));
|
vbasedev->name = g_path_get_basename(vbasedev->sysfsdev);
|
||||||
} else {
|
} else {
|
||||||
if (!vbasedev->name || strchr(vbasedev->name, '/')) {
|
if (!vbasedev->name || strchr(vbasedev->name, '/')) {
|
||||||
error_setg(errp, "wrong host device name");
|
error_setg(errp, "wrong host device name");
|
||||||
|
@ -504,7 +504,7 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
module_call_init(MODULE_INIT_TRACE);
|
module_call_init(MODULE_INIT_TRACE);
|
||||||
progname = basename(argv[0]);
|
progname = g_path_get_basename(argv[0]);
|
||||||
qemu_init_exec_dir(argv[0]);
|
qemu_init_exec_dir(argv[0]);
|
||||||
|
|
||||||
qcrypto_init(&error_fatal);
|
qcrypto_init(&error_fatal);
|
||||||
|
@ -808,7 +808,7 @@ static char *get_pci_driver(char const *syspath, int pathlen, Error **errp)
|
|||||||
len = readlink(dpath, buf, sizeof(buf) - 1);
|
len = readlink(dpath, buf, sizeof(buf) - 1);
|
||||||
if (len != -1) {
|
if (len != -1) {
|
||||||
buf[len] = 0;
|
buf[len] = 0;
|
||||||
driver = g_strdup(basename(buf));
|
driver = g_path_get_basename(buf);
|
||||||
}
|
}
|
||||||
g_free(dpath);
|
g_free(dpath);
|
||||||
g_free(path);
|
g_free(path);
|
||||||
@ -1053,7 +1053,7 @@ static void build_guest_fsinfo_for_device(char const *devpath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!fs->name) {
|
if (!fs->name) {
|
||||||
fs->name = g_strdup(basename(syspath));
|
fs->name = g_path_get_basename(syspath);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_debug(" parse sysfs path '%s'", syspath);
|
g_debug(" parse sysfs path '%s'", syspath);
|
||||||
|
Loading…
Reference in New Issue
Block a user