Skip to content

Commit

Permalink
orinoco: Move context allocation after processing the skb
Browse files Browse the repository at this point in the history
[ Upstream commit a31eb61 ]

ezusb_xmit() allocates a context which is leaked if
orinoco_process_xmit_skb() returns an error.

Move ezusb_alloc_ctx() after the invocation of
orinoco_process_xmit_skb() because the context is not needed so early.
ezusb_access_ltv() will cleanup the context in case of an error.

Fixes: bac6faf ("orinoco: refactor xmit path")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20201113212252.2243570-2-bigeasy@linutronix.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Sebastian Andrzej Siewior authored and gregkh committed Dec 30, 2020
1 parent e399085 commit d2b9594
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions drivers/net/wireless/intersil/orinoco/orinoco_usb.c
Expand Up @@ -1234,20 +1234,20 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev)
if (skb->len < ETH_HLEN)
goto drop;

ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_TX, 0);
if (!ctx)
goto busy;

memset(ctx->buf, 0, BULK_BUF_SIZE);
buf = ctx->buf->data;

tx_control = 0;

err = orinoco_process_xmit_skb(skb, dev, priv, &tx_control,
&mic[0]);
if (err)
goto drop;

ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_TX, 0);
if (!ctx)
goto drop;

memset(ctx->buf, 0, BULK_BUF_SIZE);
buf = ctx->buf->data;

{
__le16 *tx_cntl = (__le16 *)buf;
*tx_cntl = cpu_to_le16(tx_control);
Expand Down

0 comments on commit d2b9594

Please sign in to comment.