From 2f809f9cff578141def1fd00baf22384afd75c21 Mon Sep 17 00:00:00 2001 From: Anna Kiri Date: Mon, 8 Jun 2026 11:05:55 +0200 Subject: [PATCH] mtd: check return values of lseek() and write() in mtd_write_buffer() Two ignored return values in mtd_write_buffer() caused silent failures: - lseek() return value was ignored. A failed seek (e.g. EBADF, ESPIPE) followed by write() would silently write at the wrong offset. - write() return value was ignored, silently discarding write errors. This could lead to data corruption on the MTD device without any indication. Check both return values, report errors to stderr and return -1 on failure. Signed-off-by: Anna Kiri Link: https://github.com/openwrt/openwrt/pull/23552 Signed-off-by: Jonas Jelonek --- package/system/mtd/src/mtd.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/package/system/mtd/src/mtd.c b/package/system/mtd/src/mtd.c index c7d1ebf9bf0..e0e1e2b1832 100644 --- a/package/system/mtd/src/mtd.c +++ b/package/system/mtd/src/mtd.c @@ -183,8 +183,14 @@ int mtd_erase_block(int fd, int offset) int mtd_write_buffer(int fd, const char *buf, int offset, int length) { - lseek(fd, offset, SEEK_SET); - write(fd, buf, length); + if (lseek(fd, offset, SEEK_SET) != offset) { + fprintf(stderr, "Failed to seek MTD device: %s\n", strerror(errno)); + return -1; + } + if (write(fd, buf, length) != length) { + fprintf(stderr, "Short write to MTD device\n"); + return -1; + } return 0; } -- 2.47.3