Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e438bae4 authored by Ursula Braun's avatar Ursula Braun Committed by David S. Miller
Browse files

net/smc: use after free fix in smc_wr_tx_put_slot()



In smc_wr_tx_put_slot() field pend->idx is used after being
cleared. That means always idx 0 is cleared in the wr_tx_mask.
This results in a broken administration of available WR send
payload buffers.

Signed-off-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b9a22dd9
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -215,12 +215,14 @@ int smc_wr_tx_put_slot(struct smc_link *link,

	pend = container_of(wr_pend_priv, struct smc_wr_tx_pend, priv);
	if (pend->idx < link->wr_tx_cnt) {
		u32 idx = pend->idx;

		/* clear the full struct smc_wr_tx_pend including .priv */
		memset(&link->wr_tx_pends[pend->idx], 0,
		       sizeof(link->wr_tx_pends[pend->idx]));
		memset(&link->wr_tx_bufs[pend->idx], 0,
		       sizeof(link->wr_tx_bufs[pend->idx]));
		test_and_clear_bit(pend->idx, link->wr_tx_mask);
		test_and_clear_bit(idx, link->wr_tx_mask);
		return 1;
	}