Always initialize oob_poi before writing OOB data
The following patch came across the mtd mailing list today. I thinks its also valid for barebox (it handles a special corner case, but maybe it can hit us, too): In nand_do_write_ops() code it is possible for a caller to provide ops.oobbuf populated and ops.mode == MTD_OOB_AUTO, which currently means that the chip->oob_poi buffer isn't initialised to all 0xFF. The nand_fill_oob() method then carries out the task of copying the provided OOB data to oob_poi, but with MTD_OOB_AUTO it skips areas marked as unavailable by the layout struct, including the bad block marker bytes. An example of this causing issues is when the last OOB data read was from the start of a bad block where the markers are not 0xFF, and the caller wishes to write new OOB data at the beginning of another block. In this scenario the caller would provide OOB data, but nand_fill_oob() would skip the bad block marker bytes in oob_poi before copying the OOB data provided by the caller. This means that when the OOB data is written back to NAND, the block is inadvertently marked as bad without the caller knowing. This has been witnessed when using YAFFS2 where tags are stored in the OOB. This patch changes the code so that oob_poi is always initialised to 0xFF to make sure no left over data is inadvertently written back to OOB data. The comment above is for the linux kernel, but the same is valid for barebox and CPUs writing the OOB date controlled in software (like the Samsung S3C2440 does). Signed-off-by: Adam Thomson <adam.thomson@alcatel-lucent.com> Signed-off-by: Juergen Beisert <jbe@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
WIP_next-LS
master
next
stable/v2013.05
stable/v2013.06
stable/v2013.07
stable/v2013.08
stable/v2013.10
stable/v2014.05
stable/v2014.06
stable/v2014.07
stable/v2014.08
stable/v2014.09
stable/v2014.10
stable/v2014.11
stable/v2014.12
stable/v2015.01
stable/v2015.02
stable/v2017.05
stable/v2017.06
stable/v2017.07
stable/v2017.11
stable/v2018.07
stable/v2018.09
stable/v2018.12
work/fit-support
v2020.07.0
v2020.06.0
v2020.05.0
v2020.04.0
v2020.03.0
v2020.02.0
v2020.01.0
v2019.12.0
v2019.11.0
v2019.10.0
v2019.09.0
v2019.08.1
v2019.08.0
v2019.07.0
v2019.06.1
v2019.06.0
v2019.05.0
v2019.04.0
v2019.03.0
v2019.02.0
v2019.01.0
v2018.12.0
v2018.11.0
v2018.10.0
v2018.09.1
v2018.09.0
v2018.08.1
v2018.08.0
v2018.07.2
v2018.07.1
v2018.07.0
v2018.06.0
v2018.05.0
v2018.04.0
v2018.03.0
v2018.02.0
v2018.01.0
v2017.12.0
v2017.11.0
v2017.10.0
v2017.09.0
v2017.08.0
v2017.07.1
v2017.07.0
v2017.06.2
v2017.06.1
v2017.06.0
v2017.05.4
v2017.05.3
v2017.05.2
v2017.05.1
v2017.05.0
v2017.04.0
v2017.03.0
v2017.02.0
v2017.01.0
v2016.11.0
v2016.10.0
v2016.09.0
v2016.08.0
v2016.07.0
v2016.06.0
v2016.05.0
v2016.04.0
v2016.03.0
v2016.02.0
v2016.01.0
v2015.12.0
v2015.11.0
v2015.10.0
v2015.09.0
v2015.08.0
v2015.07.0
v2015.06.0
v2015.05.0
v2015.04.0
v2015.03.0
v2015.02.0
v2015.01.0
v2014.12.0
v2014.11.0
v2014.10.0
v2014.09.0
v2014.08.0
v2014.07.0
v2014.06.0
v2014.05.0
v2014.04.0
v2014.03.0
v2014.02.0
v2014.01.0
v2013.12.0
v2013.11.0
v2013.10.1
v2013.10.0
v2013.09.0
v2013.08.1
v2013.08.0
v2013.07.0
v2013.06.1
v2013.06.0
v2013.05.1
v2013.05.0
v2013.04.0
v2013.03.0
v2013.02.0
v2013.01.0
v2012.12.1
v2012.12.0
v2012.11.0
v2012.10.0
v2012.09.0
v2012.08.0
v2012.07.0
v2012.06.0
v2012.05.0
v2012.04.0
v2012.03.0
v2012.02.0
v2012.01.0
v2011.12.0
v2011.11.0
v2011.10.0
v2011.09.0
v2011.08.0
v2011.07.0
v2011.06.0
|
---|
|
drivers/mtd/nand/nand_write.c |
---|