Skip to content
This repository has been archived by the owner on Apr 13, 2019. It is now read-only.

Commit

Permalink
use g_path_get_basename instead of basename
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jusual authored and bonzini committed Mar 6, 2018
1 parent 4060e67 commit 3e015d8
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 12 deletions.
15 changes: 9 additions & 6 deletions fsdev/virtfs-proxy-helper.c
Expand Up @@ -55,6 +55,7 @@ static struct option helper_opts[] = {

static bool is_daemon;
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, ...)
{
Expand Down Expand Up @@ -785,7 +786,7 @@ static int proxy_socket(const char *path, uid_t uid, gid_t gid)
return -1;
}

static void usage(char *prog)
static void usage(void)
{
fprintf(stderr, "usage: %s\n"
" -p|--path <path> 9p path to export\n"
Expand All @@ -795,7 +796,7 @@ static void usage(char *prog)
" access to this socket\n"
" \tNote: -s & -f can not be used together\n"
" [-n|--nodaemon] Run as a normal program\n",
basename(prog));
prog_name);
}

static int process_reply(int sock, int type,
Expand Down Expand Up @@ -1045,6 +1046,8 @@ int main(int argc, char **argv)
struct statfs st_fs;
#endif

prog_name = g_path_get_basename(argv[0]);

is_daemon = true;
sock = -1;
own_u = own_g = -1;
Expand Down Expand Up @@ -1077,29 +1080,29 @@ int main(int argc, char **argv)
case '?':
case 'h':
default:
usage(argv[0]);
usage();
exit(EXIT_FAILURE);
}
}

/* Parameter validation */
if ((sock_name == NULL && sock == -1) || rpath == NULL) {
fprintf(stderr, "socket, socket descriptor or path not specified\n");
usage(argv[0]);
usage();
return -1;
}

if (sock_name && sock != -1) {
fprintf(stderr, "both named socket and socket descriptor specified\n");
usage(argv[0]);
usage();
exit(EXIT_FAILURE);
}

if (sock_name && (own_u == -1 || own_g == -1)) {
fprintf(stderr, "owner uid:gid not specified, ");
fprintf(stderr,
"owner uid:gid specifies who can access the socket file\n");
usage(argv[0]);
usage();
exit(EXIT_FAILURE);
}

Expand Down
2 changes: 1 addition & 1 deletion hw/s390x/s390-ccw.c
Expand Up @@ -48,7 +48,7 @@ static void s390_ccw_get_dev_info(S390CCWDevice *cdev,
return;
}

cdev->mdevid = g_strdup(basename(dev_path));
cdev->mdevid = g_path_get_basename(dev_path);

tmp = basename(dirname(dev_path));
if (sscanf(tmp, "%2x.%1x.%4x", &cssid, &ssid, &devid) != 3) {
Expand Down
2 changes: 1 addition & 1 deletion hw/vfio/pci.c
Expand Up @@ -2807,7 +2807,7 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
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.type = VFIO_DEVICE_TYPE_PCI;
vdev->vbasedev.dev = &vdev->pdev.qdev;
Expand Down
2 changes: 1 addition & 1 deletion hw/vfio/platform.c
Expand Up @@ -561,7 +561,7 @@ static int vfio_base_device_init(VFIODevice *vbasedev, Error **errp)
/* @sysfsdev takes precedence over @host */
if (vbasedev->sysfsdev) {
g_free(vbasedev->name);
vbasedev->name = g_strdup(basename(vbasedev->sysfsdev));
vbasedev->name = g_path_get_basename(vbasedev->sysfsdev);
} else {
if (!vbasedev->name || strchr(vbasedev->name, '/')) {
error_setg(errp, "wrong host device name");
Expand Down
2 changes: 1 addition & 1 deletion qemu-io.c
Expand Up @@ -504,7 +504,7 @@ int main(int argc, char **argv)
#endif

module_call_init(MODULE_INIT_TRACE);
progname = basename(argv[0]);
progname = g_path_get_basename(argv[0]);
qemu_init_exec_dir(argv[0]);

qcrypto_init(&error_fatal);
Expand Down
4 changes: 2 additions & 2 deletions qga/commands-posix.c
Expand Up @@ -808,7 +808,7 @@ static char *get_pci_driver(char const *syspath, int pathlen, Error **errp)
len = readlink(dpath, buf, sizeof(buf) - 1);
if (len != -1) {
buf[len] = 0;
driver = g_strdup(basename(buf));
driver = g_path_get_basename(buf);
}
g_free(dpath);
g_free(path);
Expand Down Expand Up @@ -1053,7 +1053,7 @@ static void build_guest_fsinfo_for_device(char const *devpath,
}

if (!fs->name) {
fs->name = g_strdup(basename(syspath));
fs->name = g_path_get_basename(syspath);
}

g_debug(" parse sysfs path '%s'", syspath);
Expand Down

0 comments on commit 3e015d8

Please sign in to comment.