diff options
author | Andrew Goodbody <andrew.goodbody@linaro.org> | 2025-07-08 12:16:41 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2025-07-15 09:55:48 -0600 |
commit | 505e2734756018af953d2e5bd1cd6ff7b66b0cdb (patch) | |
tree | 1a845e272705106919f3f17d7d0225ea10957554 | |
parent | d1d53c252a4a746db5ebcdf0d6de3aa0feec504e (diff) |
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 <andrew.goodbody@linaro.org>
-rw-r--r-- | fs/exfat/io.c | 14 |
1 files changed, 10 insertions, 4 deletions
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; |