瀏覽代碼

mlx4_core: Fix possible chunk sg list overflow in mlx4_alloc_icm()

If the number of sg entries in the ICM chunk reaches MLX4_ICM_CHUNK_LEN,
we must set chunk to NULL even for coherent mappings so that the next
time through the loop will allocate another chunk.  Otherwise we'll
overflow the sg list the next time through the loop.  This will lead to
memory corruption if this case is hit.

mthca does not have this bug.

Signed-off-by: Sebastien Dugue <sebastien.dugue@bull.net>
Cc: <stable@kernel.org>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Sebastien Dugue 15 年之前
父節點
當前提交
c0dc72bad9
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      drivers/net/mlx4/icm.c

+ 2 - 1
drivers/net/mlx4/icm.c

@@ -175,9 +175,10 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
 
 
 				if (chunk->nsg <= 0)
 				if (chunk->nsg <= 0)
 					goto fail;
 					goto fail;
+			}
 
 
+			if (chunk->npages == MLX4_ICM_CHUNK_LEN)
 				chunk = NULL;
 				chunk = NULL;
-			}
 
 
 			npages -= 1 << cur_order;
 			npages -= 1 << cur_order;
 		} else {
 		} else {