aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorSebastien Dugue <sebastien.dugue@bull.net>2010-05-20 18:58:22 -0400
committerRoland Dreier <rolandd@cisco.com>2010-05-20 18:58:22 -0400
commitc0dc72bad9cf21071f5e4005de46f7c8b67a138a (patch)
treee2e7e86f111b9b4f9dbba30f5847187f19ac60d5 /drivers/net
parenta0fe3cc5d36a5f5b4f60abfe1a4b1caf4a5cce5a (diff)
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>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/mlx4/icm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/mlx4/icm.c b/drivers/net/mlx4/icm.c
index 57288ca1395f..ef62f1749b8a 100644
--- a/drivers/net/mlx4/icm.c
+++ b/drivers/net/mlx4/icm.c
@@ -175,9 +175,10 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
175 175
176 if (chunk->nsg <= 0) 176 if (chunk->nsg <= 0)
177 goto fail; 177 goto fail;
178 }
178 179
180 if (chunk->npages == MLX4_ICM_CHUNK_LEN)
179 chunk = NULL; 181 chunk = NULL;
180 }
181 182
182 npages -= 1 << cur_order; 183 npages -= 1 << cur_order;
183 } else { 184 } else {