vrf: Fix use after free and double free in vrf_finish_output
Subsystems (3)
PATCH 1/1 vrf: Fix use after free and double free in vrf_finish_output
Miguel reported an skb use after free / double free in vrf_finish_output when neigh_output returns an error. The vrf driver should return after the call to neigh_output as it takes over the skb on error path as well.
Patch is a simplified version of Miguel's patch which was written for 4.9, and updated to top of tree.
--- drivers/net/vrf.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/net/vrf.c +3 -2
@@ -578,12 +578,13 @@ static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *sif (!IS_ERR (neigh)) {sock_confirm_neigh (skb, neigh); ret =neigh_output (neigh, skb); +rcu_read_unlock_bh (); +return ret; }rcu_read_unlock_bh (); err: -if (unlikely (ret <0 )) -vrf_tx_error (skb->dev, skb); +vrf_tx_error (skb->dev, skb);return ret; }
Signature · 1 line
2.11.0
David Miller
maintainerFrom: David Ahern <[email protected]>
Date: Thu, 29 Mar 2018 12:49:52 -0700
Quoted 10 lines
Miguel reported an skb use after free / double free in
vrf_finish_outputwhenneigh_outputreturns an error. The vrf driver should return after the call toneigh_outputas it takes over the skb on error path as well.Patch is a simplified version of Miguel's patch which was written for 4.9, and updated to top of tree.
Fixes 8f58336d3f78a ("net: Add ethernet header for pass through VRF device")Signed-off-by Miguel Fadon Perlines <[email protected]>Signed-off-by David Ahern <[email protected]>
Applied and queued up for -stable, thanks David.