summaryrefslogtreecommitdiffstats
path: root/drivers/mtd/partition.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2015-02-06 08:38:31 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2015-02-12 09:33:43 +0100
commit891e08b822e321879df24f0315fa3b6c7279d8a7 (patch)
tree098489ac6a15ff9e62d896e0a9c54a1b6d0b5c50 /drivers/mtd/partition.c
parent31d8b2e83d752c18815e2749662684aab0a3dc90 (diff)
downloadbarebox-891e08b822e321879df24f0315fa3b6c7279d8a7.tar.gz
barebox-891e08b822e321879df24f0315fa3b6c7279d8a7.tar.xz
mtd: partitions: Add error check
add_mtd_device can fail. Add an error check and bail out properly. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mtd/partition.c')
-rw-r--r--drivers/mtd/partition.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/mtd/partition.c b/drivers/mtd/partition.c
index 033a7d25d9..c514d4b402 100644
--- a/drivers/mtd/partition.c
+++ b/drivers/mtd/partition.c
@@ -108,6 +108,7 @@ struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
uint64_t size, unsigned long flags, const char *name)
{
struct mtd_info *part;
+ int ret;
part = xzalloc(sizeof(*part));
@@ -168,9 +169,17 @@ struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
if (!strncmp(mtd->cdev.name, name, strlen(mtd->cdev.name)))
part->cdev.partname = xstrdup(name + strlen(mtd->cdev.name) + 1);
- add_mtd_device(part, part->name, DEVICE_ID_SINGLE);
+ ret = add_mtd_device(part, part->name, DEVICE_ID_SINGLE);
+ if (ret)
+ goto err;
return part;
+err:
+ free(part->cdev.partname);
+ free(part->name);
+ free(part);
+
+ return ERR_PTR(ret);
}
int mtd_del_partition(struct mtd_info *part)