On 16/03/2023 05:24, Jakub Kicinski wrote: > On Mon, 13 Mar 2023 23:01:24 +0100 Szymon Heidrich wrote: >> Packet length retrieved from skb data may be larger than > > nit: s/skb data/descriptor/ may be better in terms of terminology > >> the actual socket buffer length (up to 1526 bytes). In such > > nit: the "up to 1526 bytes" is a bit confusing, I'd remove it. > >> case the cloned skb passed up the network stack will leak >> kernel memory contents. > > > >> Fixes: 2f7ca802bdae ("net: Add SMSC LAN9500 USB2.0 10/100 ethernet adapter driver") >> Signed-off-by: Szymon Heidrich <szymon.heidrich@xxxxxxxxx> >> --- >> drivers/net/usb/smsc95xx.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c >> index 32d2c60d3..ba766bdb2 100644 >> --- a/drivers/net/usb/smsc95xx.c >> +++ b/drivers/net/usb/smsc95xx.c >> @@ -1851,7 +1851,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) >> } >> } else { >> /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */ >> - if (unlikely(size > (ETH_FRAME_LEN + 12))) { >> + if (unlikely(size > (ETH_FRAME_LEN + 12) || >> + size > skb->len)) { > > We need this check on both sides of the big if {} statement. > > In case the error bit is set and we drop the packet we still > end up in skb_pull() which if size > skb->len will panic the > kernel. > > So let's do this check right after size and align are calculated? > The patch for smsc75xx has sadly already been applied so you'll > need to prepare a fix to the fix :( > >> netif_dbg(dev, rx_err, dev->net, >> "size err header=0x%08x\n", header); >> return 0; > Thank you very much for you suggestions Kuba, I provided an updated patch for smsc95xx and a new patch addressing smsc75xx. Please let me know in case additional amendments are required.