From nobody Mon May 6 04:12:50 2024 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1616286178; cv=none; d=zohomail.com; s=zohoarc; b=degrEVHIYJ0DG9fP/do89uBO6FTTuZ8FGDDdz+pM+0dNHy2tTexdAUrOfie4i9jZSQatc596cww2mY9f9YprJy3RfN9O7bD8jT4TBZwI90zg7aHsYBI/e9WM34V/6lM/Xkuo2qdCIKNPSn3ACeZLr+IPWVTOMrgqdQAg9Jtj1S0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616286178; h=Content-Transfer-Encoding:Cc:Date:From:List-Id:MIME-Version:Message-ID:Subject:To; bh=uS2GL9FNMZtcgYHhCJWuNe0RNim05pdEWGybcXAmD70=; b=ACLjStRpmdTKlx4qT6Bs5PDzORNmmGik+HI4UppCGTutySaSW4xRhLwfpsD4dayzx+jySqkcU70yyYK6bJRu91fK//9ZY0DuI86GqhAjn6yiKyVEaeNaZPElS78LGxmIGRGBLGueb68FyzKZzBAKyXIcAjb3Aj2U4BFB1kbI66Y= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1616286178594451.8430804326259; Sat, 20 Mar 2021 17:22:58 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229952AbhCUAWX (ORCPT ); Sat, 20 Mar 2021 20:22:23 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:49209 "EHLO relay7-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229766AbhCUAVq (ORCPT ); Sat, 20 Mar 2021 20:21:46 -0400 Received: from enhorning.arpa1.net (host-95-232-69-74.retail.telecomitalia.it [95.232.69.74]) (Authenticated sender: pbl@bestov.io) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 2B15B20002; Sun, 21 Mar 2021 00:21:40 +0000 (UTC) X-Originating-IP: 95.232.69.74 From: Riccardo Paolo Bestetti Cc: Riccardo Paolo Bestetti , "David S. Miller" , Hideaki YOSHIFUJI , David Ahern , Jakub Kicinski , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] ipv4/raw: support binding to nonlocal addresses Date: Sun, 21 Mar 2021 01:20:45 +0100 Message-Id: <20210321002045.23700-1-pbl@bestov.io> X-Mailer: git-send-email 2.31.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add support to inet raw sockets for binding to nonlocal addresses through the IP_FREEBIND and IP_TRANSPARENT socket options, as well as the ipv4.ip_nonlocal_bind kernel parameter. Signed-off-by: Riccardo Paolo Bestetti --- net/ipv4/raw.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 50a73178d63a..734c0332b54b 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -717,6 +717,7 @@ static int raw_bind(struct sock *sk, struct sockaddr *u= addr, int addr_len) { struct inet_sock *inet =3D inet_sk(sk); struct sockaddr_in *addr =3D (struct sockaddr_in *) uaddr; + struct net *net =3D sock_net(sk); u32 tb_id =3D RT_TABLE_LOCAL; int ret =3D -EINVAL; int chk_addr_ret; @@ -732,7 +733,8 @@ static int raw_bind(struct sock *sk, struct sockaddr *u= addr, int addr_len) tb_id); =20 ret =3D -EADDRNOTAVAIL; - if (addr->sin_addr.s_addr && chk_addr_ret !=3D RTN_LOCAL && + if (!inet_can_nonlocal_bind(net, inet) && + addr->sin_addr.s_addr && chk_addr_ret !=3D RTN_LOCAL && chk_addr_ret !=3D RTN_MULTICAST && chk_addr_ret !=3D RTN_BROADCAST) goto out; inet->inet_rcv_saddr =3D inet->inet_saddr =3D addr->sin_addr.s_addr; --=20 2.31.0