diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2015-02-06 08:38:31 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-02-12 09:33:43 +0100 |
commit | 891e08b822e321879df24f0315fa3b6c7279d8a7 (patch) | |
tree | 098489ac6a15ff9e62d896e0a9c54a1b6d0b5c50 /drivers/mtd/partition.c | |
parent | 31d8b2e83d752c18815e2749662684aab0a3dc90 (diff) | |
download | barebox-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.c | 11 |
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) |