Hi "Toke,

I love your patch! Perhaps something to improve:

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

url:    
https://github.com/0day-ci/linux/commits/Toke-H-iland-J-rgensen/bpf-Support-injecting-chain-calls-into-BPF-programs-on-load/20191005-035650
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 7.4.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.4.0 make.cross ARCH=xtensa 

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

All warnings (new ones prefixed by >>):

   kernel/bpf/verifier.c: In function 'bpf_inject_chain_calls':
>> kernel/bpf/verifier.c:9195:27: warning: cast from pointer to integer of 
>> different size [-Wpointer-to-int-cast]
     call_next[0].imm = (u32)((u64) prog_array);
                              ^
   kernel/bpf/verifier.c:9196:22: warning: cast from pointer to integer of 
different size [-Wpointer-to-int-cast]
     call_next[1].imm = ((u64) prog_array) >> 32;
                         ^

vim +9195 kernel/bpf/verifier.c

  9156  
  9157  static int bpf_inject_chain_calls(struct bpf_verifier_env *env)
  9158  {
  9159          struct bpf_prog *prog = env->prog;
  9160          struct bpf_insn *insn = prog->insnsi;
  9161          int i, cnt, delta = 0, ret = -ENOMEM;
  9162          const int insn_cnt = prog->len;
  9163          struct bpf_array *prog_array;
  9164          struct bpf_prog *new_prog;
  9165          size_t array_size;
  9166  
  9167          struct bpf_insn call_next[] = {
  9168                  BPF_LD_IMM64(BPF_REG_2, 0),
  9169                  /* Save real return value for later */
  9170                  BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
  9171                  /* First try tail call with index ret+1 */
  9172                  BPF_MOV64_REG(BPF_REG_3, BPF_REG_0),
  9173                  BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, 1),
  9174                  BPF_RAW_INSN(BPF_JMP | BPF_TAIL_CALL, 0, 0, 0, 0),
  9175                  /* If that doesn't work, try with index 0 (wildcard) */
  9176                  BPF_MOV64_IMM(BPF_REG_3, 0),
  9177                  BPF_RAW_INSN(BPF_JMP | BPF_TAIL_CALL, 0, 0, 0, 0),
  9178                  /* Restore saved return value and exit */
  9179                  BPF_MOV64_REG(BPF_REG_0, BPF_REG_6),
  9180                  BPF_EXIT_INSN()
  9181          };
  9182  
  9183          if (prog->aux->chain_progs)
  9184                  return 0;
  9185  
  9186          array_size = sizeof(*prog_array) + BPF_NUM_CHAIN_SLOTS * 
sizeof(void*);
  9187          prog_array = bpf_map_area_alloc(array_size, NUMA_NO_NODE);
  9188  
  9189          if (!prog_array)
  9190                  goto out_err;
  9191  
  9192          prog_array->elem_size = sizeof(void*);
  9193          prog_array->map.max_entries = BPF_NUM_CHAIN_SLOTS;
  9194  
> 9195          call_next[0].imm = (u32)((u64) prog_array);
  9196          call_next[1].imm = ((u64) prog_array) >> 32;
  9197  
  9198          for (i = 0; i < insn_cnt; i++, insn++) {
  9199                  if (insn->code != (BPF_JMP | BPF_EXIT))
  9200                          continue;
  9201  
  9202                  cnt = ARRAY_SIZE(call_next);
  9203  
  9204                  new_prog = bpf_patch_insn_data(env, i+delta, call_next, 
cnt);
  9205                  if (!new_prog) {
  9206                          goto out_err;
  9207                  }
  9208  
  9209                  delta    += cnt - 1;
  9210                  env->prog = prog = new_prog;
  9211                  insn      = new_prog->insnsi + i + delta;
  9212          }
  9213  
  9214          /* If we chain call into other programs, we cannot make any 
assumptions
  9215           * since they can be replaced dynamically during runtime.
  9216           */
  9217          prog->cb_access = 1;
  9218          env->prog->aux->stack_depth = MAX_BPF_STACK;
  9219          env->prog->aux->max_pkt_offset = MAX_PACKET_OFF;
  9220  
  9221          prog->aux->chain_progs = prog_array;
  9222          return 0;
  9223  
  9224  out_err:
  9225          bpf_map_area_free(prog_array);
  9226          return ret;
  9227  }
  9228  

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

Attachment: .config.gz
Description: application/gzip

Reply via email to