All of lore.kernel.org
 help / color / mirror / Atom feed
* [brauner:debugfs_namespaces 1/4] fs/nsfs.c:196:7: error: 'NS_GET_USERNS' undeclared
@ 2019-10-12  0:50 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2019-10-12  0:50 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 19540 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux.git debugfs_namespaces
head:   4e2b1b4274aaf7efdd1c24460febdf001421e695
commit: 738289244f9f67ce3281dfece66c6e2f728b6501 [1/4] debugfs: add ns entry
config: x86_64-randconfig-s0-201940 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce:
        git checkout 738289244f9f67ce3281dfece66c6e2f728b6501
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   fs/nsfs.c:19:30: error: conflicting type qualifiers for 'ns_file_operations'
    const struct file_operations ns_file_operations = {
                                 ^
   In file included from fs/nsfs.c:12:0:
   include/linux/nsfs.h:6:31: note: previous declaration of 'ns_file_operations' was here
    extern struct file_operations ns_file_operations;
                                  ^
   fs/nsfs.c: In function 'ns_ioctl':
>> fs/nsfs.c:196:7: error: 'NS_GET_USERNS' undeclared (first use in this function)
     case NS_GET_USERNS:
          ^
   fs/nsfs.c:196:7: note: each undeclared identifier is reported only once for each function it appears in
>> fs/nsfs.c:198:7: error: 'NS_GET_PARENT' undeclared (first use in this function)
     case NS_GET_PARENT:
          ^
   fs/nsfs.c:202:7: error: 'NS_GET_NSTYPE' undeclared (first use in this function)
     case NS_GET_NSTYPE:
          ^
>> fs/nsfs.c:204:7: error: 'NS_GET_OWNER_UID' undeclared (first use in this function)
     case NS_GET_OWNER_UID:
          ^
   fs/nsfs.c: In function 'proc_ns_fget':
   fs/nsfs.c:244:15: error: implicit declaration of function 'debugfs_real_fops' [-Werror=implicit-function-declaration]
      real_fops = debugfs_real_fops(file);
                  ^
   fs/nsfs.c:244:13: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
      real_fops = debugfs_real_fops(file);
                ^
   cc1: some warnings being treated as errors

vim +/NS_GET_USERNS +196 fs/nsfs.c

6786741dbf99e4 Andrey Vagin                2016-09-06  @12  #include <linux/nsfs.h>
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25   13) #include <linux/uaccess.h>
e149ed2b805fef Al Viro                     2014-11-01   14  
e149ed2b805fef Al Viro                     2014-11-01   15  static struct vfsmount *nsfs_mnt;
e149ed2b805fef Al Viro                     2014-11-01   16  
6786741dbf99e4 Andrey Vagin                2016-09-06   17  static long ns_ioctl(struct file *filp, unsigned int ioctl,
6786741dbf99e4 Andrey Vagin                2016-09-06   18  			unsigned long arg);
738289244f9f67 Christian Brauner           2019-10-11  @19  const struct file_operations ns_file_operations = {
e149ed2b805fef Al Viro                     2014-11-01   20  	.llseek		= no_llseek,
6786741dbf99e4 Andrey Vagin                2016-09-06   21  	.unlocked_ioctl = ns_ioctl,
e149ed2b805fef Al Viro                     2014-11-01   22  };
e149ed2b805fef Al Viro                     2014-11-01   23  
e149ed2b805fef Al Viro                     2014-11-01   24  static char *ns_dname(struct dentry *dentry, char *buffer, int buflen)
e149ed2b805fef Al Viro                     2014-11-01   25  {
75c3cfa855dced David Howells               2015-03-17   26  	struct inode *inode = d_inode(dentry);
e149ed2b805fef Al Viro                     2014-11-01   27  	const struct proc_ns_operations *ns_ops = dentry->d_fsdata;
e149ed2b805fef Al Viro                     2014-11-01   28  
e149ed2b805fef Al Viro                     2014-11-01   29  	return dynamic_dname(dentry, buffer, buflen, "%s:[%lu]",
e149ed2b805fef Al Viro                     2014-11-01   30  		ns_ops->name, inode->i_ino);
e149ed2b805fef Al Viro                     2014-11-01   31  }
e149ed2b805fef Al Viro                     2014-11-01   32  
e149ed2b805fef Al Viro                     2014-11-01   33  static void ns_prune_dentry(struct dentry *dentry)
e149ed2b805fef Al Viro                     2014-11-01   34  {
75c3cfa855dced David Howells               2015-03-17   35  	struct inode *inode = d_inode(dentry);
e149ed2b805fef Al Viro                     2014-11-01   36  	if (inode) {
e149ed2b805fef Al Viro                     2014-11-01   37  		struct ns_common *ns = inode->i_private;
e149ed2b805fef Al Viro                     2014-11-01   38  		atomic_long_set(&ns->stashed, 0);
e149ed2b805fef Al Viro                     2014-11-01   39  	}
e149ed2b805fef Al Viro                     2014-11-01   40  }
e149ed2b805fef Al Viro                     2014-11-01   41  
e149ed2b805fef Al Viro                     2014-11-01   42  const struct dentry_operations ns_dentry_operations =
e149ed2b805fef Al Viro                     2014-11-01   43  {
e149ed2b805fef Al Viro                     2014-11-01   44  	.d_prune	= ns_prune_dentry,
e149ed2b805fef Al Viro                     2014-11-01   45  	.d_delete	= always_delete_dentry,
e149ed2b805fef Al Viro                     2014-11-01   46  	.d_dname	= ns_dname,
e149ed2b805fef Al Viro                     2014-11-01   47  };
e149ed2b805fef Al Viro                     2014-11-01   48  
e149ed2b805fef Al Viro                     2014-11-01   49  static void nsfs_evict(struct inode *inode)
e149ed2b805fef Al Viro                     2014-11-01   50  {
e149ed2b805fef Al Viro                     2014-11-01   51  	struct ns_common *ns = inode->i_private;
e149ed2b805fef Al Viro                     2014-11-01   52  	clear_inode(inode);
e149ed2b805fef Al Viro                     2014-11-01   53  	ns->ops->put(ns);
e149ed2b805fef Al Viro                     2014-11-01   54  }
e149ed2b805fef Al Viro                     2014-11-01   55  
6786741dbf99e4 Andrey Vagin                2016-09-06   56  static void *__ns_get_path(struct path *path, struct ns_common *ns)
e149ed2b805fef Al Viro                     2014-11-01   57  {
213b067ce314f9 Eric W. Biederman           2016-09-22   58  	struct vfsmount *mnt = nsfs_mnt;
e149ed2b805fef Al Viro                     2014-11-01   59  	struct dentry *dentry;
e149ed2b805fef Al Viro                     2014-11-01   60  	struct inode *inode;
e149ed2b805fef Al Viro                     2014-11-01   61  	unsigned long d;
e149ed2b805fef Al Viro                     2014-11-01   62  
e149ed2b805fef Al Viro                     2014-11-01   63  	rcu_read_lock();
e149ed2b805fef Al Viro                     2014-11-01   64  	d = atomic_long_read(&ns->stashed);
e149ed2b805fef Al Viro                     2014-11-01   65  	if (!d)
e149ed2b805fef Al Viro                     2014-11-01   66  		goto slow;
e149ed2b805fef Al Viro                     2014-11-01   67  	dentry = (struct dentry *)d;
e149ed2b805fef Al Viro                     2014-11-01   68  	if (!lockref_get_not_dead(&dentry->d_lockref))
e149ed2b805fef Al Viro                     2014-11-01   69  		goto slow;
e149ed2b805fef Al Viro                     2014-11-01   70  	rcu_read_unlock();
6786741dbf99e4 Andrey Vagin                2016-09-06   71  	ns->ops->put(ns);
e149ed2b805fef Al Viro                     2014-11-01   72  got_it:
213b067ce314f9 Eric W. Biederman           2016-09-22   73  	path->mnt = mntget(mnt);
e149ed2b805fef Al Viro                     2014-11-01   74  	path->dentry = dentry;
e149ed2b805fef Al Viro                     2014-11-01   75  	return NULL;
e149ed2b805fef Al Viro                     2014-11-01   76  slow:
e149ed2b805fef Al Viro                     2014-11-01   77  	rcu_read_unlock();
e149ed2b805fef Al Viro                     2014-11-01   78  	inode = new_inode_pseudo(mnt->mnt_sb);
e149ed2b805fef Al Viro                     2014-11-01   79  	if (!inode) {
6786741dbf99e4 Andrey Vagin                2016-09-06   80  		ns->ops->put(ns);
e149ed2b805fef Al Viro                     2014-11-01   81  		return ERR_PTR(-ENOMEM);
e149ed2b805fef Al Viro                     2014-11-01   82  	}
e149ed2b805fef Al Viro                     2014-11-01   83  	inode->i_ino = ns->inum;
078cd8279e6599 Deepa Dinamani              2016-09-14   84  	inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
e149ed2b805fef Al Viro                     2014-11-01   85  	inode->i_flags |= S_IMMUTABLE;
e149ed2b805fef Al Viro                     2014-11-01   86  	inode->i_mode = S_IFREG | S_IRUGO;
e149ed2b805fef Al Viro                     2014-11-01   87  	inode->i_fop = &ns_file_operations;
e149ed2b805fef Al Viro                     2014-11-01   88  	inode->i_private = ns;
e149ed2b805fef Al Viro                     2014-11-01   89  
5467a68cbf6884 Al Viro                     2019-03-15   90  	dentry = d_alloc_anon(mnt->mnt_sb);
e149ed2b805fef Al Viro                     2014-11-01   91  	if (!dentry) {
e149ed2b805fef Al Viro                     2014-11-01   92  		iput(inode);
e149ed2b805fef Al Viro                     2014-11-01   93  		return ERR_PTR(-ENOMEM);
e149ed2b805fef Al Viro                     2014-11-01   94  	}
e149ed2b805fef Al Viro                     2014-11-01   95  	d_instantiate(dentry, inode);
6786741dbf99e4 Andrey Vagin                2016-09-06   96  	dentry->d_fsdata = (void *)ns->ops;
e149ed2b805fef Al Viro                     2014-11-01   97  	d = atomic_long_cmpxchg(&ns->stashed, 0, (unsigned long)dentry);
e149ed2b805fef Al Viro                     2014-11-01   98  	if (d) {
e149ed2b805fef Al Viro                     2014-11-01   99  		d_delete(dentry);	/* make sure ->d_prune() does nothing */
e149ed2b805fef Al Viro                     2014-11-01  100  		dput(dentry);
e149ed2b805fef Al Viro                     2014-11-01  101  		cpu_relax();
6786741dbf99e4 Andrey Vagin                2016-09-06  102  		return ERR_PTR(-EAGAIN);
e149ed2b805fef Al Viro                     2014-11-01  103  	}
e149ed2b805fef Al Viro                     2014-11-01  104  	goto got_it;
e149ed2b805fef Al Viro                     2014-11-01  105  }
e149ed2b805fef Al Viro                     2014-11-01  106  
cdab6ba8668d68 Jakub Kicinski              2017-12-27  107  void *ns_get_path_cb(struct path *path, ns_get_path_helper_t *ns_get_cb,
cdab6ba8668d68 Jakub Kicinski              2017-12-27  108  		     void *private_data)
6786741dbf99e4 Andrey Vagin                2016-09-06  109  {
6786741dbf99e4 Andrey Vagin                2016-09-06  110  	void *ret;
6786741dbf99e4 Andrey Vagin                2016-09-06  111  
357ab5b5d240a2 Al Viro                     2019-03-22  112  	do {
357ab5b5d240a2 Al Viro                     2019-03-22  113  		struct ns_common *ns = ns_get_cb(private_data);
6786741dbf99e4 Andrey Vagin                2016-09-06  114  		if (!ns)
6786741dbf99e4 Andrey Vagin                2016-09-06  115  			return ERR_PTR(-ENOENT);
6786741dbf99e4 Andrey Vagin                2016-09-06  116  
6786741dbf99e4 Andrey Vagin                2016-09-06  117  		ret = __ns_get_path(path, ns);
357ab5b5d240a2 Al Viro                     2019-03-22  118  	} while (ret == ERR_PTR(-EAGAIN));
357ab5b5d240a2 Al Viro                     2019-03-22  119  
6786741dbf99e4 Andrey Vagin                2016-09-06  120  	return ret;
6786741dbf99e4 Andrey Vagin                2016-09-06  121  }
6786741dbf99e4 Andrey Vagin                2016-09-06  122  
cdab6ba8668d68 Jakub Kicinski              2017-12-27  123  struct ns_get_path_task_args {
cdab6ba8668d68 Jakub Kicinski              2017-12-27  124  	const struct proc_ns_operations *ns_ops;
cdab6ba8668d68 Jakub Kicinski              2017-12-27  125  	struct task_struct *task;
cdab6ba8668d68 Jakub Kicinski              2017-12-27  126  };
cdab6ba8668d68 Jakub Kicinski              2017-12-27  127  
cdab6ba8668d68 Jakub Kicinski              2017-12-27  128  static struct ns_common *ns_get_path_task(void *private_data)
cdab6ba8668d68 Jakub Kicinski              2017-12-27  129  {
cdab6ba8668d68 Jakub Kicinski              2017-12-27  130  	struct ns_get_path_task_args *args = private_data;
cdab6ba8668d68 Jakub Kicinski              2017-12-27  131  
cdab6ba8668d68 Jakub Kicinski              2017-12-27  132  	return args->ns_ops->get(args->task);
cdab6ba8668d68 Jakub Kicinski              2017-12-27  133  }
cdab6ba8668d68 Jakub Kicinski              2017-12-27  134  
cdab6ba8668d68 Jakub Kicinski              2017-12-27  135  void *ns_get_path(struct path *path, struct task_struct *task,
cdab6ba8668d68 Jakub Kicinski              2017-12-27  136  		  const struct proc_ns_operations *ns_ops)
cdab6ba8668d68 Jakub Kicinski              2017-12-27  137  {
cdab6ba8668d68 Jakub Kicinski              2017-12-27  138  	struct ns_get_path_task_args args = {
cdab6ba8668d68 Jakub Kicinski              2017-12-27  139  		.ns_ops	= ns_ops,
cdab6ba8668d68 Jakub Kicinski              2017-12-27  140  		.task	= task,
cdab6ba8668d68 Jakub Kicinski              2017-12-27  141  	};
cdab6ba8668d68 Jakub Kicinski              2017-12-27  142  
cdab6ba8668d68 Jakub Kicinski              2017-12-27  143  	return ns_get_path_cb(path, ns_get_path_task, &args);
cdab6ba8668d68 Jakub Kicinski              2017-12-27  144  }
cdab6ba8668d68 Jakub Kicinski              2017-12-27  145  
c62cce2caee558 Andrey Vagin                2016-10-24  146  int open_related_ns(struct ns_common *ns,
6786741dbf99e4 Andrey Vagin                2016-09-06  147  		   struct ns_common *(*get_ns)(struct ns_common *ns))
6786741dbf99e4 Andrey Vagin                2016-09-06  148  {
6786741dbf99e4 Andrey Vagin                2016-09-06  149  	struct path path = {};
6786741dbf99e4 Andrey Vagin                2016-09-06  150  	struct file *f;
6786741dbf99e4 Andrey Vagin                2016-09-06  151  	void *err;
6786741dbf99e4 Andrey Vagin                2016-09-06  152  	int fd;
6786741dbf99e4 Andrey Vagin                2016-09-06  153  
6786741dbf99e4 Andrey Vagin                2016-09-06  154  	fd = get_unused_fd_flags(O_CLOEXEC);
6786741dbf99e4 Andrey Vagin                2016-09-06  155  	if (fd < 0)
6786741dbf99e4 Andrey Vagin                2016-09-06  156  		return fd;
6786741dbf99e4 Andrey Vagin                2016-09-06  157  
357ab5b5d240a2 Al Viro                     2019-03-22  158  	do {
6786741dbf99e4 Andrey Vagin                2016-09-06  159  		struct ns_common *relative;
6786741dbf99e4 Andrey Vagin                2016-09-06  160  
6786741dbf99e4 Andrey Vagin                2016-09-06  161  		relative = get_ns(ns);
6786741dbf99e4 Andrey Vagin                2016-09-06  162  		if (IS_ERR(relative)) {
6786741dbf99e4 Andrey Vagin                2016-09-06  163  			put_unused_fd(fd);
6786741dbf99e4 Andrey Vagin                2016-09-06  164  			return PTR_ERR(relative);
6786741dbf99e4 Andrey Vagin                2016-09-06  165  		}
6786741dbf99e4 Andrey Vagin                2016-09-06  166  
6786741dbf99e4 Andrey Vagin                2016-09-06  167  		err = __ns_get_path(&path, relative);
357ab5b5d240a2 Al Viro                     2019-03-22  168  	} while (err == ERR_PTR(-EAGAIN));
357ab5b5d240a2 Al Viro                     2019-03-22  169  
6786741dbf99e4 Andrey Vagin                2016-09-06  170  	if (IS_ERR(err)) {
6786741dbf99e4 Andrey Vagin                2016-09-06  171  		put_unused_fd(fd);
6786741dbf99e4 Andrey Vagin                2016-09-06  172  		return PTR_ERR(err);
6786741dbf99e4 Andrey Vagin                2016-09-06  173  	}
6786741dbf99e4 Andrey Vagin                2016-09-06  174  
6786741dbf99e4 Andrey Vagin                2016-09-06  175  	f = dentry_open(&path, O_RDONLY, current_cred());
6786741dbf99e4 Andrey Vagin                2016-09-06  176  	path_put(&path);
6786741dbf99e4 Andrey Vagin                2016-09-06  177  	if (IS_ERR(f)) {
6786741dbf99e4 Andrey Vagin                2016-09-06  178  		put_unused_fd(fd);
6786741dbf99e4 Andrey Vagin                2016-09-06  179  		fd = PTR_ERR(f);
6786741dbf99e4 Andrey Vagin                2016-09-06  180  	} else
6786741dbf99e4 Andrey Vagin                2016-09-06  181  		fd_install(fd, f);
6786741dbf99e4 Andrey Vagin                2016-09-06  182  
6786741dbf99e4 Andrey Vagin                2016-09-06  183  	return fd;
6786741dbf99e4 Andrey Vagin                2016-09-06  184  }
24dce0800baaa5 Kirill Tkhai                2018-02-14  185  EXPORT_SYMBOL_GPL(open_related_ns);
6786741dbf99e4 Andrey Vagin                2016-09-06  186  
6786741dbf99e4 Andrey Vagin                2016-09-06  187  static long ns_ioctl(struct file *filp, unsigned int ioctl,
6786741dbf99e4 Andrey Vagin                2016-09-06  188  			unsigned long arg)
6786741dbf99e4 Andrey Vagin                2016-09-06  189  {
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  190) 	struct user_namespace *user_ns;
6786741dbf99e4 Andrey Vagin                2016-09-06  191  	struct ns_common *ns = get_proc_ns(file_inode(filp));
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  192) 	uid_t __user *argp;
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  193) 	uid_t uid;
6786741dbf99e4 Andrey Vagin                2016-09-06  194  
6786741dbf99e4 Andrey Vagin                2016-09-06  195  	switch (ioctl) {
6786741dbf99e4 Andrey Vagin                2016-09-06 @196  	case NS_GET_USERNS:
6786741dbf99e4 Andrey Vagin                2016-09-06  197  		return open_related_ns(ns, ns_get_owner);
a7306ed8d94af7 Andrey Vagin                2016-09-06 @198  	case NS_GET_PARENT:
a7306ed8d94af7 Andrey Vagin                2016-09-06  199  		if (!ns->ops->get_parent)
a7306ed8d94af7 Andrey Vagin                2016-09-06  200  			return -EINVAL;
a7306ed8d94af7 Andrey Vagin                2016-09-06  201  		return open_related_ns(ns, ns->ops->get_parent);
e5ff5ce6e20ee2 Michael Kerrisk (man-pages  2017-01-25  202) 	case NS_GET_NSTYPE:
e5ff5ce6e20ee2 Michael Kerrisk (man-pages  2017-01-25  203) 		return ns->ops->type;
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25 @204) 	case NS_GET_OWNER_UID:
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  205) 		if (ns->ops->type != CLONE_NEWUSER)
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  206) 			return -EINVAL;
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  207) 		user_ns = container_of(ns, struct user_namespace, ns);
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  208) 		argp = (uid_t __user *) arg;
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  209) 		uid = from_kuid_munged(current_user_ns(), user_ns->owner);
d95fa3c76a66b6 Michael Kerrisk (man-pages  2017-01-25  210) 		return put_user(uid, argp);
6786741dbf99e4 Andrey Vagin                2016-09-06  211  	default:
6786741dbf99e4 Andrey Vagin                2016-09-06  212  		return -ENOTTY;
6786741dbf99e4 Andrey Vagin                2016-09-06  213  	}
6786741dbf99e4 Andrey Vagin                2016-09-06  214  }
6786741dbf99e4 Andrey Vagin                2016-09-06  215  

:::::: The code at line 196 was first introduced by commit
:::::: 6786741dbf99e44fb0c0ed85a37582b8a26f1c3b nsfs: add ioctl to get an owning user namespace for ns file descriptor

:::::: TO: Andrey Vagin <avagin@openvz.org>
:::::: CC: Eric W. Biederman <ebiederm@xmission.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30384 bytes --]

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

only message in thread, other threads:[~2019-10-12  0:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-12  0:50 [brauner:debugfs_namespaces 1/4] fs/nsfs.c:196:7: error: 'NS_GET_USERNS' undeclared kbuild test robot

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.