Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp2470777imm; Mon, 10 Sep 2018 01:29:25 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdac0YMqwiFBnXljlEpx8hMU7Q621WUOmXWPAG3k5cQLFDFumNktVbmHLXwoz51MU+mF6KLk X-Received: by 2002:a17:902:864b:: with SMTP id y11-v6mr20804289plt.335.1536568165599; Mon, 10 Sep 2018 01:29:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536568165; cv=none; d=google.com; s=arc-20160816; b=A+/Vb0fEO0f4GvRopg8LZ+ZnwA7nPSfV1i1qCK18q8W4N84yOfuqU5KUnCs/WAfGV8 0317N8rqRxL6ZCUgw+mMP6vMzyHQ9dFvtDovgYEUaefZuw3S2F3lND6vh6B0T9dxWsw2 HeY7AWI+gj7TX0PWIaR/QfYpv0sBuHx/SRjry6nQKqJXb5XKxB6anvzkmihOlZCnv2UR 4T3RYLlKIw8z+lBDZU2M+fWr+oRxguMTCX62g4+YFCIv2Yk/1ivJBkunw2qng/CA5PjR imLGHS3IhAlDdIgGt8cwExD9UY2q2zx91s1EhB6nXQGbF5CyFNfAvHYhahO7qe57KSnG kVlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=NtpmaRK8+dQOP+jqyjy301QZbo8/kU3iwE2oiaFn06w=; b=Kzpp1Xq9Tz/Nz8hpcmy1MtUcg9N+FDKgO7ayPSwjPRggG1qSP0igG+UBBDPmJdPY73 e3x2MfcwP4h9ZqmA08hYVy1ucQJzQ9bEFpBX2+3qlwv6XwbB+t2hCtvmB29+Ub+KlUs2 xGIRCljIfTX1v9eGyAK6yJLnH1bF9ak2AQYsmKih+jhFdAFh294Ad/WT8m22YyWi6CfI GgHkOXam2QEdS+trR82lY+2R7DY0+DpSF4JMKsgqkziP4/FP7vqMSPyhiO+Dd4u7rrw1 Lk86EZ00hznjppnVENkVba6tzVnDXea8/13ZV8ShjfBWMt37o4rmX8Tgo5J3kctYi6q0 Aagw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="pkeT/rbh"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b28-v6si15717426pfe.265.2018.09.10.01.29.10; Mon, 10 Sep 2018 01:29:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="pkeT/rbh"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727952AbeIJNU0 (ORCPT + 99 others); Mon, 10 Sep 2018 09:20:26 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:33471 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727593AbeIJNU0 (ORCPT ); Mon, 10 Sep 2018 09:20:26 -0400 Received: by mail-wm0-f66.google.com with SMTP id r1-v6so4774485wmh.0; Mon, 10 Sep 2018 01:27:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=NtpmaRK8+dQOP+jqyjy301QZbo8/kU3iwE2oiaFn06w=; b=pkeT/rbhJ5GWD5YnqeGcyKz5JfZzhvOiUx0s/p6druFzNR6GGdLkbguAFInKOlvGdN tfVHw8smH2jQ5nD4WgFfsO+rucaYwwEHuNkdc87wf0d30eQm47jnOpaSmP22H/s8D90G HGiFJgNIkkDRoqp9bW2RvgSg8k82ZZVTWmULf7EaNo0520gkA8HQUB0aYRzMN+kjmn4w NVSsgVPLAQFAu2Q2Q5uqFzECy3ikB9B4FkXgyvUCIcPCuiLTzefY5SsPIQB7DgPW+8Yi N+1qLr9L+JyevqjYtKSfK8/PiW+0dw2yJwIRF8MDFQLyTKmL84lv53/E/gqrsf2T3D6D 1TVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NtpmaRK8+dQOP+jqyjy301QZbo8/kU3iwE2oiaFn06w=; b=Pp7KQRT9c00ssc1O62qZ9563I+/XAxhBmfbIgL0K2QSgtfPtyVUVpN+5A7tHEe/Fk2 HTw3xZ4BP8XzUf/yL7/SixOJq/4Ru1sVwmjKHWdeU5tNVuvumoKQcazUE5E7LjkCCONh r3UvdREzioRfDrCQjptPpnSopV3xGyya/JG30dMEvZpmj/HtO8+65uahs723Eot1CdvQ h0v6DYPsD8CZRR28fTE1GuLuNxyciMIjMYCJXCVGrmE1gZyDW0RhsnAM5bncEyFwlbcE szSfffqlBAn0EoslJeKAXXGk2+Kz/s9V/MtBBR/z20yAWe1HnrHwR/IF1mkgpx6fFGly hu7g== X-Gm-Message-State: APzg51DqWEWrFF0UDy0v5D4jeKQ08Yi8INWO9t98Erh/kV5LQBS4VaiP OCqp5eiQDp1eQBMoTmBzbsDI9aLoOVc= X-Received: by 2002:a1c:b54b:: with SMTP id e72-v6mr12782672wmf.117.1536568052302; Mon, 10 Sep 2018 01:27:32 -0700 (PDT) Received: from Buzz.fritz.box (p200300EE0F0184008022AC53B7CF59F1.dip0.t-ipconnect.de. [2003:ee:f01:8400:8022:ac53:b7cf:59f1]) by smtp.gmail.com with ESMTPSA id 69-v6sm13236026wmb.27.2018.09.10.01.27.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Sep 2018 01:27:31 -0700 (PDT) From: Andre Naujoks To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, davem@davemloft.net, kuznet@ms2.inr.ac.ru, yoshfuji@linux-ipv6.org, Greg Kroah-Hartman , Erik Kline , Thomas Gleixner , =?UTF-8?q?Maciej=20=C5=BBenczykowski?= , Shaohua Li , Andre Naujoks , Kate Stewart , Philippe Ombredanne Subject: [PATCH 1/1] ipv6: Add sockopt IPV6_MULTICAST_ALL analogue to IP_MULTICAST_ALL Date: Mon, 10 Sep 2018 10:27:15 +0200 Message-Id: <20180910082715.11506-2-nautsch2@gmail.com> X-Mailer: git-send-email 2.19.0.rc2 In-Reply-To: <20180910082715.11506-1-nautsch2@gmail.com> References: <20180910082715.11506-1-nautsch2@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The socket option will be enabled by default to ensure current behaviour is not changed. This is the same for the IPv4 version. A socket bound to in6addr_any and a specific port will receive all traffic on that port. Analogue to IP_MULTICAST_ALL, disable this behaviour, if one or more multicast groups were joined (using said socket) and only pass on multicast traffic from groups, which were explicitly joined via this socket. Without this option disabled a socket (system even) joined to multiple multicast groups is very hard to get right. Filtering by destination address has to take place in user space to avoid receiving multicast traffic from other multicast groups, which might have traffic on the same port. The extension of the IP_MULTICAST_ALL socketoption to just apply to ipv6, too, is not done to avoid changing the behaviour of current applications. Signed-off-by: Andre Naujoks Acked-By: YOSHIFUJI Hideaki --- include/linux/ipv6.h | 3 ++- include/uapi/linux/in6.h | 1 + net/ipv6/af_inet6.c | 1 + net/ipv6/ipv6_sockglue.c | 11 +++++++++++ net/ipv6/mcast.c | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 8415bf1a9776..495e834c1367 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h @@ -274,7 +274,8 @@ struct ipv6_pinfo { */ dontfrag:1, autoflowlabel:1, - autoflowlabel_set:1; + autoflowlabel_set:1, + mc_all:1; __u8 min_hopcount; __u8 tclass; __be32 rcv_flowinfo; diff --git a/include/uapi/linux/in6.h b/include/uapi/linux/in6.h index ed291e55f024..71d82fe15b03 100644 --- a/include/uapi/linux/in6.h +++ b/include/uapi/linux/in6.h @@ -177,6 +177,7 @@ struct in6_flowlabel_req { #define IPV6_V6ONLY 26 #define IPV6_JOIN_ANYCAST 27 #define IPV6_LEAVE_ANYCAST 28 +#define IPV6_MULTICAST_ALL 29 /* IPV6_MTU_DISCOVER values */ #define IPV6_PMTUDISC_DONT 0 diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 9a4261e50272..77ef8478234f 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -209,6 +209,7 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol, np->hop_limit = -1; np->mcast_hops = IPV6_DEFAULT_MCASTHOPS; np->mc_loop = 1; + np->mc_all = 1; np->pmtudisc = IPV6_PMTUDISC_WANT; np->repflow = net->ipv6.sysctl.flowlabel_reflect; sk->sk_ipv6only = net->ipv6.sysctl.bindv6only; diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index c0cac9cc3a28..381ce38940ae 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -674,6 +674,13 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, retv = ipv6_sock_ac_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_acaddr); break; } + case IPV6_MULTICAST_ALL: + if (optlen < sizeof(int)) + goto e_inval; + np->mc_all = valbool; + retv = 0; + break; + case MCAST_JOIN_GROUP: case MCAST_LEAVE_GROUP: { @@ -1266,6 +1273,10 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, val = np->mcast_oif; break; + case IPV6_MULTICAST_ALL: + val = np->mc_all; + break; + case IPV6_UNICAST_IF: val = (__force int)htonl((__u32) np->ucast_oif); break; diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 4ae54aaca373..6895e1dc0b03 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c @@ -636,7 +636,7 @@ bool inet6_mc_check(struct sock *sk, const struct in6_addr *mc_addr, } if (!mc) { rcu_read_unlock(); - return true; + return np->mc_all; } read_lock(&mc->sflock); psl = mc->sflist; -- 2.19.0.rc2