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.goodb...@linaro.org>
---
 fs/exfat/io.c | 14 ++++++++++----
 1 file 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;

-- 
2.39.5

Reply via email to