aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2009-03-05 15:45:55 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-03-13 16:25:53 -0400
commitf474a37bc48667595b5653a983b635c95ed82a3b (patch)
treee8c61e0d9c09eb96eda58a2c68ede724e94d5879 /drivers/scsi
parent07c00ec449d4d94042063a6900d7d04fdc9f8e62 (diff)
[SCSI] libiscsi: fix iscsi pool error path
Memory freeing in iscsi_pool_free() looks wrong to me. Either q->pool can be NULL and this should be tested before dereferencing it, or it can't be NULL and it shouldn't be tested at all. As far as I can see, the only case where q->pool is NULL is on early error in iscsi_pool_init(). One possible way to fix the bug is thus to not call iscsi_pool_free() in this case (nothing needs to be freed anyway) and then we can get rid of the q->pool check. Signed-off-by: Jean Delvare <jdelvare@suse.de> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/libiscsi.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 809d32d95c76..c33e28fd49bc 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1944,7 +1944,7 @@ iscsi_pool_init(struct iscsi_pool *q, int max, void ***items, int item_size)
1944 num_arrays++; 1944 num_arrays++;
1945 q->pool = kzalloc(num_arrays * max * sizeof(void*), GFP_KERNEL); 1945 q->pool = kzalloc(num_arrays * max * sizeof(void*), GFP_KERNEL);
1946 if (q->pool == NULL) 1946 if (q->pool == NULL)
1947 goto enomem; 1947 return -ENOMEM;
1948 1948
1949 q->queue = kfifo_init((void*)q->pool, max * sizeof(void*), 1949 q->queue = kfifo_init((void*)q->pool, max * sizeof(void*),
1950 GFP_KERNEL, NULL); 1950 GFP_KERNEL, NULL);
@@ -1979,8 +1979,7 @@ void iscsi_pool_free(struct iscsi_pool *q)
1979 1979
1980 for (i = 0; i < q->max; i++) 1980 for (i = 0; i < q->max; i++)
1981 kfree(q->pool[i]); 1981 kfree(q->pool[i]);
1982 if (q->pool) 1982 kfree(q->pool);
1983 kfree(q->pool);
1984 kfree(q->queue); 1983 kfree(q->queue);
1985} 1984}
1986EXPORT_SYMBOL_GPL(iscsi_pool_free); 1985EXPORT_SYMBOL_GPL(iscsi_pool_free);