llvm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [brauner-github:work.fd.prepare 31/43] fs/namespace.c:4376:2: warning: variable 'file' is uninitialized when used here
@ 2025-11-18 17:39 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-11-18 17:39 UTC (permalink / raw)
  To: Christian Brauner; +Cc: llvm, oe-kbuild-all, Christian Brauner

tree:   https://github.com/brauner/linux.git work.fd.prepare
head:   7eb06f9f7a76175a82d3c6b9d94219d7b64b6bce
commit: 7a6aae3e938ed79442f55c1f2b6d4a73a2cf0c51 [31/43] fs: namespace
config: arm-allnoconfig (https://download.01.org/0day-ci/archive/20251119/202511190132.8nRAlAZI-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 0bba1e76581bad04e7d7f09f5115ae5e2989e0d9)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251119/202511190132.8nRAlAZI-lkp@intel.com/reproduce)

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>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511190132.8nRAlAZI-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> fs/namespace.c:4376:2: warning: variable 'file' is uninitialized when used here [-Wuninitialized]
    4376 |         file->f_mode |= FMODE_NEED_UNMOUNT;
         |         ^~~~
   fs/namespace.c:4281:19: note: initialize the variable 'file' to silence this warning
    4281 |         struct file *file;
         |                          ^
         |                           = NULL
   fs/namespace.c:96:1: warning: unused function 'class_namespace_excl_lock_err' [-Wunused-function]
      96 | DEFINE_LOCK_GUARD_0(namespace_excl, namespace_lock(), namespace_unlock())
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cleanup.h:521:49: note: expanded from macro 'DEFINE_LOCK_GUARD_0'
     521 | __DEFINE_CLASS_IS_CONDITIONAL(_name, false);                            \
         |                                                                         ^
     522 | __DEFINE_UNLOCK_GUARD(_name, void, _unlock, __VA_ARGS__)                \
         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cleanup.h:495:10: note: expanded from macro '\
   __DEFINE_UNLOCK_GUARD'
     495 |                                                                         \
         |                                                                         ^
     496 | __DEFINE_GUARD_LOCK_PTR(_name, &_T->lock)
         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cleanup.h:380:20: note: expanded from macro '\
   __DEFINE_GUARD_LOCK_PTR'
     380 |         static inline int class_##_name##_lock_err(class_##_name##_t *_T)   \
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~
   <scratch space>:105:1: note: expanded from here
     105 | class_namespace_excl_lock_err
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/namespace.c:97:1: warning: unused function 'class_namespace_shared_lock_err' [-Wunused-function]
      97 | DEFINE_LOCK_GUARD_0(namespace_shared, down_read(&namespace_sem),
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      98 |                                       up_read(&namespace_sem))
         |                                       ~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cleanup.h:521:49: note: expanded from macro 'DEFINE_LOCK_GUARD_0'
     521 | __DEFINE_CLASS_IS_CONDITIONAL(_name, false);                            \
         |                                                                         ^
     522 | __DEFINE_UNLOCK_GUARD(_name, void, _unlock, __VA_ARGS__)                \
         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cleanup.h:495:10: note: expanded from macro '\
   __DEFINE_UNLOCK_GUARD'
     495 |                                                                         \
         |                                                                         ^
     496 | __DEFINE_GUARD_LOCK_PTR(_name, &_T->lock)
         | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cleanup.h:380:20: note: expanded from macro '\
   __DEFINE_GUARD_LOCK_PTR'
     380 |         static inline int class_##_name##_lock_err(class_##_name##_t *_T)   \
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~
   <scratch space>:127:1: note: expanded from here
     127 | class_namespace_shared_lock_err
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/namespace.c:135:37: warning: unused function 'node_to_mnt_ns' [-Wunused-function]
     135 | static inline struct mnt_namespace *node_to_mnt_ns(const struct rb_node *node)
         |                                     ^~~~~~~~~~~~~~
   4 warnings generated.


vim +/file +4376 fs/namespace.c

  4271	
  4272	/*
  4273	 * Create a kernel mount representation for a new, prepared superblock
  4274	 * (specified by fs_fd) and attach to an open_tree-like file descriptor.
  4275	 */
  4276	SYSCALL_DEFINE3(fsmount, int, fs_fd, unsigned int, flags,
  4277			unsigned int, attr_flags)
  4278	{
  4279		struct mnt_namespace *ns;
  4280		struct fs_context *fc;
  4281		struct file *file;
  4282		struct path newmount __free(path_put) = {};
  4283		struct mount *mnt;
  4284		unsigned int mnt_flags = 0;
  4285		long ret;
  4286	
  4287		if (!may_mount())
  4288			return -EPERM;
  4289	
  4290		if ((flags & ~(FSMOUNT_CLOEXEC)) != 0)
  4291			return -EINVAL;
  4292	
  4293		if (attr_flags & ~FSMOUNT_VALID_FLAGS)
  4294			return -EINVAL;
  4295	
  4296		mnt_flags = attr_flags_to_mnt_flags(attr_flags);
  4297	
  4298		switch (attr_flags & MOUNT_ATTR__ATIME) {
  4299		case MOUNT_ATTR_STRICTATIME:
  4300			break;
  4301		case MOUNT_ATTR_NOATIME:
  4302			mnt_flags |= MNT_NOATIME;
  4303			break;
  4304		case MOUNT_ATTR_RELATIME:
  4305			mnt_flags |= MNT_RELATIME;
  4306			break;
  4307		default:
  4308			return -EINVAL;
  4309		}
  4310	
  4311		CLASS(fd, f)(fs_fd);
  4312		if (fd_empty(f))
  4313			return -EBADF;
  4314	
  4315		if (fd_file(f)->f_op != &fscontext_fops)
  4316			return -EINVAL;
  4317	
  4318		fc = fd_file(f)->private_data;
  4319	
  4320		ACQUIRE(mutex_intr, uapi_mutex)(&fc->uapi_mutex);
  4321		ret = ACQUIRE_ERR(mutex_intr, &uapi_mutex);
  4322		if (ret)
  4323			return ret;
  4324	
  4325		/* There must be a valid superblock or we can't mount it */
  4326		ret = -EINVAL;
  4327		if (!fc->root)
  4328			return ret;
  4329	
  4330		ret = -EPERM;
  4331		if (mount_too_revealing(fc->root->d_sb, &mnt_flags)) {
  4332			errorfcp(fc, "VFS", "Mount too revealing");
  4333			return ret;
  4334		}
  4335	
  4336		ret = -EBUSY;
  4337		if (fc->phase != FS_CONTEXT_AWAITING_MOUNT)
  4338			return ret;
  4339	
  4340		if (fc->sb_flags & SB_MANDLOCK)
  4341			warn_mandlock();
  4342	
  4343		newmount.mnt = vfs_create_mount(fc);
  4344		if (IS_ERR(newmount.mnt))
  4345			return PTR_ERR(newmount.mnt);
  4346		newmount.dentry = dget(fc->root);
  4347		newmount.mnt->mnt_flags = mnt_flags;
  4348	
  4349		/* We've done the mount bit - now move the file context into more or
  4350		 * less the same state as if we'd done an fspick().  We don't want to
  4351		 * do any memory allocation or anything like that at this point as we
  4352		 * don't want to have to handle any errors incurred.
  4353		 */
  4354		vfs_clean_context(fc);
  4355	
  4356		ns = alloc_mnt_ns(current->nsproxy->mnt_ns->user_ns, true);
  4357		if (IS_ERR(ns))
  4358			return PTR_ERR(ns);
  4359		mnt = real_mount(newmount.mnt);
  4360		ns->root = mnt;
  4361		ns->nr_mounts = 1;
  4362		mnt_add_to_ns(ns, mnt);
  4363		mntget(newmount.mnt);
  4364	
  4365		FD_PREPARE(fdprep, (flags & FSMOUNT_CLOEXEC) ? O_CLOEXEC : 0,
  4366			   dentry_open(&newmount, O_PATH, fc->cred));
  4367		if (fd_prepare_failed(fdprep)) {
  4368			dissolve_on_fput(newmount.mnt);
  4369			return fd_prepare_error(fdprep);
  4370		}
  4371	
  4372		/*
  4373		 * Attach to an apparent O_PATH fd with a note that we
  4374		 * need to unmount it, not just simply put it.
  4375		 */
> 4376		file->f_mode |= FMODE_NEED_UNMOUNT;
  4377		return fd_publish(fdprep);
  4378	}
  4379	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-11-18 17:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-18 17:39 [brauner-github:work.fd.prepare 31/43] fs/namespace.c:4376:2: warning: variable 'file' is uninitialized when used here kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).