summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Goodbody <andrew.goodbody@linaro.org>2025-07-08 12:16:41 +0100
committerTom Rini <trini@konsulko.com>2025-07-15 09:55:48 -0600
commit505e2734756018af953d2e5bd1cd6ff7b66b0cdb (patch)
tree1a845e272705106919f3f17d7d0225ea10957554
parentd1d53c252a4a746db5ebcdf0d6de3aa0feec504e (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.c14
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;