lkml.org 
[lkml]   [2008]   [Dec]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 003/104] USB: usbmon: fix read(2)
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Pete Zaitcev <zaitcev@redhat.com>

    commit f1c0a2a3aff53698f4855968d576464041d49b39 upstream.

    There's a bug in the usbmon binary reader: When using read() to fetch
    the packets and a packet's data is partially read, the next read call
    will once again return up to len_cap bytes of data. The b_read counter
    is not regarded when determining the remaining chunk size.

    So, when dumping USB data with "cat /dev/usbmon0 > usbmon.trace" while
    reading from a USB storage device and analyzing the dump file
    afterwards it will get out of sync after a couple of packets.

    Signed-off-by: Ingo van Lil <inguin@gmx.de>
    Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/usb/mon/mon_bin.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    --- a/drivers/usb/mon/mon_bin.c
    +++ b/drivers/usb/mon/mon_bin.c
    @@ -687,7 +687,10 @@ static ssize_t mon_bin_read(struct file
    }

    if (rp->b_read >= sizeof(struct mon_bin_hdr)) {
    - step_len = min(nbytes, (size_t)ep->len_cap);
    + step_len = ep->len_cap;
    + step_len -= rp->b_read - sizeof(struct mon_bin_hdr);
    + if (step_len > nbytes)
    + step_len = nbytes;
    offset = rp->b_out + PKT_SIZE;
    offset += rp->b_read - sizeof(struct mon_bin_hdr);
    if (offset >= rp->b_size)


    \
     
     \ /
      Last update: 2008-12-03 20:53    [W:0.026 / U:29.628 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site