Skip to content
Snippets Groups Projects
  • Jann Horn's avatar
    7197e73a
    usb: cdc-acm: Check control transfer buffer size before access · 7197e73a
    Jann Horn authored and Frieder Schrempf's avatar Frieder Schrempf committed
    
    commit e563b01208f4d1f609bcab13333b6c0e24ce6a01 upstream.
    
    If the first fragment is shorter than struct usb_cdc_notification, we can't
    calculate an expected_size. Log an error and discard the notification
    instead of reading lengths from memory outside the received data, which can
    lead to memory corruption when the expected_size decreases between
    fragments, causing `expected_size - acm->nb_index` to wrap.
    
    This issue has been present since the beginning of git history; however,
    it only leads to memory corruption since commit ea258352
    ("cdc-acm: reassemble fragmented notifications").
    
    A mitigating factor is that acm_ctrl_irq() can only execute after userspace
    has opened /dev/ttyACM*; but if ModemManager is running, ModemManager will
    do that automatically depending on the USB device's vendor/product IDs and
    its other interfaces.
    
    Cc: stable <stable@kernel.org>
    Fixes: 1da177e4 ("Linux-2.6.12-rc2")
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7197e73a
    History
    usb: cdc-acm: Check control transfer buffer size before access
    Jann Horn authored and Frieder Schrempf's avatar Frieder Schrempf committed
    
    commit e563b01208f4d1f609bcab13333b6c0e24ce6a01 upstream.
    
    If the first fragment is shorter than struct usb_cdc_notification, we can't
    calculate an expected_size. Log an error and discard the notification
    instead of reading lengths from memory outside the received data, which can
    lead to memory corruption when the expected_size decreases between
    fragments, causing `expected_size - acm->nb_index` to wrap.
    
    This issue has been present since the beginning of git history; however,
    it only leads to memory corruption since commit ea258352
    ("cdc-acm: reassemble fragmented notifications").
    
    A mitigating factor is that acm_ctrl_irq() can only execute after userspace
    has opened /dev/ttyACM*; but if ModemManager is running, ModemManager will
    do that automatically depending on the USB device's vendor/product IDs and
    its other interfaces.
    
    Cc: stable <stable@kernel.org>
    Fixes: 1da177e4 ("Linux-2.6.12-rc2")
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>