USB speedtouch: discard packets for non-existant vcc's
PATCH 1/1 USB speedtouch: discard packets for non-existant vcc's
I broke part of the udsl_decode_rawcell logic in a previous patch, leading to possible hangs on startup/shutdown. I've attached the 2.4 and 2.5 versions. Thanks to Subodh Srivastava and Ted Phelps for their bug reports. Here is the 2.5 patch included inline for reference:
drivers/usb/misc/speedtch.c +5 -4
@@ -278,9 +278,10 @@/* here should the header CRC check be... */ -if (!(vcc =udsl_find_vcc (instance, vpi, vci))) +if (!(vcc =udsl_find_vcc (instance, vpi, vci))) {dbg ("udsl_decode_rawcell: no vcc found for packet on vpi %d, vci %d" , vpi, vci); -else { +__skb_pull (skb,min (skb->len, (unsigned )53 )); + }else {dbg ("udsl_decode_rawcell found vcc %p for packet on vpi %d, vci %d" , vcc, vpi, vci);if (skb->len >=53 ) {
@@ -323,8 +324,8 @@skb_pull (skb,53 ); }else {/* If data is corrupt and skb doesn't hold a whole cell, flush the lot */ -if (skb_pull (skb,53 ) ==NULL ) -return NULL ; +__skb_pull (skb, skb->len); +return NULL ; } } }
drivers/usb/speedtouch.c +5 -4
@@ -278,9 +278,10 @@/* here should the header CRC check be... */ -if (!(vcc =udsl_find_vcc (instance, vpi, vci))) +if (!(vcc =udsl_find_vcc (instance, vpi, vci))) {dbg ("udsl_decode_rawcell: no vcc found for packet on vpi %d, vci %d" , vpi, vci); -else { +__skb_pull (skb,min (skb->len, (unsigned )53 )); + }else {dbg ("udsl_decode_rawcell found vcc %p for packet on vpi %d, vci %d" , vcc, vpi, vci);if (skb->len >=53 ) {
@@ -323,8 +324,8 @@skb_pull (skb,53 ); }else {/* If data is corrupt and skb doesn't hold a whole cell, flush the lot */ -if (skb_pull (skb,53 ) ==NULL ) -return NULL ; +__skb_pull (skb, skb->len); +return NULL ; } } }
drivers/usb/misc/speedtch.c +5 -4
@@ -278,9 +278,10 @@/* here should the header CRC check be... */ -if (!(vcc =udsl_find_vcc (instance, vpi, vci))) +if (!(vcc =udsl_find_vcc (instance, vpi, vci))) {dbg ("udsl_decode_rawcell: no vcc found for packet on vpi %d, vci %d" , vpi, vci); -else { +__skb_pull (skb,min (skb->len, (unsigned )53 )); + }else {dbg ("udsl_decode_rawcell found vcc %p for packet on vpi %d, vci %d" , vcc, vpi, vci);if (skb->len >=53 ) {
@@ -323,8 +324,8 @@skb_pull (skb,53 ); }else {/* If data is corrupt and skb doesn't hold a whole cell, flush the lot */ -if (skb_pull (skb,53 ) ==NULL ) -return NULL ; +__skb_pull (skb, skb->len); +return NULL ; } } }
Greg KH
AppliedQuoted 4 lines · Duncan Sands
I broke part of the
udsl_decode_rawcelllogic in a previous patch, leading to possible hangs on startup/shutdown. I've attached the 2.4 and 2.5 versions. Thanks to Subodh Srivastava and Ted Phelps for their bug reports. Here is the 2.5 patch included inline for reference:
Applied to my 2.4 and 2.5 trees, thanks.
greg k-h