]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
SCSI: libiscsi: fix iscsi pool error path
authorJean Delvare <jdelvare@suse.de>
Thu, 5 Mar 2009 20:45:55 +0000 (14:45 -0600)
committerChris Wright <chrisw@sous-sol.org>
Mon, 27 Apr 2009 17:36:59 +0000 (10:36 -0700)
upstream commit: f474a37bc48667595b5653a983b635c95ed82a3b

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>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
drivers/scsi/libiscsi.c

index 809d32d95c76e6457a33469c8a43bf7246ef44e0..c33e28fd49bcb07232c029ed11a3e8d2976c97ee 100644 (file)
@@ -1944,7 +1944,7 @@ iscsi_pool_init(struct iscsi_pool *q, int max, void ***items, int item_size)
                num_arrays++;
        q->pool = kzalloc(num_arrays * max * sizeof(void*), GFP_KERNEL);
        if (q->pool == NULL)
-               goto enomem;
+               return -ENOMEM;
 
        q->queue = kfifo_init((void*)q->pool, max * sizeof(void*),
                              GFP_KERNEL, NULL);
@@ -1979,8 +1979,7 @@ void iscsi_pool_free(struct iscsi_pool *q)
 
        for (i = 0; i < q->max; i++)
                kfree(q->pool[i]);
-       if (q->pool)
-               kfree(q->pool);
+       kfree(q->pool);
        kfree(q->queue);
 }
 EXPORT_SYMBOL_GPL(iscsi_pool_free);