mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
net: cdc_ncm: always reallocate tx_curr_skb when tx_max increases
We are calling usbnet_start_xmit() to flush any remaining data,
depending on the side effect that tx_curr_skb is set to NULL,
ensuring a new allocation using the updated tx_max. But this
side effect will only happen if there were any cached data ready
to transmit. If not, then an empty tx_curr_skb is still allocated
using the old tx_max size. Free it to avoid a buffer overrun.
Fixes: 68864abf08
("net: cdc_ncm: support rx_max/tx_max updates when running")
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1e2c611723
commit
1ba5d0ff36
@ -268,6 +268,11 @@ static void cdc_ncm_update_rxtx_max(struct usbnet *dev, u32 new_rx, u32 new_tx)
|
||||
if (netif_running(dev->net) && val > ctx->tx_max) {
|
||||
netif_tx_lock_bh(dev->net);
|
||||
usbnet_start_xmit(NULL, dev->net);
|
||||
/* make sure tx_curr_skb is reallocated if it was empty */
|
||||
if (ctx->tx_curr_skb) {
|
||||
dev_kfree_skb_any(ctx->tx_curr_skb);
|
||||
ctx->tx_curr_skb = NULL;
|
||||
}
|
||||
ctx->tx_max = val;
|
||||
netif_tx_unlock_bh(dev->net);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user