From: kernel test robot <lkp@intel.com>
To: Christian Brauner <brauner@kernel.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
Christian Brauner <christianvanbrauner@gmail.com>
Subject: [brauner-vfs:vfs.mount 14/14] fs/namespace.c:4969:1: warning: stack frame size (1048) exceeds limit (1024) in '__se_sys_statmount'
Date: Mon, 20 Nov 2023 11:26:50 +0800 [thread overview]
Message-ID: <202311201110.549Sj1SK-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git vfs.mount
head: bbaba842df6d93fa0fbcf8bc8341a352f6189c6c
commit: bbaba842df6d93fa0fbcf8bc8341a352f6189c6c [14/14] statmount: simplify string option retrieval
config: arm-randconfig-001-20231120 (https://download.01.org/0day-ci/archive/20231120/202311201110.549Sj1SK-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231120/202311201110.549Sj1SK-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/202311201110.549Sj1SK-lkp@intel.com/
All warnings (new ones prefixed by >>):
fs/namespace.c:4896:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
4896 | if (sm->mask & STMT_FS_TYPE) {
| ^~~~~~~~~~~~~~~~~~~~~~~
fs/namespace.c:4902:7: note: uninitialized use occurs here
4902 | if (!ret && sm->mask & STMT_MNT_ROOT) {
| ^~~
fs/namespace.c:4896:2: note: remove the 'if' if its condition is always true
4896 | if (sm->mask & STMT_FS_TYPE) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/namespace.c:4894:9: note: initialize the variable 'ret' to silence this warning
4894 | int ret;
| ^
| = 0
>> fs/namespace.c:4969:1: warning: stack frame size (1048) exceeds limit (1024) in '__se_sys_statmount' [-Wframe-larger-than]
4969 | SYSCALL_DEFINE4(statmount, const struct mnt_id_req __user *, req,
| ^
include/linux/syscalls.h:224:36: note: expanded from macro 'SYSCALL_DEFINE4'
224 | #define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
| ^
include/linux/syscalls.h:232:2: note: expanded from macro 'SYSCALL_DEFINEx'
232 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
| ^
include/linux/syscalls.h:251:18: note: expanded from macro '__SYSCALL_DEFINEx'
251 | asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
| ^
<scratch space>:154:1: note: expanded from here
154 | __se_sys_statmount
| ^
2 warnings generated.
vim +/__se_sys_statmount +4969 fs/namespace.c
bbaba842df6d93 Christian Brauner 2023-11-19 4888
bbaba842df6d93 Christian Brauner 2023-11-19 4889 static int copy_statmount_to_user(struct kstatmount *s)
bbaba842df6d93 Christian Brauner 2023-11-19 4890 {
bbaba842df6d93 Christian Brauner 2023-11-19 4891 struct statmount *sm = &s->sm;
bbaba842df6d93 Christian Brauner 2023-11-19 4892 struct seq_file *seq;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4893 size_t copysize = min_t(size_t, s->bufsize, sizeof(*sm));
bbaba842df6d93 Christian Brauner 2023-11-19 4894 int ret;
bbaba842df6d93 Christian Brauner 2023-11-19 4895
bbaba842df6d93 Christian Brauner 2023-11-19 @4896 if (sm->mask & STMT_FS_TYPE) {
bbaba842df6d93 Christian Brauner 2023-11-19 4897 seq = &s->fs_type;
bbaba842df6d93 Christian Brauner 2023-11-19 4898 ret = copy_to_user(s->buf->str + sm->fs_type,
bbaba842df6d93 Christian Brauner 2023-11-19 4899 seq->buf, seq->count);
bbaba842df6d93 Christian Brauner 2023-11-19 4900 }
bbaba842df6d93 Christian Brauner 2023-11-19 4901
bbaba842df6d93 Christian Brauner 2023-11-19 4902 if (!ret && sm->mask & STMT_MNT_ROOT) {
bbaba842df6d93 Christian Brauner 2023-11-19 4903 seq = &s->mnt_root;
bbaba842df6d93 Christian Brauner 2023-11-19 4904 ret = copy_to_user(s->buf->str + sm->mnt_root,
bbaba842df6d93 Christian Brauner 2023-11-19 4905 seq->buf, seq->count);
bbaba842df6d93 Christian Brauner 2023-11-19 4906 }
bbaba842df6d93 Christian Brauner 2023-11-19 4907
bbaba842df6d93 Christian Brauner 2023-11-19 4908 if (!ret && sm->mask & STMT_MNT_POINT) {
bbaba842df6d93 Christian Brauner 2023-11-19 4909 seq = &s->mnt_point;
bbaba842df6d93 Christian Brauner 2023-11-19 4910 ret = copy_to_user(s->buf->str + sm->mnt_point,
bbaba842df6d93 Christian Brauner 2023-11-19 4911 seq->buf, seq->count);
bbaba842df6d93 Christian Brauner 2023-11-19 4912 }
bbaba842df6d93 Christian Brauner 2023-11-19 4913
bbaba842df6d93 Christian Brauner 2023-11-19 4914 if (ret)
bbaba842df6d93 Christian Brauner 2023-11-19 4915 return -EFAULT;
bbaba842df6d93 Christian Brauner 2023-11-19 4916
bbaba842df6d93 Christian Brauner 2023-11-19 4917 /* Return the number of bytes copied to the buffer */
bbaba842df6d93 Christian Brauner 2023-11-19 4918 sm->size = copysize + s->pos;
bbaba842df6d93 Christian Brauner 2023-11-19 4919 if (copy_to_user(s->buf, sm, copysize))
bbaba842df6d93 Christian Brauner 2023-11-19 4920 return -EFAULT;
bbaba842df6d93 Christian Brauner 2023-11-19 4921
bbaba842df6d93 Christian Brauner 2023-11-19 4922 return 0;
bbaba842df6d93 Christian Brauner 2023-11-19 4923 }
bbaba842df6d93 Christian Brauner 2023-11-19 4924
bbaba842df6d93 Christian Brauner 2023-11-19 4925 static int do_statmount(struct kstatmount *s)
bbaba842df6d93 Christian Brauner 2023-11-19 4926 {
bbaba842df6d93 Christian Brauner 2023-11-19 4927 struct mount *m = real_mount(s->mnt);
bb0f527b929c6a Miklos Szeredi 2023-10-25 4928 int err;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4929
bb0f527b929c6a Miklos Szeredi 2023-10-25 4930 if (!capable(CAP_SYS_ADMIN) &&
bb0f527b929c6a Miklos Szeredi 2023-10-25 4931 !is_path_reachable(m, m->mnt.mnt_root, &s->root))
bb0f527b929c6a Miklos Szeredi 2023-10-25 4932 return -EPERM;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4933
bb0f527b929c6a Miklos Szeredi 2023-10-25 4934 err = security_sb_statfs(s->mnt->mnt_root);
bb0f527b929c6a Miklos Szeredi 2023-10-25 4935 if (err)
bb0f527b929c6a Miklos Szeredi 2023-10-25 4936 return err;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4937
e3da02da05b8cb Christian Brauner 2023-11-19 4938 if (s->mask & STMT_SB_BASIC)
e3da02da05b8cb Christian Brauner 2023-11-19 4939 stmt_sb_basic(s);
e3da02da05b8cb Christian Brauner 2023-11-19 4940
e3da02da05b8cb Christian Brauner 2023-11-19 4941 if (s->mask & STMT_MNT_BASIC)
e3da02da05b8cb Christian Brauner 2023-11-19 4942 stmt_mnt_basic(s);
e3da02da05b8cb Christian Brauner 2023-11-19 4943
e3da02da05b8cb Christian Brauner 2023-11-19 4944 if (s->mask & STMT_PROPAGATE_FROM)
e3da02da05b8cb Christian Brauner 2023-11-19 4945 stmt_propagate_from(s);
e3da02da05b8cb Christian Brauner 2023-11-19 4946
bbaba842df6d93 Christian Brauner 2023-11-19 4947 if (s->mask & STMT_FS_TYPE)
bbaba842df6d93 Christian Brauner 2023-11-19 4948 err = stmt_string(s, STMT_FS_TYPE);
bb0f527b929c6a Miklos Szeredi 2023-10-25 4949
bbaba842df6d93 Christian Brauner 2023-11-19 4950 if (!err && s->mask & STMT_MNT_ROOT)
bbaba842df6d93 Christian Brauner 2023-11-19 4951 err = stmt_string(s, STMT_MNT_ROOT);
bb0f527b929c6a Miklos Szeredi 2023-10-25 4952
bbaba842df6d93 Christian Brauner 2023-11-19 4953 if (!err && s->mask & STMT_MNT_POINT)
bbaba842df6d93 Christian Brauner 2023-11-19 4954 err = stmt_string(s, STMT_MNT_POINT);
bb0f527b929c6a Miklos Szeredi 2023-10-25 4955
bbaba842df6d93 Christian Brauner 2023-11-19 4956 if (err)
bbaba842df6d93 Christian Brauner 2023-11-19 4957 return err;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4958
bb0f527b929c6a Miklos Szeredi 2023-10-25 4959 return 0;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4960 }
bb0f527b929c6a Miklos Szeredi 2023-10-25 4961
bbaba842df6d93 Christian Brauner 2023-11-19 4962 static inline void drop_kstatmount(struct kstatmount *ks)
bbaba842df6d93 Christian Brauner 2023-11-19 4963 {
bbaba842df6d93 Christian Brauner 2023-11-19 4964 __putname(ks->fs_type.buf);
bbaba842df6d93 Christian Brauner 2023-11-19 4965 __putname(ks->mnt_root.buf);
bbaba842df6d93 Christian Brauner 2023-11-19 4966 __putname(ks->mnt_point.buf);
bbaba842df6d93 Christian Brauner 2023-11-19 4967 }
bbaba842df6d93 Christian Brauner 2023-11-19 4968
bb0f527b929c6a Miklos Szeredi 2023-10-25 @4969 SYSCALL_DEFINE4(statmount, const struct mnt_id_req __user *, req,
bb0f527b929c6a Miklos Szeredi 2023-10-25 4970 struct statmount __user *, buf, size_t, bufsize,
bb0f527b929c6a Miklos Szeredi 2023-10-25 4971 unsigned int, flags)
bb0f527b929c6a Miklos Szeredi 2023-10-25 4972 {
bb0f527b929c6a Miklos Szeredi 2023-10-25 4973 struct vfsmount *mnt;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4974 struct mnt_id_req kreq;
e9b3e0e86c7961 Christian Brauner 2023-11-19 4975 struct kstatmount *ks;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4976 int ret;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4977
bb0f527b929c6a Miklos Szeredi 2023-10-25 4978 if (flags)
bb0f527b929c6a Miklos Szeredi 2023-10-25 4979 return -EINVAL;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4980
bb0f527b929c6a Miklos Szeredi 2023-10-25 4981 if (copy_from_user(&kreq, req, sizeof(kreq)))
bb0f527b929c6a Miklos Szeredi 2023-10-25 4982 return -EFAULT;
bb0f527b929c6a Miklos Szeredi 2023-10-25 4983
bb0f527b929c6a Miklos Szeredi 2023-10-25 4984 down_read(&namespace_sem);
bb0f527b929c6a Miklos Szeredi 2023-10-25 4985 mnt = lookup_mnt_in_ns(kreq.mnt_id, current->nsproxy->mnt_ns);
e9b3e0e86c7961 Christian Brauner 2023-11-19 4986 if (!mnt) {
e9b3e0e86c7961 Christian Brauner 2023-11-19 4987 up_read(&namespace_sem);
e9b3e0e86c7961 Christian Brauner 2023-11-19 4988 return -ENOENT;
e9b3e0e86c7961 Christian Brauner 2023-11-19 4989 }
e9b3e0e86c7961 Christian Brauner 2023-11-19 4990
e9b3e0e86c7961 Christian Brauner 2023-11-19 4991 ks = &(struct kstatmount){
bb0f527b929c6a Miklos Szeredi 2023-10-25 4992 .mask = kreq.request_mask,
bb0f527b929c6a Miklos Szeredi 2023-10-25 4993 .buf = buf,
bb0f527b929c6a Miklos Szeredi 2023-10-25 4994 .bufsize = bufsize,
bb0f527b929c6a Miklos Szeredi 2023-10-25 4995 .mnt = mnt,
bb0f527b929c6a Miklos Szeredi 2023-10-25 4996 };
bb0f527b929c6a Miklos Szeredi 2023-10-25 4997
e9b3e0e86c7961 Christian Brauner 2023-11-19 4998 get_fs_root(current->fs, &ks->root);
e9b3e0e86c7961 Christian Brauner 2023-11-19 4999 ret = do_statmount(ks);
e9b3e0e86c7961 Christian Brauner 2023-11-19 5000 path_put(&ks->root);
bb0f527b929c6a Miklos Szeredi 2023-10-25 5001 up_read(&namespace_sem);
bb0f527b929c6a Miklos Szeredi 2023-10-25 5002
bbaba842df6d93 Christian Brauner 2023-11-19 5003 if (!ret)
bbaba842df6d93 Christian Brauner 2023-11-19 5004 ret = copy_statmount_to_user(ks);
bbaba842df6d93 Christian Brauner 2023-11-19 5005 drop_kstatmount(ks);
bb0f527b929c6a Miklos Szeredi 2023-10-25 5006 return ret;
bb0f527b929c6a Miklos Szeredi 2023-10-25 5007 }
bb0f527b929c6a Miklos Szeredi 2023-10-25 5008
:::::: The code at line 4969 was first introduced by commit
:::::: bb0f527b929c6ab105d80eaac03399bcee6b047e add statmount(2) syscall
:::::: TO: Miklos Szeredi <mszeredi@redhat.com>
:::::: CC: Christian Brauner <brauner@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2023-11-20 3: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=202311201110.549Sj1SK-lkp@intel.com \
--to=lkp@intel.com \
--cc=brauner@kernel.org \
--cc=christianvanbrauner@gmail.com \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox