UBI: Fastmap: Do not add vol if it already exists
authorshengyong <shengyong1@huawei.com>
Tue, 26 May 2015 10:07:09 +0000 (10:07 +0000)
committerRichard Weinberger <richard@nod.at>
Tue, 2 Jun 2015 09:46:14 +0000 (11:46 +0200)
During fastmap attaching, check if a volume already exists when adding
the volume to volume tree. NOTE that the issue cannot happen, only if
the on-flash fastmap data is modified.

Signed-off-by: Sheng Yong <shengyong1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
drivers/mtd/ubi/fastmap.c

index e3d829409fa68285615e702aeb76fe07b41db2eb..9eee9044b11fcd7c5de5c1ea1e713b935dbed1d9 100644 (file)
@@ -192,8 +192,10 @@ static struct ubi_ainf_volume *add_vol(struct ubi_attach_info *ai, int vol_id,
 
                if (vol_id > av->vol_id)
                        p = &(*p)->rb_left;
-               else
+               else if (vol_id < av->vol_id)
                        p = &(*p)->rb_right;
+               else
+                       return ERR_PTR(-EINVAL);
        }
 
        av = kmalloc(sizeof(struct ubi_ainf_volume), GFP_KERNEL);
@@ -748,6 +750,11 @@ static int ubi_attach_fastmap(struct ubi_device *ubi,
 
                if (!av)
                        goto fail_bad;
+               if (PTR_ERR(av) == -EINVAL) {
+                       ubi_err(ubi, "volume (ID %i) already exists",
+                               fmvhdr->vol_id);
+                       goto fail_bad;
+               }
 
                ai->vols_found++;
                if (ai->highest_vol_id < be32_to_cpu(fmvhdr->vol_id))