From: Anna Kiri Date: Mon, 8 Jun 2026 09:05:55 +0000 (+0200) Subject: mtd: check return values of lseek() and write() in mtd_write_buffer() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F23552%2Fhead;p=thirdparty%2Fopenwrt.git 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 --- 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; }