team: check return value of team_get_port_by_index_rcu() for NULL
team_get_port_by_index_rcu() might return NULL due to race between port removal and skb tx path. Panic is easily triggeable when txing packets and adding/removing port in a loop. introduced by commit3d249d4ca
"net: introduce ethernet teaming device" and commit753f993911
"team: introduce random mode" (for random mode) Signed-off-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
19a6afb23e
commit
76c455decb
2 changed files with 4 additions and 0 deletions
|
@ -28,6 +28,8 @@ static bool rnd_transmit(struct team *team, struct sk_buff *skb)
|
|||
|
||||
port_index = random_N(team->en_port_count);
|
||||
port = team_get_port_by_index_rcu(team, port_index);
|
||||
if (unlikely(!port))
|
||||
goto drop;
|
||||
port = team_get_first_port_txable_rcu(team, port);
|
||||
if (unlikely(!port))
|
||||
goto drop;
|
||||
|
|
|
@ -32,6 +32,8 @@ static bool rr_transmit(struct team *team, struct sk_buff *skb)
|
|||
|
||||
port_index = rr_priv(team)->sent_packets++ % team->en_port_count;
|
||||
port = team_get_port_by_index_rcu(team, port_index);
|
||||
if (unlikely(!port))
|
||||
goto drop;
|
||||
port = team_get_first_port_txable_rcu(team, port);
|
||||
if (unlikely(!port))
|
||||
goto drop;
|
||||
|
|
Loading…
Reference in a new issue