aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/mtdcore.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/mtdcore.c')
-rw-r--r--drivers/mtd/mtdcore.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 62f83b050978..868ee52d5063 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -532,7 +532,7 @@ out_error:
532} 532}
533 533
534static int mtd_add_device_partitions(struct mtd_info *mtd, 534static int mtd_add_device_partitions(struct mtd_info *mtd,
535 struct mtd_partition *real_parts, 535 const struct mtd_partition *real_parts,
536 int nbparts) 536 int nbparts)
537{ 537{
538 int ret; 538 int ret;
@@ -589,16 +589,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
589 int nr_parts) 589 int nr_parts)
590{ 590{
591 int ret; 591 int ret;
592 struct mtd_partition *real_parts = NULL; 592 const struct mtd_partition *real_parts = NULL;
593 593
594 ret = parse_mtd_partitions(mtd, types, &real_parts, parser_data); 594 ret = parse_mtd_partitions(mtd, types, &real_parts, parser_data);
595 if (ret <= 0 && nr_parts && parts) { 595 if (ret <= 0 && nr_parts && parts) {
596 real_parts = kmemdup(parts, sizeof(*parts) * nr_parts, 596 real_parts = parts;
597 GFP_KERNEL); 597 ret = nr_parts;
598 if (!real_parts)
599 ret = -ENOMEM;
600 else
601 ret = nr_parts;
602 } 598 }
603 /* Didn't come up with either parsed OR fallback partitions */ 599 /* Didn't come up with either parsed OR fallback partitions */
604 if (ret < 0) { 600 if (ret < 0) {
@@ -628,7 +624,9 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
628 } 624 }
629 625
630out: 626out:
631 kfree(real_parts); 627 /* Cleanup any parsed partitions */
628 if (real_parts != parts)
629 kfree(real_parts);
632 return ret; 630 return ret;
633} 631}
634EXPORT_SYMBOL_GPL(mtd_device_parse_register); 632EXPORT_SYMBOL_GPL(mtd_device_parse_register);