From: Andrew Goodbody Date: Tue, 8 Jul 2025 11:16:41 +0000 (+0100) Subject: fs: exfat: Perform NULL check before dereference X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=505e2734756018af953d2e5bd1cd6ff7b66b0cdb;p=thirdparty%2Fu-boot.git fs: exfat: Perform NULL check before dereference In the functions exfat_pread and exfat_pwrite there is a NULL check for ctxt.cur_dev but this has already been derefenced twice before this happens. Refactor the code a bit to put the NULL check first. This issue found by Smatch. Signed-off-by: Andrew Goodbody --- diff --git a/fs/exfat/io.c b/fs/exfat/io.c index 77cd2dfb6dc..d80eece6850 100644 --- a/fs/exfat/io.c +++ b/fs/exfat/io.c @@ -442,12 +442,15 @@ off_t exfat_get_size(const struct exfat_dev* dev) ssize_t exfat_pread(struct exfat_dev* dev, void* buffer, size_t size, off_t offset) { - lbaint_t sect = offset >> ctxt.cur_dev->log2blksz; - int off = offset & (ctxt.cur_dev->blksz - 1); + lbaint_t sect; + int off; if (!ctxt.cur_dev) return -EIO; + sect = offset >> ctxt.cur_dev->log2blksz; + off = offset & (ctxt.cur_dev->blksz - 1); + if (fs_devread(ctxt.cur_dev, &ctxt.cur_part_info, sect, off, size, buffer)) return 0; @@ -457,12 +460,15 @@ ssize_t exfat_pread(struct exfat_dev* dev, void* buffer, size_t size, ssize_t exfat_pwrite(struct exfat_dev* dev, const void* buffer, size_t size, off_t offset) { - lbaint_t sect = offset >> ctxt.cur_dev->log2blksz; - int off = offset & (ctxt.cur_dev->blksz - 1); + lbaint_t sect; + int off; if (!ctxt.cur_dev) return -EIO; + sect = offset >> ctxt.cur_dev->log2blksz; + off = offset & (ctxt.cur_dev->blksz - 1); + if (fs_devwrite(ctxt.cur_dev, &ctxt.cur_part_info, sect, off, size, buffer)) return 0;