From: Tomas Krizek Date: Wed, 24 Mar 2021 16:44:42 +0000 (+0100) Subject: daemon/network.c: replace asserts X-Git-Tag: v5.4.0~18^2~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f6e9d7bc4b9fa0d7736be5417144dab4e1cd0e3;p=thirdparty%2Fknot-resolver.git daemon/network.c: replace asserts --- diff --git a/daemon/network.c b/daemon/network.c index 15b5e05ad..fe1df3ab6 100644 --- a/daemon/network.c +++ b/daemon/network.c @@ -9,7 +9,6 @@ #include "daemon/tls.h" #include "daemon/worker.h" -#include #include #include #include @@ -36,10 +35,8 @@ static int endpoint_open_lua_cb(struct network *net, struct endpoint *ep, const char *log_addr) { const bool ok = ep->flags.kind && !ep->handle && !ep->engaged && ep->fd != -1; - if (!ok) { - assert(!EINVAL); + if (!kr_assume(ok)) return kr_error(EINVAL); - } /* First find callback in the endpoint registry. */ lua_State *L = the_worker->engine->L; void **pp = trie_get_try(net->endpoint_kinds, ep->flags.kind, @@ -141,7 +138,7 @@ static void endpoint_close(struct network *net, struct endpoint *ep, bool force) } if (ep->flags.kind && !is_control && !is_xdp) { - assert(!ep->handle); + (void)!kr_assume(!ep->handle); /* Special lua-handled endpoint. */ if (ep->engaged) { endpoint_close_lua_cb(net, ep); @@ -154,7 +151,7 @@ static void endpoint_close(struct network *net, struct endpoint *ep, bool force) } free_const(ep->flags.kind); /* needed if (is_control) */ - assert(ep->handle); + kr_require(ep->handle); if (force) { /* Force close if event loop isn't running. */ if (ep->fd >= 0) { close(ep->fd); @@ -253,10 +250,8 @@ static int open_endpoint(struct network *net, const char *addr_str, ? sa == NULL && ep->fd == -1 && ep->nic_queue >= 0 && ep->flags.sock_type == SOCK_DGRAM && !ep->flags.tls : (sa != NULL) != (ep->fd != -1); - if (!ok) { - assert(!EINVAL); + if (!kr_assume(ok)) return kr_error(EINVAL); - } if (ep->handle) { return kr_error(EEXIST); } @@ -314,10 +309,8 @@ static int open_endpoint(struct network *net, const char *addr_str, } /* else */ if (ep->flags.sock_type == SOCK_DGRAM) { - if (ep->flags.tls) { - assert(!EINVAL); + if (!kr_assume(!ep->flags.tls)) return kr_error(EINVAL); - } uv_udp_t *ep_handle = malloc(sizeof(uv_udp_t)); ep->handle = (uv_handle_t *)ep_handle; ret = !ep->handle ? ENOMEM @@ -334,7 +327,7 @@ static int open_endpoint(struct network *net, const char *addr_str, goto finish_ret; } /* else */ - assert(!EINVAL); + (void)!kr_assume(false); return kr_error(EINVAL); finish_ret: if (!ret) return ret; @@ -381,31 +374,25 @@ static int create_endpoint(struct network *net, const char *addr_str, int network_listen_fd(struct network *net, int fd, endpoint_flags_t flags) { - if (flags.xdp) { - assert(!EINVAL); + if (!kr_assume(!flags.xdp)) return kr_error(EINVAL); - } /* Extract fd's socket type. */ socklen_t len = sizeof(flags.sock_type); int ret = getsockopt(fd, SOL_SOCKET, SO_TYPE, &flags.sock_type, &len); - if (ret != 0) { + if (ret != 0) return kr_error(errno); - } - if (flags.sock_type == SOCK_DGRAM && !flags.kind && flags.tls) { - assert(!EINVAL); /* Perhaps DTLS some day. */ - return kr_error(EINVAL); - } - if (flags.sock_type != SOCK_DGRAM && flags.sock_type != SOCK_STREAM) { + const bool is_dtls = flags.sock_type == SOCK_DGRAM && !flags.kind && flags.tls; + if (!kr_assume(!is_dtls)) + return kr_error(EINVAL); /* Perhaps DTLS some day. */ + if (flags.sock_type != SOCK_DGRAM && flags.sock_type != SOCK_STREAM) return kr_error(EBADF); - } /* Extract local address for this socket. */ struct sockaddr_storage ss = { .ss_family = AF_UNSPEC }; socklen_t addr_len = sizeof(ss); ret = getsockname(fd, (struct sockaddr *)&ss, &addr_len); - if (ret != 0) { + if (ret != 0) return kr_error(errno); - } struct endpoint ep = { .flags = flags, @@ -458,10 +445,8 @@ static int16_t nic_queue_auto(void) int network_listen(struct network *net, const char *addr, uint16_t port, int16_t nic_queue, endpoint_flags_t flags) { - if (net == NULL || addr == 0 || nic_queue < -1) { - assert(!EINVAL); + if (!kr_assume(net != NULL && addr != 0 && nic_queue >= -1)) return kr_error(EINVAL); - } if (flags.xdp && nic_queue < 0) { nic_queue = nic_queue_auto(); @@ -571,16 +556,16 @@ void network_new_hostname(struct network *net, struct engine *engine) static int set_bpf_cb(const char *key, void *val, void *ext) { endpoint_array_t *endpoints = (endpoint_array_t *)val; - assert(endpoints != NULL); int *bpffd = (int *)ext; - assert(bpffd != NULL); + if (!kr_assume(endpoints && bpffd)) + return kr_error(EINVAL); for (size_t i = 0; i < endpoints->len; i++) { struct endpoint *endpoint = &endpoints->at[i]; uv_os_fd_t sockfd = -1; if (endpoint->handle != NULL) uv_fileno(endpoint->handle, &sockfd); - assert(sockfd != -1); + kr_require(sockfd != -1); if (setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_BPF, bpffd, sizeof(int)) != 0) { return 1; /* return error (and stop iterating over net->endpoints) */ @@ -611,14 +596,15 @@ int network_set_bpf(struct network *net, int bpf_fd) static int clear_bpf_cb(const char *key, void *val, void *ext) { endpoint_array_t *endpoints = (endpoint_array_t *)val; - assert(endpoints != NULL); + if (!kr_assume(endpoints)) + return kr_error(EINVAL); for (size_t i = 0; i < endpoints->len; i++) { struct endpoint *endpoint = &endpoints->at[i]; uv_os_fd_t sockfd = -1; if (endpoint->handle != NULL) uv_fileno(endpoint->handle, &sockfd); - assert(sockfd != -1); + kr_require(sockfd != -1); if (setsockopt(sockfd, SOL_SOCKET, SO_DETACH_BPF, NULL, 0) != 0) { kr_log_error("[network] failed to clear SO_DETACH_BPF socket option\n");