]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ntfs: fix uninitialized pointer in ntfs_write_mft_block
authorNamjae Jeon <linkinjeon@kernel.org>
Fri, 10 Apr 2026 14:49:01 +0000 (23:49 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Sat, 18 Apr 2026 02:33:07 +0000 (11:33 +0900)
Smatch reported that the variable rl could be used uninitialized in
ntfs_write_mft_block(). After analyzing the code,
when vol->cluster_size == NTFS_BLOCK_SIZE (512), it is smaller than
folio_size, so rl is guaranteed to be initialized. If vol->cluster_size
is larger, the condition to access rl becomes false, so a runtime error is
not expected to occur. However, to make the static checker happy,
this patch initializes rl to NULL and adds an explicit check before
its usage.

Reported-by: Dan Carpenter <error27@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/ntfs/mft.c

index bf028c1aea26ca23bde85dba8cc81023cf20ca46..60d64de51d217e86d06c841f3232ca34b8732bfe 100644 (file)
@@ -2714,7 +2714,7 @@ static int ntfs_write_mft_block(struct folio *folio, struct writeback_control *w
        s64 vcn = ntfs_pidx_to_cluster(vol, folio->index);
        s64 end_vcn = ntfs_bytes_to_cluster(vol, ni->allocated_size);
        unsigned int folio_sz;
-       struct runlist_element *rl;
+       struct runlist_element *rl = NULL;
        loff_t i_size = i_size_read(vi);
 
        ntfs_debug("Entering for inode 0x%llx, attribute type 0x%x, folio index 0x%lx.",
@@ -2820,7 +2820,7 @@ flush_bio:
 
                        if (vol->cluster_size == NTFS_BLOCK_SIZE &&
                            (mft_record_off ||
-                            rl->length - (vcn_off - rl->vcn) == 1 ||
+                            (rl && rl->length - (vcn_off - rl->vcn) == 1) ||
                             mft_ofs + NTFS_BLOCK_SIZE >= PAGE_SIZE))
                                folio_sz = NTFS_BLOCK_SIZE;
                        else