[PATCH 1/3] mtd: rawnand: sunxi: propagate user-data allocation errors

From: James Hilliard

Date: Tue Aug 11 2026 - 02:02:18 EST


sunxi_nfc_maximize_user_data() returns -ENOMEM when its per-step
length array cannot be allocated, but the caller ignores that error.
The NULL array then makes sunxi_nfc_user_data_sz() report the fixed
four-byte fallback, which is not the layout that the variable-length
setup calculated.

Return the setup error so an allocation failure cannot silently select
and validate a different OOB layout.

Fixes: 54dcd6aa69db ("mtd: rawnand: sunxi: introduce maximize variable user data length")
Signed-off-by: James Hilliard <james.hilliard1@xxxxxxxxx>
---
drivers/mtd/nand/raw/sunxi_nand.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c
index 45ccbce91551..108161fe10cb 100644
--- a/drivers/mtd/nand/raw/sunxi_nand.c
+++ b/drivers/mtd/nand/raw/sunxi_nand.c
@@ -2072,6 +2072,7 @@ static int sunxi_nand_hw_ecc_ctrl_init(struct nand_chip *nand,
int total_user_data_sz = 0;
int nsectors;
int ecc_mode;
+ int ret;
int i;

if (nanddev->ecc.user_conf.flags & NAND_ECC_MAXIMIZE_STRENGTH) {
@@ -2169,9 +2170,12 @@ static int sunxi_nand_hw_ecc_ctrl_init(struct nand_chip *nand,
* The rationale for variable data length is to prioritize maximum ECC
* strength, and then use the remaining space for user data.
*/
- if (nfc->caps->reg_user_data_len)
- sunxi_nfc_maximize_user_data(nand, mtd->oobsize, ecc->bytes,
- nsectors);
+ if (nfc->caps->reg_user_data_len) {
+ ret = sunxi_nfc_maximize_user_data(nand, mtd->oobsize,
+ ecc->bytes, nsectors);
+ if (ret)
+ return ret;
+ }

if (total_user_data_sz == 0)
for (i = 0; i < nsectors; i++)

--
2.53.0