Skip to content

Commit 3518e96

Browse files
hyj0824Kernel Patches Daemon
authored andcommitted
xskmap: reject TX-only AF_XDP sockets
XSKMAP entries are used as redirect targets for incoming XDP frames. A TX-only AF_XDP socket lacks an Rx ring and cannot handle redirected traffic, but xsk_map_update_elem() currently allows such sockets to be inserted into the map. Redirecting packets to such a socket on the veth generic-XDP path causes a kernel crash in xsk_generic_rcv(). This became possible after xsk_is_setup_for_bpf_map() was removed from the XSKMAP update path, which allowed bound TX-only sockets to be inserted into the map. Reject TX-only sockets during XSKMAP updates to avoid the crash. They remain fully operational for pure Tx purposes outside XSKMAP. Fixes: 968be23 ("xsk: Fix possible segfault at xskmap entry insertion") Reported-by: Juefei Pu <tomapufckgml@gmail.com> Reported-by: Yuan Tan <yuantan098@gmail.com> Reported-by: Xin Liu <bird@lzu.edu.cn> Signed-off-by: Yifan Wu <yifanwucs@gmail.com> Signed-off-by: Linpu Yu <linpu5433@gmail.com>
1 parent ee9631b commit 3518e96

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

net/xdp/xskmap.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ static long xsk_map_update_elem(struct bpf_map *map, void *key, void *value,
184184
}
185185

186186
xs = (struct xdp_sock *)sock->sk;
187+
if (!READ_ONCE(xs->rx)) {
188+
sockfd_put(sock);
189+
return -ENOBUFS;
190+
}
187191

188192
map_entry = &m->xsk_map[i];
189193
node = xsk_map_node_alloc(m, map_entry);

0 commit comments

Comments
 (0)