From: Yu Watanabe Date: Tue, 18 Nov 2025 19:01:17 +0000 (+0900) Subject: core/socket: do not log failure in setting socket option with number X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7df0eab8d9520f37a2feaecf532d78de6ab6b7d;p=thirdparty%2Fsystemd.git core/socket: do not log failure in setting socket option with number This also downgrade to the debug level when the option is simply not supported. Follow-up for b81a14b91efea17631d634f5dbd69314780815ab. Fixes #39792. --- diff --git a/src/core/socket.c b/src/core/socket.c index dd4b96c2138..c8e737eaa72 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1027,9 +1027,16 @@ static void socket_close_fds(Socket *s) { DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(Socket*, socket_close_fds, NULL); -#define SOCKET_OPTION_WARNING_FORMAT_STR "Failed to set %s socket option, ignoring: %m" -#define log_socket_option_warning_errno(s, error, option) \ - log_unit_warning_errno(UNIT(s), (error), SOCKET_OPTION_WARNING_FORMAT_STR, STRINGIFY(option)) +#define log_socket_option_errno(s, e, option) \ + ({ \ + int _e_ = (e); \ + log_unit_full_errno( \ + UNIT(s), \ + ERRNO_IS_NOT_SUPPORTED(_e_) ? LOG_DEBUG : LOG_WARNING, \ + _e_, \ + "Failed to set %s socket option, ignoring: %m", \ + option); \ + }) static void socket_apply_socket_options(Socket *s, SocketPort *p, int fd) { int r; @@ -1041,82 +1048,79 @@ static void socket_apply_socket_options(Socket *s, SocketPort *p, int fd) { if (s->keep_alive) { r = setsockopt_int(fd, SOL_SOCKET, SO_KEEPALIVE, true); if (r < 0) - log_socket_option_warning_errno(s, r, SO_KEEPALIVE); + log_socket_option_errno(s, r, "SO_KEEPALIVE"); } if (timestamp_is_set(s->keep_alive_time)) { r = setsockopt_int(fd, SOL_TCP, TCP_KEEPIDLE, s->keep_alive_time / USEC_PER_SEC); if (r < 0) - log_socket_option_warning_errno(s, r, TCP_KEEPIDLE); + log_socket_option_errno(s, r, "TCP_KEEPIDLE"); } if (s->keep_alive_interval > 0) { r = setsockopt_int(fd, SOL_TCP, TCP_KEEPINTVL, s->keep_alive_interval / USEC_PER_SEC); if (r < 0) - log_socket_option_warning_errno(s, r, TCP_KEEPINTVL); + log_socket_option_errno(s, r, "TCP_KEEPINTVL"); } if (s->keep_alive_cnt > 0) { r = setsockopt_int(fd, SOL_TCP, TCP_KEEPCNT, s->keep_alive_cnt); if (r < 0) - log_socket_option_warning_errno(s, r, TCP_KEEPCNT); + log_socket_option_errno(s, r, "TCP_KEEPCNT"); } if (s->defer_accept > 0) { r = setsockopt_int(fd, SOL_TCP, TCP_DEFER_ACCEPT, s->defer_accept / USEC_PER_SEC); if (r < 0) - log_socket_option_warning_errno(s, r, TCP_DEFER_ACCEPT); + log_socket_option_errno(s, r, "TCP_DEFER_ACCEPT"); } if (s->no_delay) { if (s->socket_protocol == IPPROTO_SCTP) { r = setsockopt_int(fd, SOL_SCTP, SCTP_NODELAY, true); if (r < 0) - log_socket_option_warning_errno(s, r, SCTP_NODELAY); + log_socket_option_errno(s, r, "SCTP_NODELAY"); } else { r = setsockopt_int(fd, SOL_TCP, TCP_NODELAY, true); if (r < 0) - log_socket_option_warning_errno(s, r, TCP_NODELAY); + log_socket_option_errno(s, r, "TCP_NODELAY"); } } if (s->broadcast) { r = setsockopt_int(fd, SOL_SOCKET, SO_BROADCAST, true); if (r < 0) - log_socket_option_warning_errno(s, r, SO_BROADCAST); + log_socket_option_errno(s, r, "SO_BROADCAST"); } if (s->pass_cred) { r = setsockopt_int(fd, SOL_SOCKET, SO_PASSCRED, true); if (r < 0) - log_socket_option_warning_errno(s, r, SO_PASSCRED); + log_socket_option_errno(s, r, "SO_PASSCRED"); } if (s->pass_pidfd) { r = setsockopt_int(fd, SOL_SOCKET, SO_PASSPIDFD, true); if (r < 0) - log_unit_full_errno(UNIT(s), ERRNO_IS_NEG_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING, r, - SOCKET_OPTION_WARNING_FORMAT_STR, "SO_PASSPIDFD"); + log_socket_option_errno(s, r, "SO_PASSPIDFD"); } if (s->pass_sec) { r = setsockopt_int(fd, SOL_SOCKET, SO_PASSSEC, true); if (r < 0) - log_unit_full_errno(UNIT(s), ERRNO_IS_NEG_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING, r, - SOCKET_OPTION_WARNING_FORMAT_STR, "SO_PASSSEC"); + log_socket_option_errno(s, r, "SO_PASSSEC"); } if (s->pass_pktinfo) { r = socket_set_recvpktinfo(fd, socket_address_family(&p->address), true); if (r < 0) - log_unit_warning_errno(UNIT(s), r, SOCKET_OPTION_WARNING_FORMAT_STR, "packet info"); + log_socket_option_errno(s, r, "packet info"); } if (!s->pass_rights) { r = setsockopt_int(fd, SOL_SOCKET, SO_PASSRIGHTS, false); if (r < 0) - log_unit_full_errno(UNIT(s), ERRNO_IS_NEG_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING, r, - SOCKET_OPTION_WARNING_FORMAT_STR, "SO_PASSRIGHTS"); + log_socket_option_errno(s, r, "SO_PASSRIGHTS"); } if (s->timestamping != SOCKET_TIMESTAMPING_OFF) { @@ -1124,61 +1128,59 @@ static void socket_apply_socket_options(Socket *s, SocketPort *p, int fd) { s->timestamping == SOCKET_TIMESTAMPING_NS ? SO_TIMESTAMPNS : SO_TIMESTAMP, true); if (r < 0) - log_unit_warning_errno(UNIT(s), r, SOCKET_OPTION_WARNING_FORMAT_STR, "timestamping"); + log_socket_option_errno(s, r, "timestamping"); } if (s->priority >= 0) { r = setsockopt_int(fd, SOL_SOCKET, SO_PRIORITY, s->priority); if (r < 0) - log_socket_option_warning_errno(s, r, SO_PRIORITY); + log_socket_option_errno(s, r, "SO_PRIORITY"); } if (s->receive_buffer > 0) { r = fd_set_rcvbuf(fd, s->receive_buffer, false); if (r < 0) - log_unit_full_errno(UNIT(s), ERRNO_IS_NEG_PRIVILEGE(r) ? LOG_DEBUG : LOG_WARNING, r, - SOCKET_OPTION_WARNING_FORMAT_STR, "SO_RCVBUF/SO_RCVBUFFORCE"); + log_socket_option_errno(s, r, "SO_RCVBUF/SO_RCVBUFFORCE"); } if (s->send_buffer > 0) { r = fd_set_sndbuf(fd, s->send_buffer, false); if (r < 0) - log_unit_full_errno(UNIT(s), ERRNO_IS_NEG_PRIVILEGE(r) ? LOG_DEBUG : LOG_WARNING, r, - SOCKET_OPTION_WARNING_FORMAT_STR, "SO_SNDBUF/SO_SNDBUFFORCE"); + log_socket_option_errno(s, r, "SO_SNDBUF/SO_SNDBUFFORCE"); } if (s->mark >= 0) { r = setsockopt_int(fd, SOL_SOCKET, SO_MARK, s->mark); if (r < 0) - log_socket_option_warning_errno(s, r, SO_MARK); + log_socket_option_errno(s, r, "SO_MARK"); } if (s->ip_tos >= 0) { r = setsockopt_int(fd, IPPROTO_IP, IP_TOS, s->ip_tos); if (r < 0) - log_socket_option_warning_errno(s, r, IP_TOS); + log_socket_option_errno(s, r, "IP_TOS"); } if (s->ip_ttl >= 0) { r = socket_set_ttl(fd, socket_address_family(&p->address), s->ip_ttl); if (r < 0) - log_unit_warning_errno(UNIT(s), r, SOCKET_OPTION_WARNING_FORMAT_STR, "IP_TTL/IPV6_UNICAST_HOPS"); + log_socket_option_errno(s, r, "IP_TTL/IPV6_UNICAST_HOPS"); } if (s->tcp_congestion) if (setsockopt(fd, SOL_TCP, TCP_CONGESTION, s->tcp_congestion, strlen(s->tcp_congestion)+1) < 0) - log_socket_option_warning_errno(s, errno, TCP_CONGESTION); + log_socket_option_errno(s, errno, "TCP_CONGESTION"); if (s->smack_ip_in) { r = mac_smack_apply_fd(fd, SMACK_ATTR_IPIN, s->smack_ip_in); if (r < 0) - log_unit_error_errno(UNIT(s), r, "Failed to apply SMACK label for IP input, ignoring: %m"); + log_unit_warning_errno(UNIT(s), r, "Failed to apply SMACK label for IP input, ignoring: %m"); } if (s->smack_ip_out) { r = mac_smack_apply_fd(fd, SMACK_ATTR_IPOUT, s->smack_ip_out); if (r < 0) - log_unit_error_errno(UNIT(s), r, "Failed to apply SMACK label for IP output, ignoring: %m"); + log_unit_warning_errno(UNIT(s), r, "Failed to apply SMACK label for IP output, ignoring: %m"); } }