mtd: physmap_of: error checking to prevent a NULL pointer dereference
authorAnton Prins <anton.prins@nl.bosch.com>
Tue, 27 Nov 2012 15:38:16 +0000 (16:38 +0100)
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Mon, 10 Dec 2012 13:31:36 +0000 (15:31 +0200)
This patch solves a NULL pointer dereference, this may occur if the tuple
is not mappable (jumps to continue in the for-loop). Out of the loop
possible results are:
- info->list_size == 0  if no of the tuples is mappable
- info->list_size == 1
- info->list_size > 1
If no one of the supplied tuples is mappable (info->list_size == 0) and
info->cmtd will not be set. But it is used in mtd_device_parse_register, OOPS!
actually it should generate an error in this case!

Signed-off-by: Anton Prins <anton.prins@nl.bosch.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
drivers/mtd/maps/physmap_of.c

index cde8bf94338e165b2c6b666b5c76fc239c348411..37cdc201652f612406883f60243121fc78d55a60 100644 (file)
@@ -285,6 +285,7 @@ static int of_flash_probe(struct platform_device *dev)
        }
 
        err = 0;
+       info->cmtd = NULL;
        if (info->list_size == 1) {
                info->cmtd = info->list[0].mtd;
        } else if (info->list_size > 1) {
@@ -293,9 +294,10 @@ static int of_flash_probe(struct platform_device *dev)
                 */
                info->cmtd = mtd_concat_create(mtd_list, info->list_size,
                                               dev_name(&dev->dev));
-               if (info->cmtd == NULL)
-                       err = -ENXIO;
        }
+       if (info->cmtd == NULL)
+               err = -ENXIO;
+
        if (err)
                goto err_out;