tree:
git://git.infradead.org/users/hch/misc.git set_fs-sysctl
head: cf76b8900dbc76c4aa0a8aa58a636c132b866604
commit: cf76b8900dbc76c4aa0a8aa58a636c132b866604 [6/6] sysctl: pass kernel pointers to
->proc_handler
config: s390-randconfig-a001-20200414 (attached as .config)
compiler: s390-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 cf76b8900dbc76c4aa0a8aa58a636c132b866604
# save the attached .config to linux build tree
GCC_VERSION=9.3.0 make.cross ARCH=s390
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
fs/proc/proc_sysctl.c: In function 'proc_sys_call_handler':
> fs/proc/proc_sysctl.c:574:10: error: too few arguments to
function 'kzalloc'
574 | kbuf = kzalloc(count);
| ^~~~~~~
In file included from include/linux/security.h:29,
from fs/proc/proc_sysctl.c:10:
include/linux/slab.h:667:21: note: declared here
667 | static inline void *kzalloc(size_t size, gfp_t flags)
| ^~~~~~~
> 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, "")
--
In file included from include/linux/kernel.h:11,
from kernel/bpf/cgroup.c:8:
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)) {
| ^~~
include/linux/compiler.h:58:52: note: in definition of macro '__trace_if_var'
58 | #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) :
__trace_if_value(cond))
| ^~~~
> kernel/bpf/cgroup.c:1173:2: note: in expansion of macro
'if'
1173 | if (table->proc_handler(table, 0, ctx.cur_val,
&ctx.cur_len, &pos)) {
| ^~
kernel/bpf/cgroup.c:1173:64: note: each undeclared identifier is reported only once for
each function it appears in
1173 | if (table->proc_handler(table, 0, ctx.cur_val, &ctx.cur_len, &pos))
{
| ^~~
include/linux/compiler.h:58:52: note: in definition of macro '__trace_if_var'
58 | #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) :
__trace_if_value(cond))
| ^~~~
> kernel/bpf/cgroup.c:1173:2: note: in expansion of macro
'if'
1173 | if (table->proc_handler(table, 0, ctx.cur_val,
&ctx.cur_len, &pos)) {
| ^~
vim +/kzalloc +574 fs/proc/proc_sysctl.c
541
542 static ssize_t proc_sys_call_handler(struct file *filp, void __user *ubuf,
543 size_t count, loff_t *ppos, int write)
544 {
545 struct inode *inode = file_inode(filp);
546 struct ctl_table_header *head = grab_header(inode);
547 struct ctl_table *table = PROC_I(inode)->sysctl_entry;
548 void *kbuf;
549 ssize_t error;
550
551 if (IS_ERR(head))
552 return PTR_ERR(head);
553
554 /*
555 * At this point we know that the sysctl was not unregistered
556 * and won't be until we finish.
557 */
558 error = -EPERM;
559 if (sysctl_perm(head, table, write ? MAY_WRITE : MAY_READ))
560 goto out;
561
562 /* if that can happen at all, it should be -EINVAL, not -EISDIR */
563 error = -EINVAL;
564 if (!table->proc_handler)
565 goto out;
566
567 if (write) {
568 kbuf = memdup_user_nul(ubuf, count);
569 if (IS_ERR(kbuf)) {
570 error = PTR_ERR(kbuf);
571 goto out;
572 } else {
573 error = -ENOMEM;
574 kbuf = kzalloc(count);
575 if (!kbuf)
576 goto out;
577 }
578
579 error = BPF_CGROUP_RUN_PROG_SYSCTL(head, table, write, &kbuf, &count,
580 ppos);
581 if (error)
582 goto out_free_buf;
583
584 /* careful: calling conventions are nasty here */
585 error = table->proc_handler(table, write, kbuf, &count, ppos);
586 if (error)
587 goto out_free_buf;
588
589 error = -EFAULT;
590 if (copy_to_user(ubuf, kbuf, count))
591 goto out_free_buf;
592
593 error = count;
594 out_free_buf:
595 kfree(kbuf);
596 out:
597 sysctl_head_finish(head);
598
599 return error;
600 }
601
602 static ssize_t proc_sys_read(struct file *filp, char __user *buf,
603 size_t count, loff_t *ppos)
604 {
605 return proc_sys_call_handler(filp, (void __user *)buf, count, ppos, 0);
606 }
607
608 static ssize_t proc_sys_write(struct file *filp, const char
__user *buf,
609 size_t count, loff_t *ppos)
610 {
611 return proc_sys_call_handler(filp, (void __user *)buf, count, ppos, 1);
612 }
613
614 static int proc_sys_open(struct inode *inode, struct file *filp)
615 {
616 struct ctl_table_header *head = grab_header(inode);
617 struct ctl_table *table = PROC_I(inode)->sysctl_entry;
618
619 /* sysctl was unregistered */
620 if (IS_ERR(head))
621 return PTR_ERR(head);
622
623 if (table->poll)
624 filp->private_data = proc_sys_poll_event(table->poll);
625
626 sysctl_head_finish(head);
627
628 return 0;
629 }
630
631 static __poll_t proc_sys_poll(struct file *filp, poll_table
*wait)
632 {
633 struct inode *inode = file_inode(filp);
634 struct ctl_table_header *head = grab_header(inode);
635 struct ctl_table *table = PROC_I(inode)->sysctl_entry;
636 __poll_t ret = DEFAULT_POLLMASK;
637 unsigned long event;
638
639 /* sysctl was unregistered */
640 if (IS_ERR(head))
641 return EPOLLERR | EPOLLHUP;
642
643 if (!table->proc_handler)
644 goto out;
645
646 if (!table->poll)
647 goto out;
648
649 event = (unsigned long)filp->private_data;
650 poll_wait(filp, &table->poll->wait, wait);
651
652 if (event != atomic_read(&table->poll->event)) {
653 filp->private_data = proc_sys_poll_event(table->poll);
654 ret = EPOLLIN | EPOLLRDNORM | EPOLLERR | EPOLLPRI;
655 }
656
657 out:
658 sysctl_head_finish(head);
659
660 return ret;
661 }
662
663 static bool proc_sys_fill_cache(struct file *file,
664 struct dir_context *ctx,
665 struct ctl_table_header *head,
666 struct ctl_table *table)
667 {
668 struct dentry *child, *dir = file->f_path.dentry;
669 struct inode *inode;
670 struct qstr qname;
671 ino_t ino = 0;
672 unsigned type = DT_UNKNOWN;
673
674 qname.name = table->procname;
675 qname.len = strlen(table->procname);
676 qname.hash = full_name_hash(dir, qname.name, qname.len);
677
678 child = d_lookup(dir, &qname);
679 if (!child) {
680 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
681 child = d_alloc_parallel(dir, &qname, &wq);
682 if (IS_ERR(child))
683 return false;
684 if (d_in_lookup(child)) {
685 struct dentry *res;
686 inode = proc_sys_make_inode(dir->d_sb, head, table);
687 if (IS_ERR(inode)) {
688 d_lookup_done(child);
689 dput(child);
690 return false;
691 }
692 d_set_d_op(child, &proc_sys_dentry_operations);
693 res = d_splice_alias(inode, child);
694 d_lookup_done(child);
695 if (unlikely(res)) {
696 if (IS_ERR(res)) {
697 dput(child);
698 return false;
699 }
700 dput(child);
701 child = res;
702 }
703 }
704 }
705 inode = d_inode(child);
706 ino = inode->i_ino;
707 type = inode->i_mode >> 12;
708 dput(child);
709 return dir_emit(ctx, qname.name, qname.len, ino, type);
710 }
711
712 static bool proc_sys_link_fill_cache(struct file *file,
713 struct dir_context *ctx,
714 struct ctl_table_header *head,
715 struct ctl_table *table)
716 {
717 bool ret = true;
718
719 head = sysctl_head_grab(head);
720 if (IS_ERR(head))
721 return false;
722
723 /* It is not an error if we can not follow the link ignore it */
724 if (sysctl_follow_link(&head, &table))
725 goto out;
726
727 ret = proc_sys_fill_cache(file, ctx, head, table);
728 out:
729 sysctl_head_finish(head);
730 return ret;
731 }
732
733 static int scan(struct ctl_table_header *head, struct ctl_table
*table,
734 unsigned long *pos, struct file *file,
735 struct dir_context *ctx)
736 {
737 bool res;
738
739 if ((*pos)++ < ctx->pos)
740 return true;
741
742 if (unlikely(S_ISLNK(table->mode)))
743 res = proc_sys_link_fill_cache(file, ctx, head, table);
744 else
745 res = proc_sys_fill_cache(file, ctx, head, table);
746
747 if (res)
748 ctx->pos = *pos;
749
750 return res;
751 }
752
753 static int proc_sys_readdir(struct file *file, struct dir_context
*ctx)
754 {
755 struct ctl_table_header *head = grab_header(file_inode(file));
756 struct ctl_table_header *h = NULL;
757 struct ctl_table *entry;
758 struct ctl_dir *ctl_dir;
759 unsigned long pos;
760
761 if (IS_ERR(head))
762 return PTR_ERR(head);
763
764 ctl_dir = container_of(head, struct ctl_dir, header);
765
766 if (!dir_emit_dots(file, ctx))
767 goto out;
768
769 pos = 2;
770
771 for (first_entry(ctl_dir, &h, &entry); h; next_entry(&h, &entry))
{
772 if (!scan(h, entry, &pos, file, ctx)) {
773 sysctl_head_finish(h);
774 break;
775 }
776 }
777 out:
778 sysctl_head_finish(head);
779 return 0;
780 }
781
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org