mtd: check parts pointer before using it
authorJason Liu <jason.hui@linaro.org>
Wed, 24 Aug 2011 11:26:28 +0000 (19:26 +0800)
committerArtem Bityutskiy <artem.bityutskiy@intel.com>
Sun, 11 Sep 2011 12:02:18 +0000 (15:02 +0300)
The code has the check for parts but it called after kmemdup,
kmemdup(parts, sizeof(*parts) * nr_parts,...)
if (!parts)
return -ENOMEM

In fact, we need check parts before safely using it.
and we also need check the real_parts to make sure kmemdup
allocation sucessfully.

Signed-off-by: Jason Liu <jason.hui@linaro.org>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
drivers/mtd/mtdcore.c

index 09bdbac51868bb2fd8f19ff744df66dbbc248ef6..b01993ea260ef95b064a04763989bc324f61a342 100644 (file)
@@ -465,12 +465,13 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char **types,
        struct mtd_partition *real_parts;
 
        err = parse_mtd_partitions(mtd, types, &real_parts, parser_data);
-       if (err <= 0 && nr_parts) {
+       if (err <= 0 && nr_parts && parts) {
                real_parts = kmemdup(parts, sizeof(*parts) * nr_parts,
                                     GFP_KERNEL);
-               err = nr_parts;
-               if (!parts)
+               if (!real_parts)
                        err = -ENOMEM;
+               else
+                       err = nr_parts;
        }
 
        if (err > 0) {