Skip to contentSkip to conversation

Minor MTP fixes

PATCH New Bandan 1 participant 3 messages May 3, 2018

lore
Share & tools
lore

Bandan

author
#0 lore raw

cover Minor MTP fixes

Minor MTP fixes. The first patch adds some checks/asserts for issues reported by Coverity and the second fixes a bug where the readonly flag is ignored if "desc" is specified.

Bandan Das (2):
usb-mtp: Add some NULL checks for issues pointed out by coverity
usb-mtp: Unconditionally check for the readonly bit

 hw/usb/dev-mtp.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
Signature · 1 line
2.11.0
author
#1 lore raw

PATCH 1/2 usb-mtp: Add some NULL checks for issues pointed out by coverity

From: Bandan Das <[email protected]>

CID 1390578: In usb_mtp_write_metadata, parent can never be NULL but just in case, add an assert
CID 1390592: Check for o->format only if o !=NULL
CID 1390604: Check s->data_out != NULL in usb_mtp_handle_data

---
 hw/usb/dev-mtp.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
hw/usb/dev-mtp.c +3 -3
index 6ecf70a79b..24cff640c0 100644
@@ -1446,8 +1446,7 @@ static void usb_mtp_command(MTPState *s, MTPControl *c)
             if (o == NULL) {
                 usb_mtp_queue_result(s, RES_INVALID_OBJECT_HANDLE, c->trans,
                                      0, 0, 0, 0);
-            }
-            if (o->format != FMT_ASSOCIATION) {
+            } else if (o->format != FMT_ASSOCIATION) {
                 usb_mtp_queue_result(s, RES_INVALID_PARENT_OBJECT, c->trans,
                                      0, 0, 0, 0);
             }
@@ -1660,6 +1659,7 @@ static void usb_mtp_write_metadata(MTPState *s)
     uint32_t next_handle = s->next_handle;
 
     assert(!s->write_pending);
+    assert(p != NULL);
 
     utf16_to_str(dataset->length, dataset->filename, filename);
 
@@ -1838,7 +1838,7 @@ static void usb_mtp_handle_data(USBDevice *dev, USBPacket *p)
             p->status = USB_RET_STALL;
             return;
         }
-        if (s->data_out && !s->data_out->first) {
+        if ((s->data_out != NULL) && !s->data_out->first) {
             container_type = TYPE_DATA;
         } else {
             usb_packet_copy(p, &container, sizeof(container));
Signature · 1 line
2.11.0
author
#2 lore raw

PATCH 2/2 usb-mtp: Unconditionally check for the readonly bit

In reply to Bandan

From: Bandan Das <[email protected]>

Currently, it's only being checked if desc is NULL and so write support breaks upon specifying desc

---
 hw/usb/dev-mtp.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
hw/usb/dev-mtp.c +5 -4
index 24cff640c0..3d59fe4944 100644
@@ -1948,16 +1948,17 @@ static void usb_mtp_realize(USBDevice *dev, Error **errp)
             return;
         }
         s->desc = strrchr(s->root, '/');
-        /* Mark store as RW */
-        if (!s->readonly) {
-            s->flags |= (1 << MTP_FLAG_WRITABLE);
-        }
         if (s->desc && s->desc[0]) {
             s->desc = g_strdup(s->desc + 1);
         } else {
             s->desc = g_strdup("none");
         }
     }
+    /* Mark store as RW */
+    if (!s->readonly) {
+        s->flags |= (1 << MTP_FLAG_WRITABLE);
+    }
+
 }
 
 static const VMStateDescription vmstate_usb_mtp = {
Signature · 1 line
2.11.0