All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	"Gustavo A. R. Silva" <gustavo@embeddedor.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Kees Cook <keescook@chromium.org>
Subject: [gustavoars:for-next/cast-function 1/1] kernel/bpf/verifier.c:12470:16: warning: cast from 'unsigned int (*)(const void *, const struct bpf_insn *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long,...
Date: Thu, 30 Sep 2021 21:20:52 +0800	[thread overview]
Message-ID: <202109302140.3dPl9ABV-lkp@intel.com> (raw)

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git for-next/cast-function
head:   ffea83dd8823401f3922276d36aca35c3e99d7f3
commit: ffea83dd8823401f3922276d36aca35c3e99d7f3 [1/1] Makefile: Enable -Wcast-function-type
config: i386-randconfig-r016-20210930 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 28981015526f2192440c18f18e8a20cd11b0779c)
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
        # https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git/commit/?id=ffea83dd8823401f3922276d36aca35c3e99d7f3
        git remote add gustavoars https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git
        git fetch --no-tags gustavoars for-next/cast-function
        git checkout ffea83dd8823401f3922276d36aca35c3e99d7f3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=i386 

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

All warnings (new ones prefixed by >>):

>> kernel/bpf/verifier.c:12470:16: warning: cast from 'unsigned int (*)(const void *, const struct bpf_insn *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                           insn->imm = BPF_CAST_CALL(func[subprog]->bpf_func) -
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12951:17: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_lookup_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12955:17: warning: cast from 'int (*)(struct bpf_map *, void *, void *, u64)' (aka 'int (*)(struct bpf_map *, void *, void *, unsigned long long)') to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_update_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12959:17: warning: cast from 'int (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_delete_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12963:17: warning: cast from 'int (*)(struct bpf_map *, void *, u64)' (aka 'int (*)(struct bpf_map *, void *, unsigned long long)') to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_push_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/bpf/verifier.c:12967:17: warning: cast from 'int (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_pop_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/bpf/verifier.c:12971:17: warning: cast from 'int (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_peek_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12975:17: warning: cast from 'int (*)(struct bpf_map *, u32, u64)' (aka 'int (*)(struct bpf_map *, unsigned int, unsigned long long)') to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_redirect) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   8 warnings generated.
--
>> kernel/bpf/hashtab.c:671:26: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
           *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^
   include/linux/filter.h:374:14: note: expanded from macro 'BPF_EMIT_CALL'
                   .imm   = ((FUNC) - __bpf_call_base) })
                              ^~~~
   kernel/bpf/hashtab.c:712:26: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
           *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^
   include/linux/filter.h:374:14: note: expanded from macro 'BPF_EMIT_CALL'
                   .imm   = ((FUNC) - __bpf_call_base) })
                              ^~~~
   kernel/bpf/hashtab.c:2400:26: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
           *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^
   include/linux/filter.h:374:14: note: expanded from macro 'BPF_EMIT_CALL'
                   .imm   = ((FUNC) - __bpf_call_base) })
                              ^~~~
   3 warnings generated.
--
>> drivers/firewire/core-cdev.c:985:8: warning: cast from 'void (*)(struct fw_iso_context *, dma_addr_t, void *)' (aka 'void (*)(struct fw_iso_context *, unsigned int, void *)') to 'fw_iso_callback_t' (aka 'void (*)(struct fw_iso_context *, unsigned int, unsigned int, void *, void *)') converts to incompatible function type [-Wcast-function-type]
                   cb = (fw_iso_callback_t)iso_mc_callback;
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning generated.


vim +12470 kernel/bpf/verifier.c

9bac3d6d548e5c Alexei Starovoitov 2015-03-13  12337  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12338  static int jit_subprogs(struct bpf_verifier_env *env)
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12339  {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12340  	struct bpf_prog *prog = env->prog, **func, *tmp;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12341  	int i, j, subprog_start, subprog_end = 0, len, subprog;
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12342  	struct bpf_map *map_ptr;
7105e828c087de Daniel Borkmann    2017-12-20  12343  	struct bpf_insn *insn;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12344  	void *old_bpf_func;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12345  	int err, num_exentries;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12346  
f910cefa32b6cd Jiong Wang         2018-05-02  12347  	if (env->subprog_cnt <= 1)
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12348  		return 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12349  
7105e828c087de Daniel Borkmann    2017-12-20  12350  	for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
69c087ba6225b5 Yonghong Song      2021-02-26  12351  		if (bpf_pseudo_func(insn)) {
69c087ba6225b5 Yonghong Song      2021-02-26  12352  			env->insn_aux_data[i].call_imm = insn->imm;
69c087ba6225b5 Yonghong Song      2021-02-26  12353  			/* subprog is encoded in insn[1].imm */
69c087ba6225b5 Yonghong Song      2021-02-26  12354  			continue;
69c087ba6225b5 Yonghong Song      2021-02-26  12355  		}
69c087ba6225b5 Yonghong Song      2021-02-26  12356  
23a2d70c7a2f28 Yonghong Song      2021-02-04  12357  		if (!bpf_pseudo_call(insn))
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12358  			continue;
c7a897843224a9 Daniel Borkmann    2018-07-12  12359  		/* Upon error here we cannot fall back to interpreter but
c7a897843224a9 Daniel Borkmann    2018-07-12  12360  		 * need a hard reject of the program. Thus -EFAULT is
c7a897843224a9 Daniel Borkmann    2018-07-12  12361  		 * propagated in any case.
c7a897843224a9 Daniel Borkmann    2018-07-12  12362  		 */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12363  		subprog = find_subprog(env, i + insn->imm + 1);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12364  		if (subprog < 0) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12365  			WARN_ONCE(1, "verifier bug. No program starts at insn %d\n",
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12366  				  i + insn->imm + 1);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12367  			return -EFAULT;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12368  		}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12369  		/* temporarily remember subprog id inside insn instead of
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12370  		 * aux_data, since next loop will split up all insns into funcs
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12371  		 */
f910cefa32b6cd Jiong Wang         2018-05-02  12372  		insn->off = subprog;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12373  		/* remember original imm in case JIT fails and fallback
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12374  		 * to interpreter will be needed
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12375  		 */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12376  		env->insn_aux_data[i].call_imm = insn->imm;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12377  		/* point imm to __bpf_call_base+1 from JITs point of view */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12378  		insn->imm = 1;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12379  	}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12380  
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12381  	err = bpf_prog_alloc_jited_linfo(prog);
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12382  	if (err)
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12383  		goto out_undo_insn;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12384  
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12385  	err = -ENOMEM;
6396bb221514d2 Kees Cook          2018-06-12  12386  	func = kcalloc(env->subprog_cnt, sizeof(prog), GFP_KERNEL);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12387  	if (!func)
c7a897843224a9 Daniel Borkmann    2018-07-12  12388  		goto out_undo_insn;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12389  
f910cefa32b6cd Jiong Wang         2018-05-02  12390  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12391  		subprog_start = subprog_end;
9c8105bd440223 Jiong Wang         2018-05-02  12392  		subprog_end = env->subprog_info[i + 1].start;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12393  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12394  		len = subprog_end - subprog_start;
fb7dd8bca0139f Andrii Nakryiko    2021-08-15  12395  		/* bpf_prog_run() doesn't call subprogs directly,
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12396  		 * hence main prog stats include the runtime of subprogs.
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12397  		 * subprogs don't have IDs and not reachable via prog_get_next_id
700d4796ef59f5 Alexei Starovoitov 2021-02-09  12398  		 * func[i]->stats will never be accessed and stays NULL
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12399  		 */
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12400  		func[i] = bpf_prog_alloc_no_stats(bpf_prog_size(len), GFP_USER);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12401  		if (!func[i])
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12402  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12403  		memcpy(func[i]->insnsi, &prog->insnsi[subprog_start],
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12404  		       len * sizeof(struct bpf_insn));
4f74d80971bce9 Daniel Borkmann    2017-12-20  12405  		func[i]->type = prog->type;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12406  		func[i]->len = len;
4f74d80971bce9 Daniel Borkmann    2017-12-20  12407  		if (bpf_prog_calc_tag(func[i]))
4f74d80971bce9 Daniel Borkmann    2017-12-20  12408  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12409  		func[i]->is_func = 1;
ba64e7d8525236 Yonghong Song      2018-11-24  12410  		func[i]->aux->func_idx = i;
f263a81451c12d John Fastabend     2021-07-07  12411  		/* Below members will be freed only at prog->aux */
ba64e7d8525236 Yonghong Song      2018-11-24  12412  		func[i]->aux->btf = prog->aux->btf;
ba64e7d8525236 Yonghong Song      2018-11-24  12413  		func[i]->aux->func_info = prog->aux->func_info;
f263a81451c12d John Fastabend     2021-07-07  12414  		func[i]->aux->poke_tab = prog->aux->poke_tab;
f263a81451c12d John Fastabend     2021-07-07  12415  		func[i]->aux->size_poke_tab = prog->aux->size_poke_tab;
ba64e7d8525236 Yonghong Song      2018-11-24  12416  
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12417  		for (j = 0; j < prog->aux->size_poke_tab; j++) {
f263a81451c12d John Fastabend     2021-07-07  12418  			struct bpf_jit_poke_descriptor *poke;
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12419  
f263a81451c12d John Fastabend     2021-07-07  12420  			poke = &prog->aux->poke_tab[j];
f263a81451c12d John Fastabend     2021-07-07  12421  			if (poke->insn_idx < subprog_end &&
f263a81451c12d John Fastabend     2021-07-07  12422  			    poke->insn_idx >= subprog_start)
f263a81451c12d John Fastabend     2021-07-07  12423  				poke->aux = func[i]->aux;
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12424  		}
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12425  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12426  		/* Use bpf_prog_F_tag to indicate functions in stack traces.
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12427  		 * Long term would need debug info to populate names
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12428  		 */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12429  		func[i]->aux->name[0] = 'F';
9c8105bd440223 Jiong Wang         2018-05-02  12430  		func[i]->aux->stack_depth = env->subprog_info[i].stack_depth;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12431  		func[i]->jit_requested = 1;
e6ac2450d6dee3 Martin KaFai Lau   2021-03-24  12432  		func[i]->aux->kfunc_tab = prog->aux->kfunc_tab;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12433  		func[i]->aux->linfo = prog->aux->linfo;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12434  		func[i]->aux->nr_linfo = prog->aux->nr_linfo;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12435  		func[i]->aux->jited_linfo = prog->aux->jited_linfo;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12436  		func[i]->aux->linfo_idx = env->subprog_info[i].linfo_idx;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12437  		num_exentries = 0;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12438  		insn = func[i]->insnsi;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12439  		for (j = 0; j < func[i]->len; j++, insn++) {
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12440  			if (BPF_CLASS(insn->code) == BPF_LDX &&
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12441  			    BPF_MODE(insn->code) == BPF_PROBE_MEM)
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12442  				num_exentries++;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12443  		}
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12444  		func[i]->aux->num_exentries = num_exentries;
ebf7d1f508a738 Maciej Fijalkowski 2020-09-16  12445  		func[i]->aux->tail_call_reachable = env->subprog_info[i].tail_call_reachable;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12446  		func[i] = bpf_int_jit_compile(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12447  		if (!func[i]->jited) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12448  			err = -ENOTSUPP;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12449  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12450  		}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12451  		cond_resched();
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12452  	}
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12453  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12454  	/* at this point all bpf functions were successfully JITed
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12455  	 * now populate all bpf_calls with correct addresses and
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12456  	 * run last pass of JIT
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12457  	 */
f910cefa32b6cd Jiong Wang         2018-05-02  12458  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12459  		insn = func[i]->insnsi;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12460  		for (j = 0; j < func[i]->len; j++, insn++) {
69c087ba6225b5 Yonghong Song      2021-02-26  12461  			if (bpf_pseudo_func(insn)) {
69c087ba6225b5 Yonghong Song      2021-02-26  12462  				subprog = insn[1].imm;
69c087ba6225b5 Yonghong Song      2021-02-26  12463  				insn[0].imm = (u32)(long)func[subprog]->bpf_func;
69c087ba6225b5 Yonghong Song      2021-02-26  12464  				insn[1].imm = ((u64)(long)func[subprog]->bpf_func) >> 32;
69c087ba6225b5 Yonghong Song      2021-02-26  12465  				continue;
69c087ba6225b5 Yonghong Song      2021-02-26  12466  			}
23a2d70c7a2f28 Yonghong Song      2021-02-04  12467  			if (!bpf_pseudo_call(insn))
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12468  				continue;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12469  			subprog = insn->off;
0d306c31b2f773 Prashant Bhole     2019-04-16 @12470  			insn->imm = BPF_CAST_CALL(func[subprog]->bpf_func) -
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12471  				    __bpf_call_base;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12472  		}
2162fed49fa86c Sandipan Das       2018-05-24  12473  
2162fed49fa86c Sandipan Das       2018-05-24  12474  		/* we use the aux data to keep a list of the start addresses
2162fed49fa86c Sandipan Das       2018-05-24  12475  		 * of the JITed images for each function in the program
2162fed49fa86c Sandipan Das       2018-05-24  12476  		 *
2162fed49fa86c Sandipan Das       2018-05-24  12477  		 * for some architectures, such as powerpc64, the imm field
2162fed49fa86c Sandipan Das       2018-05-24  12478  		 * might not be large enough to hold the offset of the start
2162fed49fa86c Sandipan Das       2018-05-24  12479  		 * address of the callee's JITed image from __bpf_call_base
2162fed49fa86c Sandipan Das       2018-05-24  12480  		 *
2162fed49fa86c Sandipan Das       2018-05-24  12481  		 * in such cases, we can lookup the start address of a callee
2162fed49fa86c Sandipan Das       2018-05-24  12482  		 * by using its subprog id, available from the off field of
2162fed49fa86c Sandipan Das       2018-05-24  12483  		 * the call instruction, as an index for this list
2162fed49fa86c Sandipan Das       2018-05-24  12484  		 */
2162fed49fa86c Sandipan Das       2018-05-24  12485  		func[i]->aux->func = func;
2162fed49fa86c Sandipan Das       2018-05-24  12486  		func[i]->aux->func_cnt = env->subprog_cnt;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12487  	}
f910cefa32b6cd Jiong Wang         2018-05-02  12488  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12489  		old_bpf_func = func[i]->bpf_func;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12490  		tmp = bpf_int_jit_compile(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12491  		if (tmp != func[i] || func[i]->bpf_func != old_bpf_func) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12492  			verbose(env, "JIT doesn't support bpf-to-bpf calls\n");
c7a897843224a9 Daniel Borkmann    2018-07-12  12493  			err = -ENOTSUPP;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12494  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12495  		}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12496  		cond_resched();
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12497  	}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12498  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12499  	/* finally lock prog and jit images for all functions and
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12500  	 * populate kallsysm
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12501  	 */
f910cefa32b6cd Jiong Wang         2018-05-02  12502  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12503  		bpf_prog_lock_ro(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12504  		bpf_prog_kallsyms_add(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12505  	}
7105e828c087de Daniel Borkmann    2017-12-20  12506  
7105e828c087de Daniel Borkmann    2017-12-20  12507  	/* Last step: make now unused interpreter insns from main
7105e828c087de Daniel Borkmann    2017-12-20  12508  	 * prog consistent for later dump requests, so they can
7105e828c087de Daniel Borkmann    2017-12-20  12509  	 * later look the same as if they were interpreted only.
7105e828c087de Daniel Borkmann    2017-12-20  12510  	 */
7105e828c087de Daniel Borkmann    2017-12-20  12511  	for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
69c087ba6225b5 Yonghong Song      2021-02-26  12512  		if (bpf_pseudo_func(insn)) {
69c087ba6225b5 Yonghong Song      2021-02-26  12513  			insn[0].imm = env->insn_aux_data[i].call_imm;
69c087ba6225b5 Yonghong Song      2021-02-26  12514  			insn[1].imm = find_subprog(env, i + insn[0].imm + 1);
69c087ba6225b5 Yonghong Song      2021-02-26  12515  			continue;
69c087ba6225b5 Yonghong Song      2021-02-26  12516  		}
23a2d70c7a2f28 Yonghong Song      2021-02-04  12517  		if (!bpf_pseudo_call(insn))
7105e828c087de Daniel Borkmann    2017-12-20  12518  			continue;
7105e828c087de Daniel Borkmann    2017-12-20  12519  		insn->off = env->insn_aux_data[i].call_imm;
7105e828c087de Daniel Borkmann    2017-12-20  12520  		subprog = find_subprog(env, i + insn->off + 1);
dbecd7388476ae Sandipan Das       2018-05-24  12521  		insn->imm = subprog;
7105e828c087de Daniel Borkmann    2017-12-20  12522  	}
7105e828c087de Daniel Borkmann    2017-12-20  12523  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12524  	prog->jited = 1;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12525  	prog->bpf_func = func[0]->bpf_func;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12526  	prog->aux->func = func;
f910cefa32b6cd Jiong Wang         2018-05-02  12527  	prog->aux->func_cnt = env->subprog_cnt;
e16301fbe1837c Martin KaFai Lau   2021-03-24  12528  	bpf_prog_jit_attempt_done(prog);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12529  	return 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12530  out_free:
f263a81451c12d John Fastabend     2021-07-07  12531  	/* We failed JIT'ing, so at this point we need to unregister poke
f263a81451c12d John Fastabend     2021-07-07  12532  	 * descriptors from subprogs, so that kernel is not attempting to
f263a81451c12d John Fastabend     2021-07-07  12533  	 * patch it anymore as we're freeing the subprog JIT memory.
f263a81451c12d John Fastabend     2021-07-07  12534  	 */
f263a81451c12d John Fastabend     2021-07-07  12535  	for (i = 0; i < prog->aux->size_poke_tab; i++) {
f263a81451c12d John Fastabend     2021-07-07  12536  		map_ptr = prog->aux->poke_tab[i].tail_call.map;
f263a81451c12d John Fastabend     2021-07-07  12537  		map_ptr->ops->map_poke_untrack(map_ptr, prog->aux);
f263a81451c12d John Fastabend     2021-07-07  12538  	}
f263a81451c12d John Fastabend     2021-07-07  12539  	/* At this point we're guaranteed that poke descriptors are not
f263a81451c12d John Fastabend     2021-07-07  12540  	 * live anymore. We can just unlink its descriptor table as it's
f263a81451c12d John Fastabend     2021-07-07  12541  	 * released with the main prog.
f263a81451c12d John Fastabend     2021-07-07  12542  	 */
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12543  	for (i = 0; i < env->subprog_cnt; i++) {
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12544  		if (!func[i])
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12545  			continue;
f263a81451c12d John Fastabend     2021-07-07  12546  		func[i]->aux->poke_tab = NULL;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12547  		bpf_jit_free(func[i]);
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12548  	}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12549  	kfree(func);
c7a897843224a9 Daniel Borkmann    2018-07-12  12550  out_undo_insn:
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12551  	/* cleanup main prog to be interpreted */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12552  	prog->jit_requested = 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12553  	for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
23a2d70c7a2f28 Yonghong Song      2021-02-04  12554  		if (!bpf_pseudo_call(insn))
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12555  			continue;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12556  		insn->off = 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12557  		insn->imm = env->insn_aux_data[i].call_imm;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12558  	}
e16301fbe1837c Martin KaFai Lau   2021-03-24  12559  	bpf_prog_jit_attempt_done(prog);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12560  	return err;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12561  }
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12562  

:::::: The code at line 12470 was first introduced by commit
:::::: 0d306c31b2f77391dacdeaad4470c577f2aecc4f bpf: use BPF_CAST_CALL for casting bpf call

:::::: TO: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
:::::: CC: Alexei Starovoitov <ast@kernel.org>

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

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

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [gustavoars:for-next/cast-function 1/1] kernel/bpf/verifier.c:12470:16: warning: cast from 'unsigned int (*)(const void *, const struct bpf_insn *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, ...
Date: Thu, 30 Sep 2021 21:20:52 +0800	[thread overview]
Message-ID: <202109302140.3dPl9ABV-lkp@intel.com> (raw)

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git for-next/cast-function
head:   ffea83dd8823401f3922276d36aca35c3e99d7f3
commit: ffea83dd8823401f3922276d36aca35c3e99d7f3 [1/1] Makefile: Enable -Wcast-function-type
config: i386-randconfig-r016-20210930 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 28981015526f2192440c18f18e8a20cd11b0779c)
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
        # https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git/commit/?id=ffea83dd8823401f3922276d36aca35c3e99d7f3
        git remote add gustavoars https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git
        git fetch --no-tags gustavoars for-next/cast-function
        git checkout ffea83dd8823401f3922276d36aca35c3e99d7f3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=i386 

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

All warnings (new ones prefixed by >>):

>> kernel/bpf/verifier.c:12470:16: warning: cast from 'unsigned int (*)(const void *, const struct bpf_insn *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                           insn->imm = BPF_CAST_CALL(func[subprog]->bpf_func) -
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12951:17: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_lookup_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12955:17: warning: cast from 'int (*)(struct bpf_map *, void *, void *, u64)' (aka 'int (*)(struct bpf_map *, void *, void *, unsigned long long)') to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_update_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12959:17: warning: cast from 'int (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_delete_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12963:17: warning: cast from 'int (*)(struct bpf_map *, void *, u64)' (aka 'int (*)(struct bpf_map *, void *, unsigned long long)') to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_push_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/bpf/verifier.c:12967:17: warning: cast from 'int (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_pop_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/bpf/verifier.c:12971:17: warning: cast from 'int (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_peek_elem) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/verifier.c:12975:17: warning: cast from 'int (*)(struct bpf_map *, u32, u64)' (aka 'int (*)(struct bpf_map *, unsigned int, unsigned long long)') to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
                                   insn->imm = BPF_CAST_CALL(ops->map_redirect) -
                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   8 warnings generated.
--
>> kernel/bpf/hashtab.c:671:26: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
           *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^
   include/linux/filter.h:374:14: note: expanded from macro 'BPF_EMIT_CALL'
                   .imm   = ((FUNC) - __bpf_call_base) })
                              ^~~~
   kernel/bpf/hashtab.c:712:26: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
           *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^
   include/linux/filter.h:374:14: note: expanded from macro 'BPF_EMIT_CALL'
                   .imm   = ((FUNC) - __bpf_call_base) })
                              ^~~~
   kernel/bpf/hashtab.c:2400:26: warning: cast from 'void *(*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)') converts to incompatible function type [-Wcast-function-type]
           *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/filter.h:366:4: note: expanded from macro 'BPF_CAST_CALL'
                   ((u64 (*)(u64, u64, u64, u64, u64))(x))
                    ^
   include/linux/filter.h:374:14: note: expanded from macro 'BPF_EMIT_CALL'
                   .imm   = ((FUNC) - __bpf_call_base) })
                              ^~~~
   3 warnings generated.
--
>> drivers/firewire/core-cdev.c:985:8: warning: cast from 'void (*)(struct fw_iso_context *, dma_addr_t, void *)' (aka 'void (*)(struct fw_iso_context *, unsigned int, void *)') to 'fw_iso_callback_t' (aka 'void (*)(struct fw_iso_context *, unsigned int, unsigned int, void *, void *)') converts to incompatible function type [-Wcast-function-type]
                   cb = (fw_iso_callback_t)iso_mc_callback;
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning generated.


vim +12470 kernel/bpf/verifier.c

9bac3d6d548e5c Alexei Starovoitov 2015-03-13  12337  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12338  static int jit_subprogs(struct bpf_verifier_env *env)
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12339  {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12340  	struct bpf_prog *prog = env->prog, **func, *tmp;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12341  	int i, j, subprog_start, subprog_end = 0, len, subprog;
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12342  	struct bpf_map *map_ptr;
7105e828c087de Daniel Borkmann    2017-12-20  12343  	struct bpf_insn *insn;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12344  	void *old_bpf_func;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12345  	int err, num_exentries;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12346  
f910cefa32b6cd Jiong Wang         2018-05-02  12347  	if (env->subprog_cnt <= 1)
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12348  		return 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12349  
7105e828c087de Daniel Borkmann    2017-12-20  12350  	for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
69c087ba6225b5 Yonghong Song      2021-02-26  12351  		if (bpf_pseudo_func(insn)) {
69c087ba6225b5 Yonghong Song      2021-02-26  12352  			env->insn_aux_data[i].call_imm = insn->imm;
69c087ba6225b5 Yonghong Song      2021-02-26  12353  			/* subprog is encoded in insn[1].imm */
69c087ba6225b5 Yonghong Song      2021-02-26  12354  			continue;
69c087ba6225b5 Yonghong Song      2021-02-26  12355  		}
69c087ba6225b5 Yonghong Song      2021-02-26  12356  
23a2d70c7a2f28 Yonghong Song      2021-02-04  12357  		if (!bpf_pseudo_call(insn))
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12358  			continue;
c7a897843224a9 Daniel Borkmann    2018-07-12  12359  		/* Upon error here we cannot fall back to interpreter but
c7a897843224a9 Daniel Borkmann    2018-07-12  12360  		 * need a hard reject of the program. Thus -EFAULT is
c7a897843224a9 Daniel Borkmann    2018-07-12  12361  		 * propagated in any case.
c7a897843224a9 Daniel Borkmann    2018-07-12  12362  		 */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12363  		subprog = find_subprog(env, i + insn->imm + 1);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12364  		if (subprog < 0) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12365  			WARN_ONCE(1, "verifier bug. No program starts@insn %d\n",
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12366  				  i + insn->imm + 1);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12367  			return -EFAULT;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12368  		}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12369  		/* temporarily remember subprog id inside insn instead of
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12370  		 * aux_data, since next loop will split up all insns into funcs
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12371  		 */
f910cefa32b6cd Jiong Wang         2018-05-02  12372  		insn->off = subprog;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12373  		/* remember original imm in case JIT fails and fallback
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12374  		 * to interpreter will be needed
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12375  		 */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12376  		env->insn_aux_data[i].call_imm = insn->imm;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12377  		/* point imm to __bpf_call_base+1 from JITs point of view */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12378  		insn->imm = 1;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12379  	}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12380  
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12381  	err = bpf_prog_alloc_jited_linfo(prog);
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12382  	if (err)
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12383  		goto out_undo_insn;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12384  
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12385  	err = -ENOMEM;
6396bb221514d2 Kees Cook          2018-06-12  12386  	func = kcalloc(env->subprog_cnt, sizeof(prog), GFP_KERNEL);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12387  	if (!func)
c7a897843224a9 Daniel Borkmann    2018-07-12  12388  		goto out_undo_insn;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12389  
f910cefa32b6cd Jiong Wang         2018-05-02  12390  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12391  		subprog_start = subprog_end;
9c8105bd440223 Jiong Wang         2018-05-02  12392  		subprog_end = env->subprog_info[i + 1].start;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12393  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12394  		len = subprog_end - subprog_start;
fb7dd8bca0139f Andrii Nakryiko    2021-08-15  12395  		/* bpf_prog_run() doesn't call subprogs directly,
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12396  		 * hence main prog stats include the runtime of subprogs.
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12397  		 * subprogs don't have IDs and not reachable via prog_get_next_id
700d4796ef59f5 Alexei Starovoitov 2021-02-09  12398  		 * func[i]->stats will never be accessed and stays NULL
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12399  		 */
492ecee892c2a4 Alexei Starovoitov 2019-02-25  12400  		func[i] = bpf_prog_alloc_no_stats(bpf_prog_size(len), GFP_USER);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12401  		if (!func[i])
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12402  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12403  		memcpy(func[i]->insnsi, &prog->insnsi[subprog_start],
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12404  		       len * sizeof(struct bpf_insn));
4f74d80971bce9 Daniel Borkmann    2017-12-20  12405  		func[i]->type = prog->type;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12406  		func[i]->len = len;
4f74d80971bce9 Daniel Borkmann    2017-12-20  12407  		if (bpf_prog_calc_tag(func[i]))
4f74d80971bce9 Daniel Borkmann    2017-12-20  12408  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12409  		func[i]->is_func = 1;
ba64e7d8525236 Yonghong Song      2018-11-24  12410  		func[i]->aux->func_idx = i;
f263a81451c12d John Fastabend     2021-07-07  12411  		/* Below members will be freed only at prog->aux */
ba64e7d8525236 Yonghong Song      2018-11-24  12412  		func[i]->aux->btf = prog->aux->btf;
ba64e7d8525236 Yonghong Song      2018-11-24  12413  		func[i]->aux->func_info = prog->aux->func_info;
f263a81451c12d John Fastabend     2021-07-07  12414  		func[i]->aux->poke_tab = prog->aux->poke_tab;
f263a81451c12d John Fastabend     2021-07-07  12415  		func[i]->aux->size_poke_tab = prog->aux->size_poke_tab;
ba64e7d8525236 Yonghong Song      2018-11-24  12416  
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12417  		for (j = 0; j < prog->aux->size_poke_tab; j++) {
f263a81451c12d John Fastabend     2021-07-07  12418  			struct bpf_jit_poke_descriptor *poke;
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12419  
f263a81451c12d John Fastabend     2021-07-07  12420  			poke = &prog->aux->poke_tab[j];
f263a81451c12d John Fastabend     2021-07-07  12421  			if (poke->insn_idx < subprog_end &&
f263a81451c12d John Fastabend     2021-07-07  12422  			    poke->insn_idx >= subprog_start)
f263a81451c12d John Fastabend     2021-07-07  12423  				poke->aux = func[i]->aux;
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12424  		}
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12425  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12426  		/* Use bpf_prog_F_tag to indicate functions in stack traces.
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12427  		 * Long term would need debug info to populate names
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12428  		 */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12429  		func[i]->aux->name[0] = 'F';
9c8105bd440223 Jiong Wang         2018-05-02  12430  		func[i]->aux->stack_depth = env->subprog_info[i].stack_depth;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12431  		func[i]->jit_requested = 1;
e6ac2450d6dee3 Martin KaFai Lau   2021-03-24  12432  		func[i]->aux->kfunc_tab = prog->aux->kfunc_tab;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12433  		func[i]->aux->linfo = prog->aux->linfo;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12434  		func[i]->aux->nr_linfo = prog->aux->nr_linfo;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12435  		func[i]->aux->jited_linfo = prog->aux->jited_linfo;
c454a46b5efd8e Martin KaFai Lau   2018-12-07  12436  		func[i]->aux->linfo_idx = env->subprog_info[i].linfo_idx;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12437  		num_exentries = 0;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12438  		insn = func[i]->insnsi;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12439  		for (j = 0; j < func[i]->len; j++, insn++) {
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12440  			if (BPF_CLASS(insn->code) == BPF_LDX &&
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12441  			    BPF_MODE(insn->code) == BPF_PROBE_MEM)
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12442  				num_exentries++;
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12443  		}
c4c0bdc0d2d084 Yonghong Song      2020-06-23  12444  		func[i]->aux->num_exentries = num_exentries;
ebf7d1f508a738 Maciej Fijalkowski 2020-09-16  12445  		func[i]->aux->tail_call_reachable = env->subprog_info[i].tail_call_reachable;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12446  		func[i] = bpf_int_jit_compile(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12447  		if (!func[i]->jited) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12448  			err = -ENOTSUPP;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12449  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12450  		}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12451  		cond_resched();
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12452  	}
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12453  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12454  	/* at this point all bpf functions were successfully JITed
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12455  	 * now populate all bpf_calls with correct addresses and
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12456  	 * run last pass of JIT
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12457  	 */
f910cefa32b6cd Jiong Wang         2018-05-02  12458  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12459  		insn = func[i]->insnsi;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12460  		for (j = 0; j < func[i]->len; j++, insn++) {
69c087ba6225b5 Yonghong Song      2021-02-26  12461  			if (bpf_pseudo_func(insn)) {
69c087ba6225b5 Yonghong Song      2021-02-26  12462  				subprog = insn[1].imm;
69c087ba6225b5 Yonghong Song      2021-02-26  12463  				insn[0].imm = (u32)(long)func[subprog]->bpf_func;
69c087ba6225b5 Yonghong Song      2021-02-26  12464  				insn[1].imm = ((u64)(long)func[subprog]->bpf_func) >> 32;
69c087ba6225b5 Yonghong Song      2021-02-26  12465  				continue;
69c087ba6225b5 Yonghong Song      2021-02-26  12466  			}
23a2d70c7a2f28 Yonghong Song      2021-02-04  12467  			if (!bpf_pseudo_call(insn))
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12468  				continue;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12469  			subprog = insn->off;
0d306c31b2f773 Prashant Bhole     2019-04-16 @12470  			insn->imm = BPF_CAST_CALL(func[subprog]->bpf_func) -
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12471  				    __bpf_call_base;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12472  		}
2162fed49fa86c Sandipan Das       2018-05-24  12473  
2162fed49fa86c Sandipan Das       2018-05-24  12474  		/* we use the aux data to keep a list of the start addresses
2162fed49fa86c Sandipan Das       2018-05-24  12475  		 * of the JITed images for each function in the program
2162fed49fa86c Sandipan Das       2018-05-24  12476  		 *
2162fed49fa86c Sandipan Das       2018-05-24  12477  		 * for some architectures, such as powerpc64, the imm field
2162fed49fa86c Sandipan Das       2018-05-24  12478  		 * might not be large enough to hold the offset of the start
2162fed49fa86c Sandipan Das       2018-05-24  12479  		 * address of the callee's JITed image from __bpf_call_base
2162fed49fa86c Sandipan Das       2018-05-24  12480  		 *
2162fed49fa86c Sandipan Das       2018-05-24  12481  		 * in such cases, we can lookup the start address of a callee
2162fed49fa86c Sandipan Das       2018-05-24  12482  		 * by using its subprog id, available from the off field of
2162fed49fa86c Sandipan Das       2018-05-24  12483  		 * the call instruction, as an index for this list
2162fed49fa86c Sandipan Das       2018-05-24  12484  		 */
2162fed49fa86c Sandipan Das       2018-05-24  12485  		func[i]->aux->func = func;
2162fed49fa86c Sandipan Das       2018-05-24  12486  		func[i]->aux->func_cnt = env->subprog_cnt;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12487  	}
f910cefa32b6cd Jiong Wang         2018-05-02  12488  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12489  		old_bpf_func = func[i]->bpf_func;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12490  		tmp = bpf_int_jit_compile(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12491  		if (tmp != func[i] || func[i]->bpf_func != old_bpf_func) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12492  			verbose(env, "JIT doesn't support bpf-to-bpf calls\n");
c7a897843224a9 Daniel Borkmann    2018-07-12  12493  			err = -ENOTSUPP;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12494  			goto out_free;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12495  		}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12496  		cond_resched();
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12497  	}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12498  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12499  	/* finally lock prog and jit images for all functions and
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12500  	 * populate kallsysm
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12501  	 */
f910cefa32b6cd Jiong Wang         2018-05-02  12502  	for (i = 0; i < env->subprog_cnt; i++) {
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12503  		bpf_prog_lock_ro(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12504  		bpf_prog_kallsyms_add(func[i]);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12505  	}
7105e828c087de Daniel Borkmann    2017-12-20  12506  
7105e828c087de Daniel Borkmann    2017-12-20  12507  	/* Last step: make now unused interpreter insns from main
7105e828c087de Daniel Borkmann    2017-12-20  12508  	 * prog consistent for later dump requests, so they can
7105e828c087de Daniel Borkmann    2017-12-20  12509  	 * later look the same as if they were interpreted only.
7105e828c087de Daniel Borkmann    2017-12-20  12510  	 */
7105e828c087de Daniel Borkmann    2017-12-20  12511  	for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
69c087ba6225b5 Yonghong Song      2021-02-26  12512  		if (bpf_pseudo_func(insn)) {
69c087ba6225b5 Yonghong Song      2021-02-26  12513  			insn[0].imm = env->insn_aux_data[i].call_imm;
69c087ba6225b5 Yonghong Song      2021-02-26  12514  			insn[1].imm = find_subprog(env, i + insn[0].imm + 1);
69c087ba6225b5 Yonghong Song      2021-02-26  12515  			continue;
69c087ba6225b5 Yonghong Song      2021-02-26  12516  		}
23a2d70c7a2f28 Yonghong Song      2021-02-04  12517  		if (!bpf_pseudo_call(insn))
7105e828c087de Daniel Borkmann    2017-12-20  12518  			continue;
7105e828c087de Daniel Borkmann    2017-12-20  12519  		insn->off = env->insn_aux_data[i].call_imm;
7105e828c087de Daniel Borkmann    2017-12-20  12520  		subprog = find_subprog(env, i + insn->off + 1);
dbecd7388476ae Sandipan Das       2018-05-24  12521  		insn->imm = subprog;
7105e828c087de Daniel Borkmann    2017-12-20  12522  	}
7105e828c087de Daniel Borkmann    2017-12-20  12523  
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12524  	prog->jited = 1;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12525  	prog->bpf_func = func[0]->bpf_func;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12526  	prog->aux->func = func;
f910cefa32b6cd Jiong Wang         2018-05-02  12527  	prog->aux->func_cnt = env->subprog_cnt;
e16301fbe1837c Martin KaFai Lau   2021-03-24  12528  	bpf_prog_jit_attempt_done(prog);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12529  	return 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12530  out_free:
f263a81451c12d John Fastabend     2021-07-07  12531  	/* We failed JIT'ing, so at this point we need to unregister poke
f263a81451c12d John Fastabend     2021-07-07  12532  	 * descriptors from subprogs, so that kernel is not attempting to
f263a81451c12d John Fastabend     2021-07-07  12533  	 * patch it anymore as we're freeing the subprog JIT memory.
f263a81451c12d John Fastabend     2021-07-07  12534  	 */
f263a81451c12d John Fastabend     2021-07-07  12535  	for (i = 0; i < prog->aux->size_poke_tab; i++) {
f263a81451c12d John Fastabend     2021-07-07  12536  		map_ptr = prog->aux->poke_tab[i].tail_call.map;
f263a81451c12d John Fastabend     2021-07-07  12537  		map_ptr->ops->map_poke_untrack(map_ptr, prog->aux);
f263a81451c12d John Fastabend     2021-07-07  12538  	}
f263a81451c12d John Fastabend     2021-07-07  12539  	/* At this point we're guaranteed that poke descriptors are not
f263a81451c12d John Fastabend     2021-07-07  12540  	 * live anymore. We can just unlink its descriptor table as it's
f263a81451c12d John Fastabend     2021-07-07  12541  	 * released with the main prog.
f263a81451c12d John Fastabend     2021-07-07  12542  	 */
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12543  	for (i = 0; i < env->subprog_cnt; i++) {
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12544  		if (!func[i])
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12545  			continue;
f263a81451c12d John Fastabend     2021-07-07  12546  		func[i]->aux->poke_tab = NULL;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12547  		bpf_jit_free(func[i]);
a748c6975dea32 Maciej Fijalkowski 2020-09-16  12548  	}
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12549  	kfree(func);
c7a897843224a9 Daniel Borkmann    2018-07-12  12550  out_undo_insn:
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12551  	/* cleanup main prog to be interpreted */
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12552  	prog->jit_requested = 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12553  	for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
23a2d70c7a2f28 Yonghong Song      2021-02-04  12554  		if (!bpf_pseudo_call(insn))
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12555  			continue;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12556  		insn->off = 0;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12557  		insn->imm = env->insn_aux_data[i].call_imm;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12558  	}
e16301fbe1837c Martin KaFai Lau   2021-03-24  12559  	bpf_prog_jit_attempt_done(prog);
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12560  	return err;
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12561  }
1c2a088a6626d4 Alexei Starovoitov 2017-12-14  12562  

:::::: The code at line 12470 was first introduced by commit
:::::: 0d306c31b2f77391dacdeaad4470c577f2aecc4f bpf: use BPF_CAST_CALL for casting bpf call

:::::: TO: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
:::::: CC: Alexei Starovoitov <ast@kernel.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: 42832 bytes --]

             reply	other threads:[~2021-09-30 13:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-30 13:20 kernel test robot [this message]
2021-09-30 13:20 ` [gustavoars:for-next/cast-function 1/1] kernel/bpf/verifier.c:12470:16: warning: cast from 'unsigned int (*)(const void *, const struct bpf_insn *)' to 'u64 (*)(u64, u64, u64, u64, u64)' (aka 'unsigned long long (*)(unsigned long long, unsigned long long, unsigned long long, unsigned long long, kernel test robot

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=202109302140.3dPl9ABV-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=gustavo@embeddedor.com \
    --cc=gustavoars@kernel.org \
    --cc=kbuild-all@lists.01.org \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=llvm@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 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.