Commit 3e015d81 authored by Julia Suvorova's avatar Julia Suvorova Committed by Paolo Bonzini
Browse files

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: default avatarJulia Suvorova <jusual@mail.ru>
Message-Id: <1519888086-4207-1-git-send-email-jusual@mail.ru>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4060e671
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -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, ...)
{
@@ -785,7 +786,7 @@ error:
    return -1;
}

static void usage(char *prog)
static void usage(void)
{
    fprintf(stderr, "usage: %s\n"
            " -p|--path <path> 9p path to export\n"
@@ -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,
@@ -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;
@@ -1077,7 +1080,7 @@ int main(int argc, char **argv)
        case '?':
        case 'h':
        default:
            usage(argv[0]);
            usage();
            exit(EXIT_FAILURE);
        }
    }
@@ -1085,13 +1088,13 @@ int main(int argc, char **argv)
    /* 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);
    }

@@ -1099,7 +1102,7 @@ int main(int argc, char **argv)
        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);
    }

+1 −1
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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");
+1 −1
Original line number Diff line number Diff line
@@ -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);
Loading