All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [linux-next:master 9898/11507] fs/ntfs3/inode.c:570 ntfs_init_ads_node() error: we previously assumed 'attr' could be null (see line 555)
Date: Sat, 01 Aug 2026 07:29:16 +0800	[thread overview]
Message-ID: <202608010712.cavVorSd-lkp@intel.com> (raw)

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   415606a7be939835db9b0d6b711887586646346d
commit: be310476e8868ebe7a2ce8fb0e7b229535723963 [9898/11507] fs/ntfs3: Add basic support for alternative data streams
:::::: branch date: 7 hours ago
:::::: commit date: 2 days ago
config: x86_64-randconfig-161 (https://download.01.org/0day-ci/archive/20260801/202608010712.cavVorSd-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202608010712.cavVorSd-lkp@intel.com/

smatch warnings:
fs/ntfs3/inode.c:570 ntfs_init_ads_node() error: we previously assumed 'attr' could be null (see line 555)

vim +/attr +570 fs/ntfs3/inode.c

be310476e8868e Konstantin Komarov 2026-07-30  515  
be310476e8868e Konstantin Komarov 2026-07-30  516  /*
be310476e8868e Konstantin Komarov 2026-07-30  517   * ntfs_init_ads_node
be310476e8868e Konstantin Komarov 2026-07-30  518   *
be310476e8868e Konstantin Komarov 2026-07-30  519   * This function scans base inode for given ADS.
be310476e8868e Konstantin Komarov 2026-07-30  520   * And init inode associated with this ADS
be310476e8868e Konstantin Komarov 2026-07-30  521   */
be310476e8868e Konstantin Komarov 2026-07-30  522  static int ntfs_init_ads_node(struct inode *inode, const __le16 *ads_name,
be310476e8868e Konstantin Komarov 2026-07-30  523  			      u8 ads_len, u32 flags)
be310476e8868e Konstantin Komarov 2026-07-30  524  {
be310476e8868e Konstantin Komarov 2026-07-30  525  	int err = -EINVAL;
be310476e8868e Konstantin Komarov 2026-07-30  526  	struct ntfs_inode *ni = ntfs_i(inode);
be310476e8868e Konstantin Komarov 2026-07-30  527  	struct ntfs_inode *nb = ni->base;
be310476e8868e Konstantin Komarov 2026-07-30  528  	struct ntfs_sb_info *sbi = nb->mi.sbi;
be310476e8868e Konstantin Komarov 2026-07-30  529  	struct ATTR_LIST_ENTRY *le = NULL;
be310476e8868e Konstantin Komarov 2026-07-30  530  	struct ATTRIB *attr = NULL;
be310476e8868e Konstantin Komarov 2026-07-30  531  	u16 roff, asize;
be310476e8868e Konstantin Komarov 2026-07-30  532  	u64 svcn;
be310476e8868e Konstantin Komarov 2026-07-30  533  
be310476e8868e Konstantin Komarov 2026-07-30  534  	if (nb->ni_flags & NI_FLAG_DIR)
be310476e8868e Konstantin Komarov 2026-07-30  535  		return -EINVAL; /* no ADS for directories. */
be310476e8868e Konstantin Komarov 2026-07-30  536  
be310476e8868e Konstantin Komarov 2026-07-30  537  	ni->mi.sbi = sbi;
be310476e8868e Konstantin Komarov 2026-07-30  538  	ni->mi.rno = inode->i_ino;
be310476e8868e Konstantin Komarov 2026-07-30  539  
be310476e8868e Konstantin Komarov 2026-07-30  540  	if (ads_len == ARRAY_SIZE(QUERY_STREAMS) &&
be310476e8868e Konstantin Komarov 2026-07-30  541  	    !memcmp(ads_name, QUERY_STREAMS, sizeof(QUERY_STREAMS))) {
be310476e8868e Konstantin Komarov 2026-07-30  542  		goto ok; /* use goto to reduce tab pressure. */
be310476e8868e Konstantin Komarov 2026-07-30  543  	}
be310476e8868e Konstantin Komarov 2026-07-30  544  
be310476e8868e Konstantin Komarov 2026-07-30  545  	/* Enumerate all attributes in record. */
be310476e8868e Konstantin Komarov 2026-07-30  546  	while ((attr = ni_enum_attr_ex(nb, attr, &le, NULL))) {
be310476e8868e Konstantin Komarov 2026-07-30  547  		if (attr->type == ATTR_DATA && attr->name_len &&
be310476e8868e Konstantin Komarov 2026-07-30  548  		    ads_len == attr->name_len &&
be310476e8868e Konstantin Komarov 2026-07-30  549  		    !memcmp(ads_name, attr_name(attr), ads_len * sizeof(u16))) {
be310476e8868e Konstantin Komarov 2026-07-30  550  			/* We have found the ADS to open. */
be310476e8868e Konstantin Komarov 2026-07-30  551  			break;
be310476e8868e Konstantin Komarov 2026-07-30  552  		}
be310476e8868e Konstantin Komarov 2026-07-30  553  	}
be310476e8868e Konstantin Komarov 2026-07-30  554  
be310476e8868e Konstantin Komarov 2026-07-30 @555  	if (!attr) {
be310476e8868e Konstantin Komarov 2026-07-30  556  		if (!(flags & LOOKUP_CREATE)) {
be310476e8868e Konstantin Komarov 2026-07-30  557  			/* Do not create ADS. */
be310476e8868e Konstantin Komarov 2026-07-30  558  			return -ENOENT;
be310476e8868e Konstantin Komarov 2026-07-30  559  		}
be310476e8868e Konstantin Komarov 2026-07-30  560  
be310476e8868e Konstantin Komarov 2026-07-30  561  		/* Create new ADS. */
be310476e8868e Konstantin Komarov 2026-07-30  562  		err = ni_insert_resident(nb, 0, ATTR_DATA, ads_name, ads_len,
be310476e8868e Konstantin Komarov 2026-07-30  563  					 &attr, NULL, NULL);
be310476e8868e Konstantin Komarov 2026-07-30  564  		if (err) {
be310476e8868e Konstantin Komarov 2026-07-30  565  			/* Looks like the only reasons: ENOSPC/ENOMEM .*/
be310476e8868e Konstantin Komarov 2026-07-30  566  			return err;
be310476e8868e Konstantin Komarov 2026-07-30  567  		}
be310476e8868e Konstantin Komarov 2026-07-30  568  	}
be310476e8868e Konstantin Komarov 2026-07-30  569  
be310476e8868e Konstantin Komarov 2026-07-30 @570  	if (is_attr_sparsed(attr))
be310476e8868e Konstantin Komarov 2026-07-30  571  		ni->std_fa |= FILE_ATTRIBUTE_SPARSE_FILE;
be310476e8868e Konstantin Komarov 2026-07-30  572  	else
be310476e8868e Konstantin Komarov 2026-07-30  573  		ni->std_fa &= ~FILE_ATTRIBUTE_SPARSE_FILE;
be310476e8868e Konstantin Komarov 2026-07-30  574  
be310476e8868e Konstantin Komarov 2026-07-30  575  	if (is_attr_compressed(attr))
be310476e8868e Konstantin Komarov 2026-07-30  576  		ni->std_fa |= FILE_ATTRIBUTE_COMPRESSED;
be310476e8868e Konstantin Komarov 2026-07-30  577  	else
be310476e8868e Konstantin Komarov 2026-07-30  578  		ni->std_fa &= ~FILE_ATTRIBUTE_COMPRESSED;
be310476e8868e Konstantin Komarov 2026-07-30  579  
be310476e8868e Konstantin Komarov 2026-07-30  580  	if (is_attr_encrypted(attr))
be310476e8868e Konstantin Komarov 2026-07-30  581  		ni->std_fa |= FILE_ATTRIBUTE_ENCRYPTED;
be310476e8868e Konstantin Komarov 2026-07-30  582  	else
be310476e8868e Konstantin Komarov 2026-07-30  583  		ni->std_fa &= ~FILE_ATTRIBUTE_ENCRYPTED;
be310476e8868e Konstantin Komarov 2026-07-30  584  
be310476e8868e Konstantin Komarov 2026-07-30  585  	if (!attr->non_res) {
be310476e8868e Konstantin Komarov 2026-07-30  586  		ni->ni_flags |= NI_FLAG_RESIDENT;
be310476e8868e Konstantin Komarov 2026-07-30  587  		ni->i_valid = inode->i_size = le32_to_cpu(attr->res.data_size);
be310476e8868e Konstantin Komarov 2026-07-30  588  		inode_set_bytes(inode, inode->i_size);
be310476e8868e Konstantin Komarov 2026-07-30  589  		goto ok;
be310476e8868e Konstantin Komarov 2026-07-30  590  	}
be310476e8868e Konstantin Komarov 2026-07-30  591  
be310476e8868e Konstantin Komarov 2026-07-30  592  	inode_set_bytes(inode, attr_ondisk_size(attr));
be310476e8868e Konstantin Komarov 2026-07-30  593  	ni->i_valid = le64_to_cpu(attr->nres.valid_size);
be310476e8868e Konstantin Komarov 2026-07-30  594  	inode->i_size = le64_to_cpu(attr->nres.data_size);
be310476e8868e Konstantin Komarov 2026-07-30  595  
be310476e8868e Konstantin Komarov 2026-07-30  596  	if (!attr->nres.alloc_size)
be310476e8868e Konstantin Komarov 2026-07-30  597  		goto ok;
be310476e8868e Konstantin Komarov 2026-07-30  598  
be310476e8868e Konstantin Komarov 2026-07-30  599  	roff = le16_to_cpu(attr->nres.run_off);
be310476e8868e Konstantin Komarov 2026-07-30  600  	asize = le32_to_cpu(attr->size);
be310476e8868e Konstantin Komarov 2026-07-30  601  
be310476e8868e Konstantin Komarov 2026-07-30  602  	if (roff > asize) {
be310476e8868e Konstantin Komarov 2026-07-30  603  		/* This case should be checked in mi_enum_attr */
be310476e8868e Konstantin Komarov 2026-07-30  604  		return -EINVAL;
be310476e8868e Konstantin Komarov 2026-07-30  605  	}
be310476e8868e Konstantin Komarov 2026-07-30  606  
be310476e8868e Konstantin Komarov 2026-07-30  607  	svcn = le64_to_cpu(attr->nres.svcn);
be310476e8868e Konstantin Komarov 2026-07-30  608  	err = run_unpack_ex(&ni->file.run, sbi, ni->mi.rno, svcn,
be310476e8868e Konstantin Komarov 2026-07-30  609  			    le64_to_cpu(attr->nres.evcn), svcn,
be310476e8868e Konstantin Komarov 2026-07-30  610  			    Add2Ptr(attr, roff), asize - roff);
be310476e8868e Konstantin Komarov 2026-07-30  611  	if (err < 0) {
be310476e8868e Konstantin Komarov 2026-07-30  612  		/* run_unpack_ex marks volume dirty, if logical error. */
be310476e8868e Konstantin Komarov 2026-07-30  613  		return err;
be310476e8868e Konstantin Komarov 2026-07-30  614  	}
be310476e8868e Konstantin Komarov 2026-07-30  615  
be310476e8868e Konstantin Komarov 2026-07-30  616  ok:
be310476e8868e Konstantin Komarov 2026-07-30  617  	/* Keep ADS name (little endian). */
be310476e8868e Konstantin Komarov 2026-07-30  618  	ni->file.ads.name = kmemdup(ads_name, ads_len * sizeof(u16), GFP_NOFS);
be310476e8868e Konstantin Komarov 2026-07-30  619  	if (!ni->file.ads.name)
be310476e8868e Konstantin Komarov 2026-07-30  620  		return -ENOMEM;
be310476e8868e Konstantin Komarov 2026-07-30  621  	ni->file.ads.len = ads_len;
be310476e8868e Konstantin Komarov 2026-07-30  622  
be310476e8868e Konstantin Komarov 2026-07-30  623  	set_nlink(inode, 1);
be310476e8868e Konstantin Komarov 2026-07-30  624  
be310476e8868e Konstantin Komarov 2026-07-30  625  	init_rwsem(&ni->file.run_lock);
be310476e8868e Konstantin Komarov 2026-07-30  626  	/* Most fields are the same as the base's? */
be310476e8868e Konstantin Komarov 2026-07-30  627  	inode->i_op = nb->vfs_inode.i_op;
be310476e8868e Konstantin Komarov 2026-07-30  628  	inode->i_fop = nb->vfs_inode.i_fop;
be310476e8868e Konstantin Komarov 2026-07-30  629  	inode->i_mapping->a_ops = nb->vfs_inode.i_mapping->a_ops;
be310476e8868e Konstantin Komarov 2026-07-30  630  	inode->i_flags = nb->vfs_inode.i_flags;
be310476e8868e Konstantin Komarov 2026-07-30  631  	inode->i_mode = nb->vfs_inode.i_mode;
be310476e8868e Konstantin Komarov 2026-07-30  632  	inode->i_uid = nb->vfs_inode.i_uid;
be310476e8868e Konstantin Komarov 2026-07-30  633  	inode->i_gid = nb->vfs_inode.i_gid;
be310476e8868e Konstantin Komarov 2026-07-30  634  	inode->i_generation = nb->vfs_inode.i_generation;
be310476e8868e Konstantin Komarov 2026-07-30  635  
be310476e8868e Konstantin Komarov 2026-07-30  636  	return 0;
82cae269cfa953 Konstantin Komarov 2021-08-13  637  }
82cae269cfa953 Konstantin Komarov 2021-08-13  638  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2026-07-31 23:29 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202608010712.cavVorSd-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=error27@gmail.com \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.