From nobody Fri Apr 17 07:22:52 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fxmYm5wY2z6ZDTv for ; Fri, 17 Apr 2026 07:22:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fxmYm39Bkz3T3Q for ; Fri, 17 Apr 2026 07:22:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776410572; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Y4QAwyY5Pxf1jS7vGQv5yihj3B2d+gbTjUubj5NgaTY=; b=ttZlUPEMB9DK+FuqQLH92MTVjHFtiEu77X6QPMwjhaCxbnZ7bYQcgVu8DOQ5l0lNT7WLbt LaWocI7J17pTfLVdj1JykKGsugbdIcmWNL01/rtqPuuiB75GTwMzEWHkqHJ+NaVMLjQVqa 7P111W0Dfl9/7W1xZgHwOYYhTX+9mwtKc5r7QK5BA3AEUUtd10pIAlIj5uJD+fPLRCDOJk i2/aG5NrKhRztH2Tct8ICp3J/8+qpk+UFnJ66QP/t/u3mNUMft3DdWKZLBiPyUeW+2/N06 kSQanbqX+UxCkxMDPE6l8z611/EJGdeAH/XMPWXke5xuLGojmomcuAVbqCU/Hg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776410572; a=rsa-sha256; cv=none; b=FneSRCRZPjtVibZ56vOJwAYVf6dW1BmAi563TmOL3elWhDOPIjxWp9btu1a2vJ6hZVyG9Z HvuSHhNB8BucJ4SvdXdIMwJA4f0KxYTgAPvW9nAxeNQOW29jXJYDMFMy8q/qDZ14uY/iF2 GWMREwnNTpPcwqbZgab4ZD+xGVH1XNEZY78PZgobMTVxxflcAh2bTVADBdC3fv/InoS4Ie L+vh3aDtKf+zJlKMvtgre2gwtYjYlaQB9/3mphtL7zR6RAByTUUmKOqeSvtmViYkqD9Hj2 TnTSFqDWZvAUhIOOzF3p8Vfcpmpn8rEuP8EHuvMhV6zqo2MjB2/VnlX7Wm7obg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776410572; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Y4QAwyY5Pxf1jS7vGQv5yihj3B2d+gbTjUubj5NgaTY=; b=pkMHnR4+R4x+iApinKC8cspy/0FnOC03qYsJgo+z9MQVS3B5M9RM+wKbINbTWuPJ5mEaSk QmwaMjIu/Ub7I+Gsev4FpQPZw4Bvkem4DGjRJo5CMgsqMiVdqqBmZx0qyq0ahyYeSuDgUQ +4MENYI67bweR25XR87WXcfMOxy15voraIzhXjt3Wg5Iz/yNuaMXRTpnIfhHW8Ka5orywA NEFLXBpruXhXP5yjIjZ/z/+Yr27zZvuyQSqcWWtIMi0Fk4nZNZvcUBb2ukJf+xvnIWFRdt FyBiQQLvHANNRcxNwonq/M2fV9OLEkp7Kj2AfX71y5A3TAuGHyI1eyrFGMkszA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fxmYm2mL0zl1Z for ; Fri, 17 Apr 2026 07:22:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4525b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 17 Apr 2026 07:22:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Ricardo Branco From: Pouria Mousavizadeh Tehrani Subject: git: 64e2715f5d8f - main - linux: Support ICMP6_FILTER socket option translation List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 64e2715f5d8f03ab7e763a49a0e102d755673810 Auto-Submitted: auto-generated Date: Fri, 17 Apr 2026 07:22:52 +0000 Message-Id: <69e1dfcc.4525b.76faacf@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=64e2715f5d8f03ab7e763a49a0e102d755673810 commit 64e2715f5d8f03ab7e763a49a0e102d755673810 Author: Ricardo Branco AuthorDate: 2026-04-12 11:01:47 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-04-17 07:22:36 +0000 linux: Support ICMP6_FILTER socket option translation Handle Linux IPPROTO_ICMPV6 socket options in the Linuxulator and map ICMP6_FILTER for both getsockopt(2) and setsockopt(2). Linux and FreeBSD use inverted bit semantics for struct icmp6_filter, so invert the filter contents before/after calling setsockopt/getsockopt. Signed-off-by: Ricardo Branco PR: 294434 Reviewed by: pouria Pull-Request: https://github.com/freebsd/freebsd-src/pull/2138 --- sys/compat/linux/linux_socket.c | 67 +++++++++++++++++++++++++++++++++++++++++ sys/compat/linux/linux_socket.h | 2 ++ 2 files changed, 69 insertions(+) diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 023be1e6b885..d971b2a7fbe7 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -52,6 +52,7 @@ #include #include #ifdef INET6 +#include #include #include #endif @@ -622,6 +623,19 @@ bsd_to_linux_tcp_user_timeout(u_int bsd_timeout) return (bsd_timeout * 1000U); } +#ifdef INET6 +static int +linux_to_bsd_icmp6_sockopt(int opt) +{ + + switch (opt) { + case LINUX_ICMP6_FILTER: + return (ICMP6_FILTER); + } + return (-1); +} +#endif + static int linux_to_bsd_msg_flags(int flags) { @@ -2175,6 +2189,29 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args) break; } break; +#ifdef INET6 + case IPPROTO_ICMPV6: { + struct icmp6_filter f; + int i; + + name = linux_to_bsd_icmp6_sockopt(args->optname); + if (name != ICMP6_FILTER) + break; + + if (args->optlen != sizeof(f)) + return (EINVAL); + + error = copyin(PTRIN(args->optval), &f, sizeof(f)); + if (error) + return (error); + + /* Linux uses opposite values for pass/block in ICMPv6 */ + for (i = 0; i < nitems(f.icmp6_filt); i++) + f.icmp6_filt[i] = ~f.icmp6_filt[i]; + return (kern_setsockopt(td, args->s, IPPROTO_ICMPV6, + ICMP6_FILTER, &f, UIO_SYSSPACE, sizeof(f))); + } +#endif case SOL_NETLINK: name = args->optname; break; @@ -2435,6 +2472,36 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) break; } break; +#ifdef INET6 + case IPPROTO_ICMPV6: { + struct icmp6_filter f; + int i; + + name = linux_to_bsd_icmp6_sockopt(args->optname); + if (name != ICMP6_FILTER) + break; + + error = copyin(PTRIN(args->optlen), &len, sizeof(len)); + if (error) + return (error); + if (len != sizeof(f)) + return (EINVAL); + + error = kern_getsockopt(td, args->s, IPPROTO_ICMPV6, + ICMP6_FILTER, &f, UIO_SYSSPACE, &len); + if (error) + return (error); + + /* Linux uses opposite values for pass/block in ICMPv6 */ + for (i = 0; i < nitems(f.icmp6_filt); i++) + f.icmp6_filt[i] = ~f.icmp6_filt[i]; + error = copyout(&f, PTRIN(args->optval), len); + if (error) + return (error); + + return (copyout(&len, PTRIN(args->optlen), sizeof(socklen_t))); + } +#endif default: name = -1; break; diff --git a/sys/compat/linux/linux_socket.h b/sys/compat/linux/linux_socket.h index f2a96b3e7dcb..d30d68409496 100644 --- a/sys/compat/linux/linux_socket.h +++ b/sys/compat/linux/linux_socket.h @@ -324,6 +324,8 @@ int linux_accept(struct thread *td, struct linux_accept_args *args); #define LINUX_TCP_MD5SIG 14 #define LINUX_TCP_USER_TIMEOUT 18 +#define LINUX_ICMP6_FILTER 1 + struct l_ifmap { l_ulong mem_start; l_ulong mem_end;