CC: kbuild-all(a)lists.01.org CC: linux-kernel(a)vger.kernel.org TO: Zhu Yanjun CC: Daniel Borkmann tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 5d6ab0bb408ffdaac585982faa9ec8c7d5cc349f commit: bb1b25cab04324d0749f7ae22653aff58157bf83 xdp: Remove the functions xsk_map_inc and xsk_map_put date: 11 months ago :::::: branch date: 15 hours ago :::::: commit date: 11 months ago config: nios2-randconfig-m031-20211009 (attached as .config) compiler: nios2-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: net/xdp/xskmap.c:176 xsk_map_update_elem() warn: passing a valid pointer to 'PTR_ERR' vim +/PTR_ERR +176 net/xdp/xskmap.c fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 145 fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 146 static int xsk_map_update_elem(struct bpf_map *map, void *key, void *value, fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 147 u64 map_flags) fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 148 { fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 149 struct xsk_map *m = container_of(map, struct xsk_map, map); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 150 struct xdp_sock *xs, *old_xs, **map_entry; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 151 u32 i = *(u32 *)key, fd = *(u32 *)value; 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 152 struct xsk_map_node *node; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 153 struct socket *sock; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 154 int err; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 155 fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 156 if (unlikely(map_flags > BPF_EXIST)) fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 157 return -EINVAL; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 158 if (unlikely(i >= m->map.max_entries)) fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 159 return -E2BIG; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 160 fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 161 sock = sockfd_lookup(fd, &err); fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 162 if (!sock) fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 163 return err; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 164 fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 165 if (sock->sk->sk_family != PF_XDP) { fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 166 sockfd_put(sock); fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 167 return -EOPNOTSUPP; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 168 } fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 169 fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 170 xs = (struct xdp_sock *)sock->sk; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 171 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 172 map_entry = &m->xsk_map[i]; 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 173 node = xsk_map_node_alloc(m, map_entry); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 174 if (IS_ERR(node)) { 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 175 sockfd_put(sock); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 @176 return PTR_ERR(node); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 177 } fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 178 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 179 spin_lock_bh(&m->lock); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 180 old_xs = READ_ONCE(*map_entry); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 181 if (old_xs == xs) { 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 182 err = 0; 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 183 goto out; 36cc34358caf63 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 184 } else if (old_xs && map_flags == BPF_NOEXIST) { 36cc34358caf63 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 185 err = -EEXIST; 36cc34358caf63 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 186 goto out; 36cc34358caf63 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 187 } else if (!old_xs && map_flags == BPF_EXIST) { 36cc34358caf63 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 188 err = -ENOENT; 36cc34358caf63 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 189 goto out; 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 190 } 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 191 xsk_map_sock_add(xs, node); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 192 WRITE_ONCE(*map_entry, xs); cee271678d0e31 kernel/bpf/xskmap.c Björn Töpel 2018-10-08 193 if (old_xs) 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 194 xsk_map_sock_delete(old_xs, map_entry); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 195 spin_unlock_bh(&m->lock); fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 196 sockfd_put(sock); fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 197 return 0; 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 198 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 199 out: 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 200 spin_unlock_bh(&m->lock); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 201 sockfd_put(sock); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 202 xsk_map_node_free(node); 0402acd683c678 kernel/bpf/xskmap.c Björn Töpel 2019-08-15 203 return err; fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 204 } fbfc504a24f53f kernel/bpf/xskmap.c Björn Töpel 2018-05-02 205 :::::: The code at line 176 was first introduced by commit :::::: 0402acd683c678874df6bdbc23530ca07ea19353 xsk: remove AF_XDP socket from map when the socket is released :::::: TO: Björn Töpel :::::: CC: Daniel Borkmann --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org