Commit 5adaf527 authored by Magnus Karlsson's avatar Magnus Karlsson Committed by Alexei Starovoitov

selftests/xsk: do not close unused file descriptors

Do not close descriptors that have never been used. File descriptor
fields that are not in use are erroneously marked with the number 0,
which is a valid fd. Mark unused fds with -1 instead and do not close
these when deleting the socket.
Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
Acked-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Link: https://lore.kernel.org/r/20230111093526.11682-3-magnus.karlsson@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 2d0b2ae2
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
#include "xsk.h" #include "xsk.h"
#include "bpf_util.h" #include "bpf_util.h"
#define FD_NOT_USED (-1)
#ifndef SOL_XDP #ifndef SOL_XDP
#define SOL_XDP 283 #define SOL_XDP 283
#endif #endif
...@@ -583,6 +585,9 @@ static void xsk_delete_bpf_maps(struct xsk_socket *xsk) ...@@ -583,6 +585,9 @@ static void xsk_delete_bpf_maps(struct xsk_socket *xsk)
{ {
struct xsk_ctx *ctx = xsk->ctx; struct xsk_ctx *ctx = xsk->ctx;
if (ctx->xsks_map_fd == FD_NOT_USED)
return;
bpf_map_delete_elem(ctx->xsks_map_fd, &ctx->queue_id); bpf_map_delete_elem(ctx->xsks_map_fd, &ctx->queue_id);
close(ctx->xsks_map_fd); close(ctx->xsks_map_fd);
} }
...@@ -941,6 +946,9 @@ static struct xsk_ctx *xsk_create_ctx(struct xsk_socket *xsk, ...@@ -941,6 +946,9 @@ static struct xsk_ctx *xsk_create_ctx(struct xsk_socket *xsk,
ctx->umem = umem; ctx->umem = umem;
ctx->queue_id = queue_id; ctx->queue_id = queue_id;
bpf_strlcpy(ctx->ifname, ifname, IFNAMSIZ); bpf_strlcpy(ctx->ifname, ifname, IFNAMSIZ);
ctx->prog_fd = FD_NOT_USED;
ctx->link_fd = FD_NOT_USED;
ctx->xsks_map_fd = FD_NOT_USED;
ctx->fill = fill; ctx->fill = fill;
ctx->comp = comp; ctx->comp = comp;
...@@ -1221,8 +1229,9 @@ void xsk_socket__delete(struct xsk_socket *xsk) ...@@ -1221,8 +1229,9 @@ void xsk_socket__delete(struct xsk_socket *xsk)
if (ctx->refcount == 1) { if (ctx->refcount == 1) {
xsk_delete_bpf_maps(xsk); xsk_delete_bpf_maps(xsk);
if (ctx->prog_fd != FD_NOT_USED)
close(ctx->prog_fd); close(ctx->prog_fd);
if (ctx->has_bpf_link) if (ctx->has_bpf_link && ctx->link_fd != FD_NOT_USED)
close(ctx->link_fd); close(ctx->link_fd);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment