2021-02-22 22:34:16

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: [PATCH] nand: brcmnand: fix OOB R/W with Hamming ECC

Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
always be done without ECC enabled.
This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
from ff ff ff to 00 00 00, reporting incorrect ECC errors.

Signed-off-by: Álvaro Fernández Rojas <[email protected]>
---
drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
index 659eaa6f0980..5ff4291380c5 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
@@ -2688,6 +2688,12 @@ static int brcmnand_attach_chip(struct nand_chip *chip)

ret = brcmstb_choose_ecc_layout(host);

+ /* If OOB is written with ECC enabled it will cause ECC errors */
+ if (is_hamming_ecc(host->ctrl, &host->hwcfg)) {
+ chip->ecc.write_oob = brcmnand_write_oob_raw;
+ chip->ecc.read_oob = brcmnand_read_oob_raw;
+ }
+
return ret;
}

--
2.20.1


2021-02-24 08:16:08

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: Re: [PATCH] nand: brcmnand: fix OOB R/W with Hamming ECC

Hi Florian,

> El 24 feb 2021, a las 4:46, Florian Fainelli <[email protected]> escribió:
>
>
>
> On 2/22/2021 12:16 PM, Álvaro Fernández Rojas wrote:
>> Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
>> always be done without ECC enabled.
>> This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
>> clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
>> from ff ff ff to 00 00 00, reporting incorrect ECC errors.
>>
>> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
>
> Should there be a Fixes: tag provided here for back porting to stable trees?

I think so, but the fixed commit would be the first one, right?
27c5b17cd1b10564fa36f8f51e4b4b41436ecc32

> --
> Florian

Best regards,
Álvaro.

2021-02-24 08:23:20

by Miquel Raynal

[permalink] [raw]
Subject: Re: [PATCH] nand: brcmnand: fix OOB R/W with Hamming ECC

Hi Álvaro,

Álvaro Fernández Rojas <[email protected]> wrote on Wed, 24 Feb 2021
08:16:58 +0100:

> Hi Florian,
>
> > El 24 feb 2021, a las 4:46, Florian Fainelli <[email protected]> escribió:
> >
> >
> >
> > On 2/22/2021 12:16 PM, Álvaro Fernández Rojas wrote:
> >> Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
> >> always be done without ECC enabled.
> >> This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
> >> clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
> >> from ff ff ff to 00 00 00, reporting incorrect ECC errors.
> >>
> >> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
> >
> > Should there be a Fixes: tag provided here for back porting to stable trees?
>
> I think so, but the fixed commit would be the first one, right?
> 27c5b17cd1b10564fa36f8f51e4b4b41436ecc32

Yep, shouldn't be a problem.

Thanks,
Miquèl

2021-02-24 12:40:42

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH] nand: brcmnand: fix OOB R/W with Hamming ECC



On 2/22/2021 12:16 PM, Álvaro Fernández Rojas wrote:
> Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
> always be done without ECC enabled.
> This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
> clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
> from ff ff ff to 00 00 00, reporting incorrect ECC errors.
>
> Signed-off-by: Álvaro Fernández Rojas <[email protected]>

Should there be a Fixes: tag provided here for back porting to stable trees?
--
Florian

2021-02-24 13:00:01

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: [PATCH v2] nand: brcmnand: fix OOB R/W with Hamming ECC

Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
always be done without ECC enabled.
This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
from ff ff ff to 00 00 00, reporting incorrect ECC errors.

Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
---
v2: Add fixed tag.

drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
index 659eaa6f0980..5ff4291380c5 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
@@ -2688,6 +2688,12 @@ static int brcmnand_attach_chip(struct nand_chip *chip)

ret = brcmstb_choose_ecc_layout(host);

+ /* If OOB is written with ECC enabled it will cause ECC errors */
+ if (is_hamming_ecc(host->ctrl, &host->hwcfg)) {
+ chip->ecc.write_oob = brcmnand_write_oob_raw;
+ chip->ecc.read_oob = brcmnand_read_oob_raw;
+ }
+
return ret;
}

--
2.20.1

2021-02-25 03:30:52

by Brian Norris

[permalink] [raw]
Subject: Re: [PATCH v2] nand: brcmnand: fix OOB R/W with Hamming ECC

On Wed, Feb 24, 2021 at 12:02 AM Álvaro Fernández Rojas
<[email protected]> wrote:
> Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")

FWIW, I could believe this was broken. We weren't testing Hamming ECC
(nor JFFS2) at the time, so it could easily have obvious bugs like
this.

And since I got this far, and I'm still in MAINTAINERS, I guess:

Acked-by: Brian Norris <[email protected]>

2021-02-25 09:45:21

by Miquel Raynal

[permalink] [raw]
Subject: Re: [PATCH v2] nand: brcmnand: fix OOB R/W with Hamming ECC

Hi Álvaro,

Brian Norris <[email protected]> wrote on Wed, 24 Feb 2021
13:01:13 -0800:

> On Wed, Feb 24, 2021 at 12:02 AM Álvaro Fernández Rojas
> <[email protected]> wrote:
> > Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
>
> FWIW, I could believe this was broken. We weren't testing Hamming ECC
> (nor JFFS2) at the time, so it could easily have obvious bugs like
> this.

Right, you should probably limit the backport to the time when raw
accessors got introduced/fixed.

Thanks,
Miquèl

2021-02-25 09:46:38

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: Re: [PATCH v2] nand: brcmnand: fix OOB R/W with Hamming ECC

Hi Miquel,

> El 25 feb 2021, a las 8:48, Miquel Raynal <[email protected]> escribió:
>
> Hi Álvaro,
>
> Brian Norris <[email protected]> wrote on Wed, 24 Feb 2021
> 13:01:13 -0800:
>
>> On Wed, Feb 24, 2021 at 12:02 AM Álvaro Fernández Rojas
>> <[email protected]> wrote:
>>> Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
>>
>> FWIW, I could believe this was broken. We weren't testing Hamming ECC
>> (nor JFFS2) at the time, so it could easily have obvious bugs like
>> this.
>
> Right, you should probably limit the backport to the time when raw
> accessors got introduced/fixed.

What do you mean?
Those accessors have been there since the first commit (27c5b17cd1b10564fa36f8f51e4b4b41436ecc32):
https://github.com/torvalds/linux/blob/27c5b17cd1b10564fa36f8f51e4b4b41436ecc32/drivers/mtd/nand/brcmnand/brcmnand.c#L1896-L1899

>
> Thanks,
> Miquèl

Best regards,
Álvaro.

2021-02-25 09:54:14

by Miquel Raynal

[permalink] [raw]
Subject: Re: [PATCH v2] nand: brcmnand: fix OOB R/W with Hamming ECC

Hi Álvaro,

Álvaro Fernández Rojas <[email protected]> wrote on Thu, 25 Feb 2021
08:54:09 +0100:

> Hi Miquel,
>
> > El 25 feb 2021, a las 8:48, Miquel Raynal <[email protected]> escribió:
> >
> > Hi Álvaro,
> >
> > Brian Norris <[email protected]> wrote on Wed, 24 Feb 2021
> > 13:01:13 -0800:
> >
> >> On Wed, Feb 24, 2021 at 12:02 AM Álvaro Fernández Rojas
> >> <[email protected]> wrote:
> >>> Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
> >>
> >> FWIW, I could believe this was broken. We weren't testing Hamming ECC
> >> (nor JFFS2) at the time, so it could easily have obvious bugs like
> >> this.
> >
> > Right, you should probably limit the backport to the time when raw
> > accessors got introduced/fixed.
>
> What do you mean?
> Those accessors have been there since the first commit (27c5b17cd1b10564fa36f8f51e4b4b41436ecc32):
> https://github.com/torvalds/linux/blob/27c5b17cd1b10564fa36f8f51e4b4b41436ecc32/drivers/mtd/nand/brcmnand/brcmnand.c#L1896-L1899

I misunderstood Brian's answer. This commit is not that old and looks
legit.

2021-03-04 06:35:56

by Miquel Raynal

[permalink] [raw]
Subject: Re: [PATCH v2] nand: brcmnand: fix OOB R/W with Hamming ECC

On Wed, 2021-02-24 at 08:02:10 UTC, =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= wrote:
> Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
> always be done without ECC enabled.
> This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
> clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
> from ff ff ff to 00 00 00, reporting incorrect ECC errors.
>
> Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
> Acked-by: Brian Norris <[email protected]>

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next, thanks.

Miquel