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

Commit e68a11a4 authored by Maor Gottlieb's avatar Maor Gottlieb Committed by Greg Kroah-Hartman
Browse files

net/mlx5: Fix potential sleeping in atomic context



commit ee27e330a953595903979ffdb84926843595a9fe upstream.

Fixes the below flow of sleeping in atomic context by releasing
the RCU lock before calling to free_match_list.

build_match_list() <- disables preempt
-> free_match_list()
   -> tree_put_node()
      -> down_write_ref_node() <- take write lock

Fixes: 693c6883 ("net/mlx5: Add hash table for flow groups in flow table")
Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarMaor Gottlieb <maorg@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 44428199
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -1558,9 +1558,9 @@ static int build_match_list(struct match_list_head *match_head,

		curr_match = kmalloc(sizeof(*curr_match), GFP_ATOMIC);
		if (!curr_match) {
			rcu_read_unlock();
			free_match_list(match_head);
			err = -ENOMEM;
			goto out;
			return -ENOMEM;
		}
		if (!tree_get_node(&g->node)) {
			kfree(curr_match);
@@ -1569,7 +1569,6 @@ static int build_match_list(struct match_list_head *match_head,
		curr_match->g = g;
		list_add_tail(&curr_match->list, &match_head->list);
	}
out:
	rcu_read_unlock();
	return err;
}