[bug report] fs/ntfs3: Add attrib operations

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

 



Hello Konstantin Komarov,

The patch be71b5cba2e6: "fs/ntfs3: Add attrib operations" from Aug
13, 2021 (linux-next), leads to the following Smatch static checker
warning:

	fs/ntfs3/xattr.c:393 ntfs_set_ea()
	warn: integer overflows

fs/ntfs3/xattr.c
    301 static noinline int ntfs_set_ea(struct inode *inode, const char *name,
    302                                 size_t name_len, const void *value,
    303                                 size_t val_size, int flags, bool locked,
    304                                 __le16 *ea_size)
    305 {
    306         struct ntfs_inode *ni = ntfs_i(inode);
    307         struct ntfs_sb_info *sbi = ni->mi.sbi;
    308         int err;
    309         struct EA_INFO ea_info;
    310         const struct EA_INFO *info;
    311         struct EA_FULL *new_ea;
    312         struct EA_FULL *ea_all = NULL;
    313         size_t add, new_pack;
    314         u32 off, size, ea_sz;
    315         __le16 size_pack;
    316         struct ATTRIB *attr;
    317         struct ATTR_LIST_ENTRY *le;
    318         struct mft_inode *mi;
    319         struct runs_tree ea_run;
    320         u64 new_sz;
    321         void *p;
    322 
    323         if (!locked)
    324                 ni_lock(ni);
    325 
    326         run_init(&ea_run);
    327 
    328         if (name_len > 255) {
    329                 err = -ENAMETOOLONG;
    330                 goto out;
    331         }
    332 
    333         add = ALIGN(struct_size(ea_all, name, 1 + name_len + val_size), 4);

It's bad to mix struct_size() with any sort of math.  Going into it, can
this overflow "1 + name_len + val_size"?  And then struct_size() returns
ULONG_MAX if there is an overflow.  When you pass that to ALIGN() it
becomes zero.

    334 
    335         err = ntfs_read_ea(ni, &ea_all, add, &info);
    336         if (err)
    337                 goto out;

regards,
dan carpenter




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux