qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 0/3] usb-mtp: fix ObjectInfo request handling


From: Daniel P . Berrangé
Subject: [Qemu-devel] [PATCH 0/3] usb-mtp: fix ObjectInfo request handling
Date: Mon, 15 Apr 2019 16:45:00 +0100

Two previous attempts to fix this due to GCC 9 highlighting
unaligned data access. My attempt:

  https://lists.gnu.org/archive/html/qemu-devel/2019-03/msg07763.html

And a previous one:

  https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg07923.html
  https://lists.gnu.org/archive/html/qemu-devel/2019-03/msg00162.html

There are a number of bugs in the USB MTP usb_mtp_write_metadata
method handling the filename character set conversion.

The 2nd patch in this series is a security flaw fix since the
code was not correctly validating guest provided data length.

I've been unable to figure out how to exercise the codepath that
calls usb_mtp_write_metadata. At a guess, it looks like something
that should be called when writing to a file from a guest, but the
GNOME GVFS MTP driver doesn't provide write support. Using the
command line MTP tools "mtp-sendfile" command results in an
protocol error

    # mtp-sendfile foo eek.txt
    libmtp version: 1.1.14

    Device 0 (VID=46f4 and PID=0004) is UNKNOWN in libmtp v1.1.14.
    Please report this VID/PID and the device model to the libmtp development 
team
    PTP_ERROR_IO: failed to open session, trying again after resetting USB 
interface
    LIBMTP libusb: Attempt to reset device
    Sending foo to eek.txt
    type: , 44
    Sending file...

    Error sending file.
    Error 2: PTP Layer error 02ff: send_file_object_info(): Could not send 
object info.
    Error 2: Error 02ff: PTP I/O Error
    ERROR: Could not close session!

And QEMU tracing show unexpected requests

    address@hidden usb_mtp_command dev 4, code 0x9803, trans 0x18, args 0x11, 
0xdc04, 0x0, 0x0, 0x0
    address@hidden usb_mtp_xfer dev 4, ep 2, 20/20
    address@hidden usb_mtp_data_in dev 4, trans 0x18, len 8
    address@hidden usb_mtp_xfer dev 4, ep 1, 20/512
    address@hidden usb_mtp_success dev 4, trans 0x18, args 0x0, 0x0
    address@hidden usb_mtp_xfer dev 4, ep 1, 12/512
    address@hidden usb_mtp_command dev 4, code 0x100c, trans 0x19, args 
0x10001, 0xc, 0x0, 0x0, 0x0
    address@hidden usb_mtp_xfer dev 4, ep 2, 20/20
    address@hidden usb_mtp_stall dev 4, reason: awaiting data-out
    address@hidden usb_mtp_stall dev 4, reason: transaction inflight
    address@hidden usb_mtp_stall dev 4, reason: unknown control request
    address@hidden usb_mtp_stall dev 4, reason: unknown control request

Perhaps a Windows guest can exercise this, but I don't have a modern
Windows install with MTP support.

Thus this series is merely compile tested.

Daniel P. Berrangé (3):
  usb-mtp: fix string length for filename when writing metadata
  usb-mtp: fix bounds check for guest provided filename
  usb-mtp: fix alignment of access of ObjectInfo filename field

 hw/usb/dev-mtp.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

-- 
2.20.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]