mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 11:56:43 +07:00
net: cdc_ncm: fix buffer overflow
Commit4d619f625a
("net: cdc_ncm: no point in filling up the NTBs if we send ZLPs") changed the padding logic for devices with the ZLP flag set. This meant that frames of any size will be sent without additional padding, except for the single byte added if the size is a multiple of the USB packet size. But if the unpadded size is identical to the maximum frame size, and the maximum size is a multiplum of the USB packet size, then this one-byte padding will overflow the buffer. Prevent padding if already at maximum frame size, letting usbnet transmit a ZLP instead in this case. Fixes:4d619f625a
("net: cdc_ncm: no point in filling up the NTBs if we send ZLPs") Reported by: Yu-an Shih <yshih@nvidia.com> Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9d4619c492
commit
9becd70784
@ -785,7 +785,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
|
||||
skb_out->len > CDC_NCM_MIN_TX_PKT)
|
||||
memset(skb_put(skb_out, ctx->tx_max - skb_out->len), 0,
|
||||
ctx->tx_max - skb_out->len);
|
||||
else if ((skb_out->len % dev->maxpacket) == 0)
|
||||
else if (skb_out->len < ctx->tx_max && (skb_out->len % dev->maxpacket) == 0)
|
||||
*skb_put(skb_out, 1) = 0; /* force short packet */
|
||||
|
||||
/* set final frame length */
|
||||
|
Loading…
Reference in New Issue
Block a user