mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-01-27 19:30:38 -07:00
usb-mtp: add sanity checks on rootdir
Currently, we don't check if rootdir exists and is accessible. Furthermore, a trailing slash results in a null "desc" string which ends up in the share not visible in the guest. Add some simple sanity checks for appropriate permissions. Also, bail out if the user does not supply an absolute path. Signed-off-by: Bandan Das <bsd@redhat.com> Message-id: jpga7bto3on.fsf@linux.bootlegged.copy Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
7cec2ed9d7
commit
e4c1c64112
1 changed files with 24 additions and 14 deletions
|
|
@ -2038,26 +2038,36 @@ static void usb_mtp_realize(USBDevice *dev, Error **errp)
|
|||
{
|
||||
MTPState *s = USB_MTP(dev);
|
||||
|
||||
usb_desc_create_serial(dev);
|
||||
usb_desc_init(dev);
|
||||
QTAILQ_INIT(&s->objects);
|
||||
if (s->desc == NULL) {
|
||||
if (s->root == NULL) {
|
||||
error_setg(errp, "usb-mtp: rootdir property must be configured");
|
||||
return;
|
||||
}
|
||||
s->desc = strrchr(s->root, '/');
|
||||
if (s->desc && s->desc[0]) {
|
||||
s->desc = g_strdup(s->desc + 1);
|
||||
} else {
|
||||
s->desc = g_strdup("none");
|
||||
}
|
||||
if ((s->root == NULL) || !g_path_is_absolute(s->root)) {
|
||||
error_setg(errp, "usb-mtp: rootdir must be configured and be an absolute path");
|
||||
return;
|
||||
}
|
||||
|
||||
if (access(s->root, R_OK) != 0) {
|
||||
error_setg(errp, "usb-mtp: rootdir does not exist/not readable");
|
||||
return;
|
||||
} else if (!s->readonly && access(s->root, W_OK) != 0) {
|
||||
error_setg(errp, "usb-mtp: rootdir does not have write permissions");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Mark store as RW */
|
||||
if (!s->readonly) {
|
||||
s->flags |= (1 << MTP_FLAG_WRITABLE);
|
||||
}
|
||||
|
||||
if (s->desc == NULL) {
|
||||
/*
|
||||
* This does not check if path exists
|
||||
* but we have the checks above
|
||||
*/
|
||||
s->desc = g_path_get_basename(s->root);
|
||||
}
|
||||
|
||||
usb_desc_create_serial(dev);
|
||||
usb_desc_init(dev);
|
||||
QTAILQ_INIT(&s->objects);
|
||||
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_usb_mtp = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue