diff mbox

[2/2] UBI: Call scan_all() with correct offset in error case

Message ID 1380141125-11063-2-git-send-email-richard@nod.at
State Accepted
Commit 4b3e0a25aa5518892ec8dbfafdd6a57789aa0c22
Headers show

Commit Message

Richard Weinberger Sept. 25, 2013, 8:32 p.m. UTC
If we find an invalid fastmap we have to scan from the very beginning.
Otherwise we leak the first 64 PEBs.

Reported-by: Richard Genoud <richard.genoud@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
 drivers/mtd/ubi/attach.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Richard Genoud Sept. 26, 2013, 7:22 a.m. UTC | #1
On 25/09/2013 22:32, Richard Weinberger wrote:
> If we find an invalid fastmap we have to scan from the very beginning.
> Otherwise we leak the first 64 PEBs.
> 
> Reported-by: Richard Genoud <richard.genoud@gmail.com>
> Signed-off-by: Richard Weinberger <richard@nod.at>
> ---
>  drivers/mtd/ubi/attach.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
> index c071d41..03b32b0 100644
> --- a/drivers/mtd/ubi/attach.c
> +++ b/drivers/mtd/ubi/attach.c
> @@ -1417,9 +1417,11 @@ int ubi_attach(struct ubi_device *ubi, int force_scan)
>  				ai = alloc_ai("ubi_aeb_slab_cache2");
>  				if (!ai)
>  					return -ENOMEM;
> -			}
>  
> -			err = scan_all(ubi, ai, UBI_FM_MAX_START);
> +				err = scan_all(ubi, ai, 0);
> +			} else {
> +				err = scan_all(ubi, ai, UBI_FM_MAX_START);
> +			}
>  		}
>  	}
>  #else
> 

Works great, the assert is not triggered anymore.

Tested-by: Richard Genoud <richard.genoud@gmail.com>
diff mbox

Patch

diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index c071d41..03b32b0 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -1417,9 +1417,11 @@  int ubi_attach(struct ubi_device *ubi, int force_scan)
 				ai = alloc_ai("ubi_aeb_slab_cache2");
 				if (!ai)
 					return -ENOMEM;
-			}
 
-			err = scan_all(ubi, ai, UBI_FM_MAX_START);
+				err = scan_all(ubi, ai, 0);
+			} else {
+				err = scan_all(ubi, ai, UBI_FM_MAX_START);
+			}
 		}
 	}
 #else