diff mbox

mtd: mtdpart: fix add_mtd_partitions error path

Message ID 1438251483-20888-1-git-send-email-boris.brezillon@free-electrons.com
State Accepted
Commit e5bae86797141e4a95e42d825f737cb36d7b8c37
Headers show

Commit Message

Boris Brezillon July 30, 2015, 10:18 a.m. UTC
If we fail to allocate a partition structure in the middle of the partition
creation process, the already allocated partitions are never removed, which
means they are still present in the partition list and their resources are
never freed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: stable@vger.kernel.org
---
 drivers/mtd/mtdpart.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Boris Brezillon Sept. 30, 2015, 8:27 a.m. UTC | #1
On Thu, 30 Jul 2015 12:18:03 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:

> If we fail to allocate a partition structure in the middle of the partition
> creation process, the already allocated partitions are never removed, which
> means they are still present in the partition list and their resources are
> never freed.

Ping.

> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> Cc: stable@vger.kernel.org
> ---
>  drivers/mtd/mtdpart.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
> index cafdb88..919a936 100644
> --- a/drivers/mtd/mtdpart.c
> +++ b/drivers/mtd/mtdpart.c
> @@ -664,8 +664,10 @@ int add_mtd_partitions(struct mtd_info *master,
>  
>  	for (i = 0; i < nbparts; i++) {
>  		slave = allocate_partition(master, parts + i, i, cur_offset);
> -		if (IS_ERR(slave))
> +		if (IS_ERR(slave)) {
> +			del_mtd_partitions(master);
>  			return PTR_ERR(slave);
> +		}
>  
>  		mutex_lock(&mtd_partitions_mutex);
>  		list_add(&slave->list, &mtd_partitions);
Brian Norris Sept. 30, 2015, 4:49 p.m. UTC | #2
On Thu, Jul 30, 2015 at 12:18:03PM +0200, Boris Brezillon wrote:
> If we fail to allocate a partition structure in the middle of the partition
> creation process, the already allocated partitions are never removed, which
> means they are still present in the partition list and their resources are
> never freed.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> Cc: stable@vger.kernel.org

Pushed to l2-mtd.git, thanks
diff mbox

Patch

diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index cafdb88..919a936 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -664,8 +664,10 @@  int add_mtd_partitions(struct mtd_info *master,
 
 	for (i = 0; i < nbparts; i++) {
 		slave = allocate_partition(master, parts + i, i, cur_offset);
-		if (IS_ERR(slave))
+		if (IS_ERR(slave)) {
+			del_mtd_partitions(master);
 			return PTR_ERR(slave);
+		}
 
 		mutex_lock(&mtd_partitions_mutex);
 		list_add(&slave->list, &mtd_partitions);