[bug report] pNFS: Fix extent encoding in block/scsi layout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Sergey Bashirov,

Commit d84c4754f874 ("pNFS: Fix extent encoding in block/scsi
layout") from Jun 30, 2025 (linux-next), leads to the following
Smatch static checker warning:

	fs/nfs/blocklayout/extent_tree.c:615 ext_tree_encode_commit()
	error: uninitialized symbol 'be_prev'.

fs/nfs/blocklayout/extent_tree.c
    584 static int
    585 ext_tree_encode_commit(struct pnfs_block_layout *bl, __be32 *p,
    586                 size_t buffer_size, size_t *count, __u64 *lastbyte)
    587 {
    588         struct pnfs_block_extent *be, *be_prev;
    589         int ret = 0;
    590 
    591         spin_lock(&bl->bl_ext_lock);
    592         for (be = ext_tree_first(&bl->bl_ext_rw); be; be = ext_tree_next(be)) {
    593                 if (be->be_state != PNFS_BLOCK_INVALID_DATA ||
    594                     be->be_tag != EXTENT_WRITTEN)
    595                         continue;
    596 
    597                 (*count)++;
    598                 if (ext_tree_layoutupdate_size(bl, *count) > buffer_size) {
    599                         (*count)--;
    600                         ret = -ENOSPC;

If we fail on the first iteration then be_prev is uninitialized.

    601                         break;
    602                 }
    603 
    604                 if (bl->bl_scsi_layout)
    605                         p = encode_scsi_range(be, p);
    606                 else
    607                         p = encode_block_extent(be, p);
    608                 be->be_tag = EXTENT_COMMITTING;
    609                 be_prev = be;
    610         }
    611         if (!ret) {
    612                 *lastbyte = (bl->bl_lwb != 0) ? bl->bl_lwb - 1 : U64_MAX;
    613                 bl->bl_lwb = 0;
    614         } else {
--> 615                 *lastbyte = be_prev->be_f_offset + be_prev->be_length;
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dereferenced here.

    616                 *lastbyte <<= SECTOR_SHIFT;
    617                 *lastbyte -= 1;
    618         }
    619         spin_unlock(&bl->bl_ext_lock);
    620 
    621         return ret;
    622 }

regards,
dan carpenter




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux