From c825404a2b163afb4b1da3af683d7c3f2d73541f Mon Sep 17 00:00:00 2001 From: wangchen Date: Wed, 24 Dec 2025 20:46:22 +0800 Subject: [PATCH] net/icmp: Return -ENOPROTOOPT for SOL_SOCKET to avoid misleading logs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When SOL_SOCKET options (e.g., SO_BINDTODEVICE via ping -I) hit ICMP sockets, icmp_{get,set}sockopt logged “Unrecognized ICMP option: 17” before fallback. Handle SOL_SOCKET explicitly by returning -ENOPROTOOPT so psock_* routes to the socket-level handler. Removes noisy logs without changing behavior (invalid devices still return -ENODEV). Signed-off-by: wangchen --- net/icmp/icmp_sockif.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/net/icmp/icmp_sockif.c b/net/icmp/icmp_sockif.c index a35611b5113..5c3cdcb7b9c 100644 --- a/net/icmp/icmp_sockif.c +++ b/net/icmp/icmp_sockif.c @@ -383,6 +383,15 @@ static int icmp_getsockopt(FAR struct socket *psock, int level, int option, { switch (level) { + case SOL_SOCKET: + + /* Socket-level options are handled by psock_getsockopt()/inet layer. + * Return -ENOPROTOOPT so upper layer will fallback to socket-level + * handler without emitting misleading ICMP error logs. + */ + + return -ENOPROTOOPT; + case SOL_IP: return ipv4_getsockopt(psock, option, value, value_len); @@ -486,6 +495,15 @@ static int icmp_setsockopt(FAR struct socket *psock, int level, int option, { switch (level) { + case SOL_SOCKET: + + /* Socket-level options are handled by psock_setsockopt()/inet layer. + * Return -ENOPROTOOPT so upper layer will fallback to socket-level + * handler without emitting misleading ICMP error logs. + */ + + return -ENOPROTOOPT; + case SOL_IP: return ipv4_setsockopt(psock, option, value, value_len);