All of lore.kernel.org
 help / color / mirror / Atom feed
* [hch-misc:set_fs-sysctl 6/6] fs/proc/proc_sysctl.c:602:16: error: invalid storage class for function 'proc_sys_read'
@ 2020-04-14  3:56 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2020-04-14  3:56 UTC (permalink / raw)
  To: kbuild-all

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

tree:   git://git.infradead.org/users/hch/misc.git set_fs-sysctl
head:   862858db7419b3123f7b182ceb2026ef94efc2a5
commit: 862858db7419b3123f7b182ceb2026ef94efc2a5 [6/6] sysctl: pass kernel pointers to ->proc_handler
config: sparc-allyesconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 862858db7419b3123f7b182ceb2026ef94efc2a5
        # save the attached .config to linux build tree
        GCC_VERSION=9.3.0 make.cross ARCH=sparc 

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

All errors (new ones prefixed by >>):

   fs/proc/proc_sysctl.c: In function 'proc_sys_call_handler':
>> fs/proc/proc_sysctl.c:602:16: error: invalid storage class for function 'proc_sys_read'
     602 | static ssize_t proc_sys_read(struct file *filp, char __user *buf,
         |                ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:602:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     602 | static ssize_t proc_sys_read(struct file *filp, char __user *buf,
         | ^~~~~~
>> fs/proc/proc_sysctl.c:608:16: error: invalid storage class for function 'proc_sys_write'
     608 | static ssize_t proc_sys_write(struct file *filp, const char __user *buf,
         |                ^~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:614:12: error: invalid storage class for function 'proc_sys_open'
     614 | static int proc_sys_open(struct inode *inode, struct file *filp)
         |            ^~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:631:17: error: invalid storage class for function 'proc_sys_poll'
     631 | static __poll_t proc_sys_poll(struct file *filp, poll_table *wait)
         |                 ^~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:663:13: error: invalid storage class for function 'proc_sys_fill_cache'
     663 | static bool proc_sys_fill_cache(struct file *file,
         |             ^~~~~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:712:13: error: invalid storage class for function 'proc_sys_link_fill_cache'
     712 | static bool proc_sys_link_fill_cache(struct file *file,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:733:12: error: invalid storage class for function 'scan'
     733 | static int scan(struct ctl_table_header *head, struct ctl_table *table,
         |            ^~~~
>> fs/proc/proc_sysctl.c:753:12: error: invalid storage class for function 'proc_sys_readdir'
     753 | static int proc_sys_readdir(struct file *file, struct dir_context *ctx)
         |            ^~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:782:12: error: invalid storage class for function 'proc_sys_permission'
     782 | static int proc_sys_permission(struct inode *inode, int mask)
         |            ^~~~~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:810:12: error: invalid storage class for function 'proc_sys_setattr'
     810 | static int proc_sys_setattr(struct dentry *dentry, struct iattr *attr)
         |            ^~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:827:12: error: invalid storage class for function 'proc_sys_getattr'
     827 | static int proc_sys_getattr(const struct path *path, struct kstat *stat,
         |            ^~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:846:11: error: initializer element is not constant
     846 |  .open  = proc_sys_open,
         |           ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:846:11: note: (near initialization for 'proc_sys_file_operations.open')
   fs/proc/proc_sysctl.c:847:11: error: initializer element is not constant
     847 |  .poll  = proc_sys_poll,
         |           ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:847:11: note: (near initialization for 'proc_sys_file_operations.poll')
   fs/proc/proc_sysctl.c:848:11: error: initializer element is not constant
     848 |  .read  = proc_sys_read,
         |           ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:848:11: note: (near initialization for 'proc_sys_file_operations.read')
   fs/proc/proc_sysctl.c:849:12: error: initializer element is not constant
     849 |  .write  = proc_sys_write,
         |            ^~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:849:12: note: (near initialization for 'proc_sys_file_operations.write')
   fs/proc/proc_sysctl.c:855:20: error: initializer element is not constant
     855 |  .iterate_shared = proc_sys_readdir,
         |                    ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:855:20: note: (near initialization for 'proc_sys_dir_file_operations.iterate_shared')
   fs/proc/proc_sysctl.c:860:16: error: initializer element is not constant
     860 |  .permission = proc_sys_permission,
         |                ^~~~~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:860:16: note: (near initialization for 'proc_sys_inode_operations.permission')
   fs/proc/proc_sysctl.c:861:13: error: initializer element is not constant
     861 |  .setattr = proc_sys_setattr,
         |             ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:861:13: note: (near initialization for 'proc_sys_inode_operations.setattr')
   fs/proc/proc_sysctl.c:862:13: error: initializer element is not constant
     862 |  .getattr = proc_sys_getattr,
         |             ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:862:13: note: (near initialization for 'proc_sys_inode_operations.getattr')
   fs/proc/proc_sysctl.c:867:16: error: initializer element is not constant
     867 |  .permission = proc_sys_permission,
         |                ^~~~~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:867:16: note: (near initialization for 'proc_sys_dir_operations.permission')
   fs/proc/proc_sysctl.c:868:13: error: initializer element is not constant
     868 |  .setattr = proc_sys_setattr,
         |             ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:868:13: note: (near initialization for 'proc_sys_dir_operations.setattr')
   fs/proc/proc_sysctl.c:869:13: error: initializer element is not constant
     869 |  .getattr = proc_sys_getattr,
         |             ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:869:13: note: (near initialization for 'proc_sys_dir_operations.getattr')
>> fs/proc/proc_sysctl.c:872:12: error: invalid storage class for function 'proc_sys_revalidate'
     872 | static int proc_sys_revalidate(struct dentry *dentry, unsigned int flags)
         |            ^~~~~~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:879:12: error: invalid storage class for function 'proc_sys_delete'
     879 | static int proc_sys_delete(const struct dentry *dentry)
         |            ^~~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:884:12: error: invalid storage class for function 'sysctl_is_seen'
     884 | static int sysctl_is_seen(struct ctl_table_header *p)
         |            ^~~~~~~~~~~~~~
>> fs/proc/proc_sysctl.c:899:12: error: invalid storage class for function 'proc_sys_compare'
     899 | static int proc_sys_compare(const struct dentry *dentry,
         |            ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:920:18: error: initializer element is not constant
     920 |  .d_revalidate = proc_sys_revalidate,
         |                  ^~~~~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:920:18: note: (near initialization for 'proc_sys_dentry_operations.d_revalidate')
   fs/proc/proc_sysctl.c:921:14: error: initializer element is not constant
     921 |  .d_delete = proc_sys_delete,
         |              ^~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:921:14: note: (near initialization for 'proc_sys_dentry_operations.d_delete')
   fs/proc/proc_sysctl.c:922:15: error: initializer element is not constant
     922 |  .d_compare = proc_sys_compare,
         |               ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:922:15: note: (near initialization for 'proc_sys_dentry_operations.d_compare')
>> fs/proc/proc_sysctl.c:925:24: error: invalid storage class for function 'find_subdir'
     925 | static struct ctl_dir *find_subdir(struct ctl_dir *dir,
         |                        ^~~~~~~~~~~
>> fs/proc/proc_sysctl.c:939:24: error: invalid storage class for function 'new_dir'
     939 | static struct ctl_dir *new_dir(struct ctl_table_set *set,
         |                        ^~~~~~~
>> fs/proc/proc_sysctl.c:977:24: error: invalid storage class for function 'get_subdir'
     977 | static struct ctl_dir *get_subdir(struct ctl_dir *dir,
         |                        ^~~~~~~~~~
>> fs/proc/proc_sysctl.c:1027:24: error: invalid storage class for function 'xlate_dir'
    1027 | static struct ctl_dir *xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir)
         |                        ^~~~~~~~~
   fs/proc/proc_sysctl.c:1040:12: error: invalid storage class for function 'sysctl_follow_link'
    1040 | static int sysctl_follow_link(struct ctl_table_header **phead,
         |            ^~~~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1074:12: error: invalid storage class for function 'sysctl_err'
    1074 | static int sysctl_err(const char *path, struct ctl_table *table, char *fmt, ...)
         |            ^~~~~~~~~~
   fs/proc/proc_sysctl.c:1090:12: error: invalid storage class for function 'sysctl_check_table_array'
    1090 | static int sysctl_check_table_array(const char *path, struct ctl_table *table)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1103:12: error: invalid storage class for function 'sysctl_check_table'
    1103 | static int sysctl_check_table(const char *path, struct ctl_table *table)
         |            ^~~~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1137:33: error: invalid storage class for function 'new_links'
    1137 | static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table *table,
         |                                 ^~~~~~~~~
   fs/proc/proc_sysctl.c:1180:13: error: invalid storage class for function 'get_links'
    1180 | static bool get_links(struct ctl_dir *dir,
         |             ^~~~~~~~~
   fs/proc/proc_sysctl.c:1208:12: error: invalid storage class for function 'insert_links'
    1208 | static int insert_links(struct ctl_table_header *head)
         |            ^~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/sysctl.h:25,
                    from fs/proc/proc_sysctl.c:6:
   fs/proc/proc_sysctl.c:1373:15: error: non-static declaration of 'register_sysctl' follows static declaration
    1373 | EXPORT_SYMBOL(register_sysctl);
         |               ^~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMBOL'
     158 | #define EXPORT_SYMBOL(sym)  _EXPORT_SYMBOL(sym, "")
         |                             ^~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1373:1: note: in expansion of macro 'EXPORT_SYMBOL'
    1373 | EXPORT_SYMBOL(register_sysctl);
         | ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1368:26: note: previous definition of 'register_sysctl' was here
    1368 | struct ctl_table_header *register_sysctl(const char *path, struct ctl_table *table)
         |                          ^~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/sysctl.h:25,
                    from fs/proc/proc_sysctl.c:6:
   include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMBOL'
     158 | #define EXPORT_SYMBOL(sym)  _EXPORT_SYMBOL(sym, "")
         |                             ^~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1373:1: note: in expansion of macro 'EXPORT_SYMBOL'
    1373 | EXPORT_SYMBOL(register_sysctl);
         | ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1375:14: error: invalid storage class for function 'append_path'
    1375 | static char *append_path(const char *path, char *pos, const char *name)
         |              ^~~~~~~~~~~
   fs/proc/proc_sysctl.c:1388:12: error: invalid storage class for function 'count_subheaders'
    1388 | static int count_subheaders(struct ctl_table *table)
         |            ^~~~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1407:12: error: invalid storage class for function 'register_leaf_sysctl_tables'
    1407 | static int register_leaf_sysctl_tables(const char *path, char *pos,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/sysctl.h:25,
                    from fs/proc/proc_sysctl.c:6:
   fs/proc/proc_sysctl.c:1569:15: error: non-static declaration of 'register_sysctl_paths' follows static declaration
    1569 | EXPORT_SYMBOL(register_sysctl_paths);
         |               ^~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:158:29: note: in expansion of macro '_EXPORT_SYMBOL'
     158 | #define EXPORT_SYMBOL(sym)  _EXPORT_SYMBOL(sym, "")
         |                             ^~~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1569:1: note: in expansion of macro 'EXPORT_SYMBOL'
    1569 | EXPORT_SYMBOL(register_sysctl_paths);
         | ^~~~~~~~~~~~~
   fs/proc/proc_sysctl.c:1563:26: note: previous definition of 'register_sysctl_paths' was here
    1563 | struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
--
   kernel/bpf/cgroup.c: In function '__cgroup_bpf_run_filter_sysctl':
>> kernel/bpf/cgroup.c:1173:64: error: 'pos' undeclared (first use in this function); did you mean 'ppos'?
    1173 |  if (table->proc_handler(table, 0, ctx.cur_val, &ctx.cur_len, &pos)) {
         |                                                                ^~~
         |                                                                ppos
   kernel/bpf/cgroup.c:1173:64: note: each undeclared identifier is reported only once for each function it appears in

vim +/proc_sys_read +602 fs/proc/proc_sysctl.c

77b14db502cb85 Eric W. Biederman 2007-02-14  601  
7708bfb1c855f2 Pavel Emelyanov   2008-04-29 @602  static ssize_t proc_sys_read(struct file *filp, char __user *buf,
77b14db502cb85 Eric W. Biederman 2007-02-14  603  				size_t count, loff_t *ppos)
77b14db502cb85 Eric W. Biederman 2007-02-14  604  {
7708bfb1c855f2 Pavel Emelyanov   2008-04-29  605  	return proc_sys_call_handler(filp, (void __user *)buf, count, ppos, 0);
7708bfb1c855f2 Pavel Emelyanov   2008-04-29  606  }
77b14db502cb85 Eric W. Biederman 2007-02-14  607  
7708bfb1c855f2 Pavel Emelyanov   2008-04-29 @608  static ssize_t proc_sys_write(struct file *filp, const char __user *buf,
7708bfb1c855f2 Pavel Emelyanov   2008-04-29  609  				size_t count, loff_t *ppos)
7708bfb1c855f2 Pavel Emelyanov   2008-04-29  610  {
7708bfb1c855f2 Pavel Emelyanov   2008-04-29  611  	return proc_sys_call_handler(filp, (void __user *)buf, count, ppos, 1);
77b14db502cb85 Eric W. Biederman 2007-02-14  612  }
77b14db502cb85 Eric W. Biederman 2007-02-14  613  
f1ecf06854a66e Lucas De Marchi   2011-11-02 @614  static int proc_sys_open(struct inode *inode, struct file *filp)
f1ecf06854a66e Lucas De Marchi   2011-11-02  615  {
4e474a00d7ff74 Lucas De Marchi   2012-03-22  616  	struct ctl_table_header *head = grab_header(inode);
f1ecf06854a66e Lucas De Marchi   2011-11-02  617  	struct ctl_table *table = PROC_I(inode)->sysctl_entry;
f1ecf06854a66e Lucas De Marchi   2011-11-02  618  
4e474a00d7ff74 Lucas De Marchi   2012-03-22  619  	/* sysctl was unregistered */
4e474a00d7ff74 Lucas De Marchi   2012-03-22  620  	if (IS_ERR(head))
4e474a00d7ff74 Lucas De Marchi   2012-03-22  621  		return PTR_ERR(head);
4e474a00d7ff74 Lucas De Marchi   2012-03-22  622  
f1ecf06854a66e Lucas De Marchi   2011-11-02  623  	if (table->poll)
f1ecf06854a66e Lucas De Marchi   2011-11-02  624  		filp->private_data = proc_sys_poll_event(table->poll);
f1ecf06854a66e Lucas De Marchi   2011-11-02  625  
4e474a00d7ff74 Lucas De Marchi   2012-03-22  626  	sysctl_head_finish(head);
4e474a00d7ff74 Lucas De Marchi   2012-03-22  627  
f1ecf06854a66e Lucas De Marchi   2011-11-02  628  	return 0;
f1ecf06854a66e Lucas De Marchi   2011-11-02  629  }
f1ecf06854a66e Lucas De Marchi   2011-11-02  630  
076ccb76e1a6cf Al Viro           2017-07-03 @631  static __poll_t proc_sys_poll(struct file *filp, poll_table *wait)
f1ecf06854a66e Lucas De Marchi   2011-11-02  632  {
496ad9aa8ef448 Al Viro           2013-01-23  633  	struct inode *inode = file_inode(filp);
4e474a00d7ff74 Lucas De Marchi   2012-03-22  634  	struct ctl_table_header *head = grab_header(inode);
f1ecf06854a66e Lucas De Marchi   2011-11-02  635  	struct ctl_table *table = PROC_I(inode)->sysctl_entry;
076ccb76e1a6cf Al Viro           2017-07-03  636  	__poll_t ret = DEFAULT_POLLMASK;
4e474a00d7ff74 Lucas De Marchi   2012-03-22  637  	unsigned long event;
4e474a00d7ff74 Lucas De Marchi   2012-03-22  638  
4e474a00d7ff74 Lucas De Marchi   2012-03-22  639  	/* sysctl was unregistered */
4e474a00d7ff74 Lucas De Marchi   2012-03-22  640  	if (IS_ERR(head))
a9a08845e9acbd Linus Torvalds    2018-02-11  641  		return EPOLLERR | EPOLLHUP;
f1ecf06854a66e Lucas De Marchi   2011-11-02  642  
f1ecf06854a66e Lucas De Marchi   2011-11-02  643  	if (!table->proc_handler)
f1ecf06854a66e Lucas De Marchi   2011-11-02  644  		goto out;
f1ecf06854a66e Lucas De Marchi   2011-11-02  645  
f1ecf06854a66e Lucas De Marchi   2011-11-02  646  	if (!table->poll)
f1ecf06854a66e Lucas De Marchi   2011-11-02  647  		goto out;
f1ecf06854a66e Lucas De Marchi   2011-11-02  648  
4e474a00d7ff74 Lucas De Marchi   2012-03-22  649  	event = (unsigned long)filp->private_data;
f1ecf06854a66e Lucas De Marchi   2011-11-02  650  	poll_wait(filp, &table->poll->wait, wait);
f1ecf06854a66e Lucas De Marchi   2011-11-02  651  
f1ecf06854a66e Lucas De Marchi   2011-11-02  652  	if (event != atomic_read(&table->poll->event)) {
f1ecf06854a66e Lucas De Marchi   2011-11-02  653  		filp->private_data = proc_sys_poll_event(table->poll);
a9a08845e9acbd Linus Torvalds    2018-02-11  654  		ret = EPOLLIN | EPOLLRDNORM | EPOLLERR | EPOLLPRI;
f1ecf06854a66e Lucas De Marchi   2011-11-02  655  	}
f1ecf06854a66e Lucas De Marchi   2011-11-02  656  
f1ecf06854a66e Lucas De Marchi   2011-11-02  657  out:
4e474a00d7ff74 Lucas De Marchi   2012-03-22  658  	sysctl_head_finish(head);
4e474a00d7ff74 Lucas De Marchi   2012-03-22  659  
f1ecf06854a66e Lucas De Marchi   2011-11-02  660  	return ret;
f1ecf06854a66e Lucas De Marchi   2011-11-02  661  }
77b14db502cb85 Eric W. Biederman 2007-02-14  662  
f0c3b5093addc8 Al Viro           2013-05-16 @663  static bool proc_sys_fill_cache(struct file *file,
f0c3b5093addc8 Al Viro           2013-05-16  664  				struct dir_context *ctx,
9043476f726802 Al Viro           2008-07-15  665  				struct ctl_table_header *head,
9043476f726802 Al Viro           2008-07-15  666  				struct ctl_table *table)
77b14db502cb85 Eric W. Biederman 2007-02-14  667  {
f0c3b5093addc8 Al Viro           2013-05-16  668  	struct dentry *child, *dir = file->f_path.dentry;
77b14db502cb85 Eric W. Biederman 2007-02-14  669  	struct inode *inode;
77b14db502cb85 Eric W. Biederman 2007-02-14  670  	struct qstr qname;
77b14db502cb85 Eric W. Biederman 2007-02-14  671  	ino_t ino = 0;
77b14db502cb85 Eric W. Biederman 2007-02-14  672  	unsigned type = DT_UNKNOWN;
77b14db502cb85 Eric W. Biederman 2007-02-14  673  
77b14db502cb85 Eric W. Biederman 2007-02-14  674  	qname.name = table->procname;
77b14db502cb85 Eric W. Biederman 2007-02-14  675  	qname.len  = strlen(table->procname);
8387ff2577eb9e Linus Torvalds    2016-06-10  676  	qname.hash = full_name_hash(dir, qname.name, qname.len);
77b14db502cb85 Eric W. Biederman 2007-02-14  677  
77b14db502cb85 Eric W. Biederman 2007-02-14  678  	child = d_lookup(dir, &qname);
77b14db502cb85 Eric W. Biederman 2007-02-14  679  	if (!child) {
76aab3ab61f305 Al Viro           2016-04-20  680  		DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
76aab3ab61f305 Al Viro           2016-04-20  681  		child = d_alloc_parallel(dir, &qname, &wq);
76aab3ab61f305 Al Viro           2016-04-20  682  		if (IS_ERR(child))
76aab3ab61f305 Al Viro           2016-04-20  683  			return false;
76aab3ab61f305 Al Viro           2016-04-20  684  		if (d_in_lookup(child)) {
888e2b03ef5669 Al Viro           2018-05-03  685  			struct dentry *res;
9043476f726802 Al Viro           2008-07-15  686  			inode = proc_sys_make_inode(dir->d_sb, head, table);
ea5751ccd665a2 Ivan Delalande    2018-12-13  687  			if (IS_ERR(inode)) {
76aab3ab61f305 Al Viro           2016-04-20  688  				d_lookup_done(child);
9043476f726802 Al Viro           2008-07-15  689  				dput(child);
f0c3b5093addc8 Al Viro           2013-05-16  690  				return false;
76aab3ab61f305 Al Viro           2016-04-20  691  			}
fb045adb99d9b7 Nick Piggin       2011-01-07  692  			d_set_d_op(child, &proc_sys_dentry_operations);
888e2b03ef5669 Al Viro           2018-05-03  693  			res = d_splice_alias(inode, child);
888e2b03ef5669 Al Viro           2018-05-03  694  			d_lookup_done(child);
888e2b03ef5669 Al Viro           2018-05-03  695  			if (unlikely(res)) {
888e2b03ef5669 Al Viro           2018-05-03  696  				if (IS_ERR(res)) {
888e2b03ef5669 Al Viro           2018-05-03  697  					dput(child);
888e2b03ef5669 Al Viro           2018-05-03  698  					return false;
888e2b03ef5669 Al Viro           2018-05-03  699  				}
888e2b03ef5669 Al Viro           2018-05-03  700  				dput(child);
888e2b03ef5669 Al Viro           2018-05-03  701  				child = res;
888e2b03ef5669 Al Viro           2018-05-03  702  			}
77b14db502cb85 Eric W. Biederman 2007-02-14  703  		}
77b14db502cb85 Eric W. Biederman 2007-02-14  704  	}
2b0143b5c986be David Howells     2015-03-17  705  	inode = d_inode(child);
77b14db502cb85 Eric W. Biederman 2007-02-14  706  	ino  = inode->i_ino;
77b14db502cb85 Eric W. Biederman 2007-02-14  707  	type = inode->i_mode >> 12;
77b14db502cb85 Eric W. Biederman 2007-02-14  708  	dput(child);
f0c3b5093addc8 Al Viro           2013-05-16  709  	return dir_emit(ctx, qname.name, qname.len, ino, type);
9043476f726802 Al Viro           2008-07-15  710  }
9043476f726802 Al Viro           2008-07-15  711  
f0c3b5093addc8 Al Viro           2013-05-16 @712  static bool proc_sys_link_fill_cache(struct file *file,
f0c3b5093addc8 Al Viro           2013-05-16  713  				    struct dir_context *ctx,
0e47c99d7fe25e Eric W. Biederman 2012-01-07  714  				    struct ctl_table_header *head,
0e47c99d7fe25e Eric W. Biederman 2012-01-07  715  				    struct ctl_table *table)
0e47c99d7fe25e Eric W. Biederman 2012-01-07  716  {
f0c3b5093addc8 Al Viro           2013-05-16  717  	bool ret = true;
a0b0d1c345d031 Danilo Krummrich  2018-04-10  718  
0e47c99d7fe25e Eric W. Biederman 2012-01-07  719  	head = sysctl_head_grab(head);
a0b0d1c345d031 Danilo Krummrich  2018-04-10  720  	if (IS_ERR(head))
a0b0d1c345d031 Danilo Krummrich  2018-04-10  721  		return false;
0e47c99d7fe25e Eric W. Biederman 2012-01-07  722  
0e47c99d7fe25e Eric W. Biederman 2012-01-07  723  	/* It is not an error if we can not follow the link ignore it */
835b94e05c92e6 Danilo Krummrich  2018-04-10  724  	if (sysctl_follow_link(&head, &table))
0e47c99d7fe25e Eric W. Biederman 2012-01-07  725  		goto out;
0e47c99d7fe25e Eric W. Biederman 2012-01-07  726  
f0c3b5093addc8 Al Viro           2013-05-16  727  	ret = proc_sys_fill_cache(file, ctx, head, table);
0e47c99d7fe25e Eric W. Biederman 2012-01-07  728  out:
0e47c99d7fe25e Eric W. Biederman 2012-01-07  729  	sysctl_head_finish(head);
0e47c99d7fe25e Eric W. Biederman 2012-01-07  730  	return ret;
0e47c99d7fe25e Eric W. Biederman 2012-01-07  731  }
0e47c99d7fe25e Eric W. Biederman 2012-01-07  732  
e5eea0981a3840 Joe Perches       2014-08-08 @733  static int scan(struct ctl_table_header *head, struct ctl_table *table,
9043476f726802 Al Viro           2008-07-15  734  		unsigned long *pos, struct file *file,
f0c3b5093addc8 Al Viro           2013-05-16  735  		struct dir_context *ctx)
9043476f726802 Al Viro           2008-07-15  736  {
f0c3b5093addc8 Al Viro           2013-05-16  737  	bool res;
9043476f726802 Al Viro           2008-07-15  738  
f0c3b5093addc8 Al Viro           2013-05-16  739  	if ((*pos)++ < ctx->pos)
f0c3b5093addc8 Al Viro           2013-05-16  740  		return true;
9043476f726802 Al Viro           2008-07-15  741  
0e47c99d7fe25e Eric W. Biederman 2012-01-07  742  	if (unlikely(S_ISLNK(table->mode)))
f0c3b5093addc8 Al Viro           2013-05-16  743  		res = proc_sys_link_fill_cache(file, ctx, head, table);
0e47c99d7fe25e Eric W. Biederman 2012-01-07  744  	else
f0c3b5093addc8 Al Viro           2013-05-16  745  		res = proc_sys_fill_cache(file, ctx, head, table);
9043476f726802 Al Viro           2008-07-15  746  
f0c3b5093addc8 Al Viro           2013-05-16  747  	if (res)
f0c3b5093addc8 Al Viro           2013-05-16  748  		ctx->pos = *pos;
6a75ce167c53b4 Eric W. Biederman 2012-01-18  749  
6a75ce167c53b4 Eric W. Biederman 2012-01-18  750  	return res;
77b14db502cb85 Eric W. Biederman 2007-02-14  751  }
77b14db502cb85 Eric W. Biederman 2007-02-14  752  
f0c3b5093addc8 Al Viro           2013-05-16 @753  static int proc_sys_readdir(struct file *file, struct dir_context *ctx)
77b14db502cb85 Eric W. Biederman 2007-02-14  754  {
f0c3b5093addc8 Al Viro           2013-05-16  755  	struct ctl_table_header *head = grab_header(file_inode(file));
9043476f726802 Al Viro           2008-07-15  756  	struct ctl_table_header *h = NULL;
6a75ce167c53b4 Eric W. Biederman 2012-01-18  757  	struct ctl_table *entry;
7ec66d06362da7 Eric W. Biederman 2011-12-29  758  	struct ctl_dir *ctl_dir;
77b14db502cb85 Eric W. Biederman 2007-02-14  759  	unsigned long pos;
77b14db502cb85 Eric W. Biederman 2007-02-14  760  
9043476f726802 Al Viro           2008-07-15  761  	if (IS_ERR(head))
9043476f726802 Al Viro           2008-07-15  762  		return PTR_ERR(head);
9043476f726802 Al Viro           2008-07-15  763  
7ec66d06362da7 Eric W. Biederman 2011-12-29  764  	ctl_dir = container_of(head, struct ctl_dir, header);
77b14db502cb85 Eric W. Biederman 2007-02-14  765  
f0c3b5093addc8 Al Viro           2013-05-16  766  	if (!dir_emit_dots(file, ctx))
93362fa47fe98b Zhou Chengming    2017-01-06  767  		goto out;
f0c3b5093addc8 Al Viro           2013-05-16  768  
77b14db502cb85 Eric W. Biederman 2007-02-14  769  	pos = 2;
77b14db502cb85 Eric W. Biederman 2007-02-14  770  
7ec66d06362da7 Eric W. Biederman 2011-12-29  771  	for (first_entry(ctl_dir, &h, &entry); h; next_entry(&h, &entry)) {
f0c3b5093addc8 Al Viro           2013-05-16  772  		if (!scan(h, entry, &pos, file, ctx)) {
9043476f726802 Al Viro           2008-07-15  773  			sysctl_head_finish(h);
9043476f726802 Al Viro           2008-07-15  774  			break;
77b14db502cb85 Eric W. Biederman 2007-02-14  775  		}
77b14db502cb85 Eric W. Biederman 2007-02-14  776  	}
93362fa47fe98b Zhou Chengming    2017-01-06  777  out:
77b14db502cb85 Eric W. Biederman 2007-02-14  778  	sysctl_head_finish(head);
f0c3b5093addc8 Al Viro           2013-05-16  779  	return 0;
77b14db502cb85 Eric W. Biederman 2007-02-14  780  }
77b14db502cb85 Eric W. Biederman 2007-02-14  781  
10556cb21a0d0b Al Viro           2011-06-20 @782  static int proc_sys_permission(struct inode *inode, int mask)
77b14db502cb85 Eric W. Biederman 2007-02-14  783  {
77b14db502cb85 Eric W. Biederman 2007-02-14  784  	/*
77b14db502cb85 Eric W. Biederman 2007-02-14  785  	 * sysctl entries that are not writeable,
77b14db502cb85 Eric W. Biederman 2007-02-14  786  	 * are _NOT_ writeable, capabilities or not.
77b14db502cb85 Eric W. Biederman 2007-02-14  787  	 */
f696a3659fc4b3 Miklos Szeredi    2008-07-31  788  	struct ctl_table_header *head;
f696a3659fc4b3 Miklos Szeredi    2008-07-31  789  	struct ctl_table *table;
77b14db502cb85 Eric W. Biederman 2007-02-14  790  	int error;
77b14db502cb85 Eric W. Biederman 2007-02-14  791  
f696a3659fc4b3 Miklos Szeredi    2008-07-31  792  	/* Executable files are not allowed under /proc/sys/ */
f696a3659fc4b3 Miklos Szeredi    2008-07-31  793  	if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))
f696a3659fc4b3 Miklos Szeredi    2008-07-31  794  		return -EACCES;
f696a3659fc4b3 Miklos Szeredi    2008-07-31  795  
f696a3659fc4b3 Miklos Szeredi    2008-07-31  796  	head = grab_header(inode);
9043476f726802 Al Viro           2008-07-15  797  	if (IS_ERR(head))
9043476f726802 Al Viro           2008-07-15  798  		return PTR_ERR(head);
77b14db502cb85 Eric W. Biederman 2007-02-14  799  
f696a3659fc4b3 Miklos Szeredi    2008-07-31  800  	table = PROC_I(inode)->sysctl_entry;
9043476f726802 Al Viro           2008-07-15  801  	if (!table) /* global root - r-xr-xr-x */
9043476f726802 Al Viro           2008-07-15  802  		error = mask & MAY_WRITE ? -EACCES : 0;
9043476f726802 Al Viro           2008-07-15  803  	else /* Use the permissions on the sysctl table entry */
73f7ef435934e9 Eric W. Biederman 2012-11-16  804  		error = sysctl_perm(head, table, mask & ~MAY_NOT_BLOCK);
9043476f726802 Al Viro           2008-07-15  805  
77b14db502cb85 Eric W. Biederman 2007-02-14  806  	sysctl_head_finish(head);
77b14db502cb85 Eric W. Biederman 2007-02-14  807  	return error;
77b14db502cb85 Eric W. Biederman 2007-02-14  808  }
77b14db502cb85 Eric W. Biederman 2007-02-14  809  

:::::: The code at line 602 was first introduced by commit
:::::: 7708bfb1c855f2a076ef71cc21647deea022ebe7 sysctl: merge equal proc_sys_read and proc_sys_write

:::::: TO: Pavel Emelyanov <xemul@openvz.org>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

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

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

only message in thread, other threads:[~2020-04-14  3:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-14  3:56 [hch-misc:set_fs-sysctl 6/6] fs/proc/proc_sysctl.c:602:16: error: invalid storage class for function 'proc_sys_read' 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.