In case of allocation failure, tried to use the promiscuous QP
entry that was previously freed.
Now freeing this entry only in case we will not put it back to the list
of promiscuous entries.

Reported-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Yevgeny Petrilin 2011-03-30 23:28:52 +00:00 коммит произвёл David S. Miller
Родитель 5e8996e728
Коммит 53020092bd
1 изменённых файлов: 2 добавлений и 1 удалений

Просмотреть файл

@ -469,7 +469,6 @@ static int remove_promisc_qp(struct mlx4_dev *dev, u8 vep_num, u8 port,
/*remove from list of promisc qps */ /*remove from list of promisc qps */
list_del(&pqp->list); list_del(&pqp->list);
kfree(pqp);
/* set the default entry not to include the removed one */ /* set the default entry not to include the removed one */
mailbox = mlx4_alloc_cmd_mailbox(dev); mailbox = mlx4_alloc_cmd_mailbox(dev);
@ -528,6 +527,8 @@ out_mailbox:
out_list: out_list:
if (back_to_list) if (back_to_list)
list_add_tail(&pqp->list, &s_steer->promisc_qps[steer]); list_add_tail(&pqp->list, &s_steer->promisc_qps[steer]);
else
kfree(pqp);
out_mutex: out_mutex:
mutex_unlock(&priv->mcg_table.mutex); mutex_unlock(&priv->mcg_table.mutex);
return err; return err;