nuttx/drivers/mtd
Arnav Sharma 493031e7b1 drivers/mtd/mtd_config: fix UAF in mtdconfig_unregister_by_path
mtdconfig_unregister_by_path() opened the device with file_open(),
which runs mtdconfig_open() and therefore holds dev->lock for the
whole lifetime of the temporary file reference.  It then destroyed
the mutex and freed the private device structure while that
reference was still open, so the subsequent file_close() reached
mtdconfig_close(), which performs nxmutex_unlock() on freed memory.
Destroying a held mutex and unlocking it after free corrupt the heap;
on sim this crashes deterministically in the next allocation
(EXC_BAD_ACCESS in mm_malloc).  Both file_close() and
unregister_driver() return values were also discarded and the
function unconditionally returned OK, masking legitimate errors.

Reorder the teardown to close -> unregister -> destroy/free and
propagate errors, so that:

- file_close() (driver close callback and inode release) runs while
  the private device structure is still valid, releasing the
  exclusive access taken by mtdconfig_open(),
- the private structure is destroyed and freed only after
  unregister_driver() succeeds.  On failure the inode (and with it
  i_private) may still be referenced, so freeing would be wrong.
  Returning the error also honors the documented API contract
  (zero on success, negated errno on failure).

This matches the established close -> unregister -> teardown ordering
used by e.g. bchdev_unregister().

Verified with sim:configdata plus a register/unregister lifetime
exercise in examples/configdata: 934706/934706 checks pass with the
fix; with the fix stashed the same run dies with SIGSEGV right after
mtdconfig_unregister_by_path() returns.

Fixes: https://github.com/apache/nuttx/issues/20166
Signed-off-by: Arnav Sharma <2006arnavsharma@gmail.com>
2026-09-17 11:30:34 -03:00
..
.gitignore drivers/mtd: introduce nvblk 2025-08-06 01:53:56 +08:00
at24xx.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
at25.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
at25ee.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
at45db.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
cfi.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
cfi.h drivers/mtd: cfi-flash driver 2025-02-11 17:23:44 +08:00
CMakeLists.txt drivers/mtd: add MX25UW25645G support 2026-08-19 19:16:00 +02:00
dhara.c drivers/: Multiple Drivers Are Registered With World Writable Part 3 2026-07-16 09:49:07 -03:00
filemtd.c drivers/mtd/filemtd: fix nxstyle errors in filemtd.c 2026-09-04 08:51:20 +08:00
ftl.c libs/libc: Fix divide-by-zero in stat() with large filesystem block sizes 2026-07-16 23:37:22 +08:00
gd5f.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
gd25.c drivers/mtd/gd25.c: ensure the device is not in power down mode 2026-09-08 08:59:33 +08:00
gd55.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
hamming.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
is25xp.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
Kconfig drivers/mtd: add MX25UW25645G support 2026-08-19 19:16:00 +02:00
m25px.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
Make.defs drivers/mtd: add MX25UW25645G support 2026-08-19 19:16:00 +02:00
mtd_cfi.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mtd_config.c drivers/mtd/mtd_config: fix UAF in mtdconfig_unregister_by_path 2026-09-17 11:30:34 -03:00
mtd_config_nvs.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mtd_modeltab.c drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
mtd_nand.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mtd_nandecc.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mtd_nandmodel.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mtd_nandram.c fs/mnemofs: Add mnemofs version 1 support. 2026-05-19 10:29:11 +08:00
mtd_nandscheme.c drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
mtd_nandwrapper.c fs/mnemofs: Add mnemofs version 1 support. 2026-05-19 10:29:11 +08:00
mtd_onfi.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mtd_partition.c !include/fcntl.h: align open flags with Linux values 2026-06-30 13:43:44 +08:00
mtd_progmem.c drivers/mtd: Make compile time check for sane mtd isbad/markbad configuration 2026-06-16 14:12:44 +08:00
mtd_rwbuffer.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mx25lx.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mx25rxx.c drivers/mtd/mx25rxx.c: add support for MX25L12873G 2026-05-20 14:50:18 -03:00
mx25uw25645g.c drivers/mtd: add MX25UW25645G support 2026-08-19 19:16:00 +02:00
mx35.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
n25qxxx.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
nullmtd.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
nvblk.c drivers/: Multiple Drivers Are Registered With World Writable Part 3 2026-07-16 09:49:07 -03:00
rammtd.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
ramtron.c style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
rpmsgmtd.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
rpmsgmtd.h drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
rpmsgmtd_server.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
s25fl1.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
sector512.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
skeleton.c drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
smart.c libs/libc: Fix divide-by-zero in stat() with large filesystem block sizes 2026-07-16 23:37:22 +08:00
sst25.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
sst25xx.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
sst26.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
sst39vf.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
w25.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
w25n.c drivers/mtd/w25n: address review comments 2026-04-23 16:26:44 +02:00
w25qxxxjv.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00