lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Tue, 29 Mar 2022 06:36:08 +0800
From:   kernel test robot <lkp@...el.com>
To:     Stanislav Fomichev <sdf@...gle.com>, netdev@...r.kernel.org,
        bpf@...r.kernel.org
Cc:     llvm@...ts.linux.dev, kbuild-all@...ts.01.org, ast@...nel.org,
        daniel@...earbox.net, andrii@...nel.org,
        Stanislav Fomichev <sdf@...gle.com>
Subject: Re: [PATCH bpf-next 2/7] bpf: per-cgroup lsm flavor

Hi Stanislav,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Stanislav-Fomichev/bpf-cgroup_sock-lsm-flavor/20220329-021809
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: riscv-randconfig-r042-20220328 (https://download.01.org/0day-ci/archive/20220329/202203290637.4bOtec7I-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0f6d9501cf49ce02937099350d08f20c4af86f3d)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/cf70645346b1affcc956902a44671c1d0eaa451a
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Stanislav-Fomichev/bpf-cgroup_sock-lsm-flavor/20220329-021809
        git checkout cf70645346b1affcc956902a44671c1d0eaa451a
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash kernel/bpf/

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

All errors (new ones prefixed by >>):

   In file included from kernel/bpf/cgroup.c:10:
   In file included from include/linux/cgroup.h:26:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:11:
   In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/riscv/include/asm/io.h:136:
   include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __raw_readb(PCI_IOBASE + addr);
                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
   #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
                                                     ^
   In file included from kernel/bpf/cgroup.c:10:
   In file included from include/linux/cgroup.h:26:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:11:
   In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/riscv/include/asm/io.h:136:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
                                                     ^
   In file included from kernel/bpf/cgroup.c:10:
   In file included from include/linux/cgroup.h:26:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:11:
   In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/riscv/include/asm/io.h:136:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writeb(value, PCI_IOBASE + addr);
                               ~~~~~~~~~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:1024:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
                                                     ~~~~~~~~~~ ^
   In file included from kernel/bpf/cgroup.c:11:
   In file included from include/linux/filter.h:9:
   include/linux/bpf.h:878:2: error: void function 'bpf_trampoline_unlink_cgroup_shim' should not return a value [-Wreturn-type]
           return -EOPNOTSUPP;
           ^      ~~~~~~~~~~~
>> kernel/bpf/cgroup.c:499:12: error: use of undeclared identifier 'CGROUP_LSM_START'
                           atype = CGROUP_LSM_START + bpf_lsm_hook_idx(p->aux->attach_btf_id);
                                   ^
   7 warnings and 2 errors generated.


vim +/CGROUP_LSM_START +499 kernel/bpf/cgroup.c

   445	
   446	/**
   447	 * __cgroup_bpf_attach() - Attach the program or the link to a cgroup, and
   448	 *                         propagate the change to descendants
   449	 * @cgrp: The cgroup which descendants to traverse
   450	 * @prog: A program to attach
   451	 * @link: A link to attach
   452	 * @replace_prog: Previously attached program to replace if BPF_F_REPLACE is set
   453	 * @type: Type of attach operation
   454	 * @flags: Option flags
   455	 *
   456	 * Exactly one of @prog or @link can be non-null.
   457	 * Must be called with cgroup_mutex held.
   458	 */
   459	static int __cgroup_bpf_attach(struct cgroup *cgrp,
   460				       struct bpf_prog *prog, struct bpf_prog *replace_prog,
   461				       struct bpf_cgroup_link *link,
   462				       enum bpf_attach_type type, u32 flags)
   463	{
   464		u32 saved_flags = (flags & (BPF_F_ALLOW_OVERRIDE | BPF_F_ALLOW_MULTI));
   465		struct bpf_prog *old_prog = NULL;
   466		struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE] = {};
   467		struct bpf_cgroup_storage *new_storage[MAX_BPF_CGROUP_STORAGE_TYPE] = {};
   468		struct bpf_attach_target_info tgt_info = {};
   469		enum cgroup_bpf_attach_type atype;
   470		struct bpf_prog_list *pl;
   471		struct list_head *progs;
   472		int err;
   473	
   474		if (((flags & BPF_F_ALLOW_OVERRIDE) && (flags & BPF_F_ALLOW_MULTI)) ||
   475		    ((flags & BPF_F_REPLACE) && !(flags & BPF_F_ALLOW_MULTI)))
   476			/* invalid combination */
   477			return -EINVAL;
   478		if (link && (prog || replace_prog))
   479			/* only either link or prog/replace_prog can be specified */
   480			return -EINVAL;
   481		if (!!replace_prog != !!(flags & BPF_F_REPLACE))
   482			/* replace_prog implies BPF_F_REPLACE, and vice versa */
   483			return -EINVAL;
   484	
   485		if (type == BPF_LSM_CGROUP) {
   486			struct bpf_prog *p = prog ? : link->link.prog;
   487	
   488			if (replace_prog) {
   489				/* Reusing shim from the original program.
   490				 */
   491				atype = replace_prog->aux->cgroup_atype;
   492			} else {
   493				err = bpf_check_attach_target(NULL, p, NULL,
   494							      p->aux->attach_btf_id,
   495							      &tgt_info);
   496				if (err)
   497					return -EINVAL;
   498	
 > 499				atype = CGROUP_LSM_START + bpf_lsm_hook_idx(p->aux->attach_btf_id);
   500			}
   501	
   502			p->aux->cgroup_atype = atype;
   503		} else {
   504			atype = to_cgroup_bpf_attach_type(type);
   505			if (atype < 0)
   506				return -EINVAL;
   507		}
   508	
   509		progs = &cgrp->bpf.progs[atype];
   510	
   511		if (!hierarchy_allows_attach(cgrp, atype))
   512			return -EPERM;
   513	
   514		if (!list_empty(progs) && cgrp->bpf.flags[atype] != saved_flags)
   515			/* Disallow attaching non-overridable on top
   516			 * of existing overridable in this cgroup.
   517			 * Disallow attaching multi-prog if overridable or none
   518			 */
   519			return -EPERM;
   520	
   521		if (prog_list_length(progs) >= BPF_CGROUP_MAX_PROGS)
   522			return -E2BIG;
   523	
   524		pl = find_attach_entry(progs, prog, link, replace_prog,
   525				       flags & BPF_F_ALLOW_MULTI);
   526		if (IS_ERR(pl))
   527			return PTR_ERR(pl);
   528	
   529		if (bpf_cgroup_storages_alloc(storage, new_storage, type,
   530					      prog ? : link->link.prog, cgrp))
   531			return -ENOMEM;
   532	
   533		if (pl) {
   534			old_prog = pl->prog;
   535		} else {
   536			pl = kmalloc(sizeof(*pl), GFP_KERNEL);
   537			if (!pl) {
   538				bpf_cgroup_storages_free(new_storage);
   539				return -ENOMEM;
   540			}
   541			list_add_tail(&pl->node, progs);
   542		}
   543	
   544		pl->prog = prog;
   545		pl->link = link;
   546		bpf_cgroup_storages_assign(pl->storage, storage);
   547		cgrp->bpf.flags[atype] = saved_flags;
   548	
   549		err = update_effective_progs(cgrp, atype);
   550		if (err)
   551			goto cleanup;
   552	
   553		bpf_cgroup_storages_link(new_storage, cgrp, type);
   554	
   555		if (type == BPF_LSM_CGROUP && !old_prog) {
   556			struct bpf_prog *p = prog ? : link->link.prog;
   557			int err;
   558	
   559			err = bpf_trampoline_link_cgroup_shim(p, &tgt_info);
   560			if (err)
   561				goto cleanup_trampoline;
   562		}
   563	
   564		if (old_prog)
   565			bpf_prog_put(old_prog);
   566		else
   567			static_branch_inc(&cgroup_bpf_enabled_key[atype]);
   568	
   569		return 0;
   570	
   571	cleanup_trampoline:
   572		bpf_cgroup_storages_unlink(new_storage);
   573	
   574	cleanup:
   575		if (old_prog) {
   576			pl->prog = old_prog;
   577			pl->link = NULL;
   578		}
   579		bpf_cgroup_storages_free(new_storage);
   580		if (!old_prog) {
   581			list_del(&pl->node);
   582			kfree(pl);
   583		}
   584		return err;
   585	}
   586	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ