]>
Commit | Line | Data |
---|---|---|
9ac87053 GKH |
1 | From foo@baz Thu Sep 14 23:20:23 PDT 2017 |
2 | From: Eran Ben Elisha <eranbe@mellanox.com> | |
3 | Date: Wed, 16 Aug 2017 14:37:11 +0300 | |
4 | Subject: net/mlx5e: Fix dangling page pointer on DMA mapping error | |
5 | ||
6 | From: Eran Ben Elisha <eranbe@mellanox.com> | |
7 | ||
8 | ||
9 | [ Upstream commit 0556ce72ab16156af6c94cdc7964e4310acc97c0 ] | |
10 | ||
11 | Function mlx5e_dealloc_rx_wqe is using page pointer value as an | |
12 | indication to valid DMA mapping. In case that the mapping failed, we | |
13 | released the page but kept the dangling pointer. Store the page pointer | |
14 | only after the DMA mapping passed to avoid invalid page DMA unmap. | |
15 | ||
16 | Fixes: bc77b240b3c5 ("net/mlx5e: Add fragmented memory support for RX multi packet WQE") | |
17 | Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com> | |
18 | Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> | |
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
20 | --- | |
21 | drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 2 +- | |
22 | 1 file changed, 1 insertion(+), 1 deletion(-) | |
23 | ||
24 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | |
25 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | |
26 | @@ -216,13 +216,13 @@ static inline int mlx5e_page_alloc_mappe | |
27 | if (unlikely(!page)) | |
28 | return -ENOMEM; | |
29 | ||
30 | - dma_info->page = page; | |
31 | dma_info->addr = dma_map_page(rq->pdev, page, 0, | |
32 | RQ_PAGE_SIZE(rq), rq->buff.map_dir); | |
33 | if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) { | |
34 | put_page(page); | |
35 | return -ENOMEM; | |
36 | } | |
37 | + dma_info->page = page; | |
38 | ||
39 | return 0; | |
40 | } |