From patchwork Thu Jan 10 14:25:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 1022954 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uwwYKmu4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43b7Zk1v0cz9sCs for ; Fri, 11 Jan 2019 01:25:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728843AbfAJOZt (ORCPT ); Thu, 10 Jan 2019 09:25:49 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:38988 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727768AbfAJOZs (ORCPT ); Thu, 10 Jan 2019 09:25:48 -0500 Received: by mail-wm1-f67.google.com with SMTP id y8so1630208wmi.4 for ; Thu, 10 Jan 2019 06:25:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=SPA9AluZ3QwxHHk3btpoyHmjKWTLd7NGXOGlnUdWw+w=; b=uwwYKmu4YkuvG33iH0LpeA6QV2DqnnrL7HqSTHvp5GrvHA4ErHnSaeWba78+qhT54+ +7HdRQvTabiuRawmdpyMEjhJf2c13hmgqi6qDMmOrrWHe8PHBkt1cx0ZcpGvU7VL7aCl r5+LDhc31fpbyRFQ0VRYx+w6Y7S2FJ3U8d8m/qQWR3puDmJ2YHvsRejxsVyynLifFTpA Kp5iWqEDcqOF8A5VOjf9+2+H6PVEwOAkPCAd4DNegfEPlYGLaN8nbSPbUoLv/lNrjLpS u6Ndu+zvvMIbM/PPi8fIzrHUCxuWQXphy55ysZV0p4NZIoH/y1g1DCPqbp7myy7p4R9h Hs+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=SPA9AluZ3QwxHHk3btpoyHmjKWTLd7NGXOGlnUdWw+w=; b=mA/qmW3IJSrOLhWSl6x+zjCt/cjhacnUFCEMo3csuAWZAICLwaEPEOnqqIdiNoP2Dg yyQ86JWE/EC14CuOm3OIEbQ8/gDR/BBoK2vg3Cq2ZuajZOpGi7AEzBank/cz98HgZf4S oJYz3tka25FfmA15hrt5LpVCGwhaNYxNGvbrNT85L6mBSmQWk7aavVKOcelHA+PzvPek 0uMJ6X3Z0xKZ9FbbaE1Na6ZQpMpbYoCgR0lX+Ltqpak1bVVu2uUwZHAneTCGF3lGlUyi 2dbifK8xZA4BQNLOMlEFpMH2Bzi8CAcbtF58OpweojI4WCLJMfrLDZg39gpCzUhe/1EB WZnA== X-Gm-Message-State: AJcUukeFslTDlpQT4QR1TbgT3+5dRcckMV9WG4hVRdPsLFEzQUcwaili 2WcS31CAjWDN61gYSNaOLh1Btybb X-Google-Smtp-Source: ALg8bN5nO/3DEhaIMVTDncCYLyViG8okrhSKXmK6uFYFbxnvN2bmmtfqSs1vTzJP+bqw2gdjdX9zBA== X-Received: by 2002:a1c:2d42:: with SMTP id t63mr10599826wmt.9.1547130345672; Thu, 10 Jan 2019 06:25:45 -0800 (PST) Received: from david-x1.fritz.box (p200300C2A71D0D0011DEB1B092EC6547.dip0.t-ipconnect.de. [2003:c2:a71d:d00:11de:b1b0:92ec:6547]) by smtp.gmail.com with ESMTPSA id a62sm14539812wmf.47.2019.01.10.06.25.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Jan 2019 06:25:44 -0800 (PST) From: David Herrmann To: netdev@vger.kernel.org Cc: davem@davemloft.net, teg@jklm.no, David Herrmann Subject: [PATCH 1/3] net: introduce SO_BINDTOIF sockopt Date: Thu, 10 Jan 2019 15:25:27 +0100 Message-Id: <20190110142529.14315-1-dh.herrmann@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This introduces a new generic SOL_SOCKET-level socket option called SO_BINDTOIF. It behaves similar to SO_BINDTODEVICE, but takes a network interface index as argument, rather than the network interface name. User-space often refers to network-interfaces via their index, but has to temporarily resolve it to a name for a call into SO_BINDTODEVICE. This might pose problems when the network-device is renamed asynchronously by other parts of the system. When this happens, the SO_BINDTODEVICE might either fail, or worse, it might bind to the wrong device. In most cases user-space only ever operates on devices which they either manage themselves, or otherwise have a guarantee that the device name will not change (e.g., devices that are UP cannot be renamed). However, particularly in libraries this guarantee is non-obvious and it would be nice if that race-condition would simply not exist. It would make it easier for those libraries to operate even in situations where the device-name might change under the hood. A real use-case that we recently hit is trying to start the network stack early in the initrd but make it survive into the real system. Existing distributions rename network-interfaces during the transition from initrd into the real system. This, obviously, cannot affect devices that are up and running (unless you also consider moving them between network-namespaces). However, the network manager now has to make sure its management engine for dormant devices will not run in parallel to these renames. Particularly, when you offload operations like DHCP into separate processes, these might setup their sockets early, and thus have to resolve the device-name possibly running into this race-condition. By avoiding a call to resolve the device-name, we no longer depend on the name and can run network setup of dormant devices in parallel to the transition off the initrd. The SO_BINDTOIF ioctl plugs this race. Signed-off-by: David Herrmann Reviewed-by: Tom Gundersen --- arch/alpha/include/uapi/asm/socket.h | 2 ++ arch/ia64/include/uapi/asm/socket.h | 2 ++ arch/mips/include/uapi/asm/socket.h | 2 ++ arch/parisc/include/uapi/asm/socket.h | 2 ++ arch/s390/include/uapi/asm/socket.h | 2 ++ arch/sparc/include/uapi/asm/socket.h | 2 ++ arch/xtensa/include/uapi/asm/socket.h | 2 ++ include/uapi/asm-generic/socket.h | 2 ++ net/core/sock.c | 46 +++++++++++++++++++++------ 9 files changed, 52 insertions(+), 10 deletions(-) diff --git a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi/asm/socket.h index 065fb372e355..6e346e51eec7 100644 --- a/arch/alpha/include/uapi/asm/socket.h +++ b/arch/alpha/include/uapi/asm/socket.h @@ -115,4 +115,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 62 + #endif /* _UAPI_ASM_SOCKET_H */ diff --git a/arch/ia64/include/uapi/asm/socket.h b/arch/ia64/include/uapi/asm/socket.h index c872c4e6bafb..ece83ba17b9d 100644 --- a/arch/ia64/include/uapi/asm/socket.h +++ b/arch/ia64/include/uapi/asm/socket.h @@ -117,4 +117,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 62 + #endif /* _ASM_IA64_SOCKET_H */ diff --git a/arch/mips/include/uapi/asm/socket.h b/arch/mips/include/uapi/asm/socket.h index 71370fb3ceef..27f7f761ace5 100644 --- a/arch/mips/include/uapi/asm/socket.h +++ b/arch/mips/include/uapi/asm/socket.h @@ -126,4 +126,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 62 + #endif /* _UAPI_ASM_SOCKET_H */ diff --git a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/uapi/asm/socket.h index 061b9cf2a779..efd3917f23e1 100644 --- a/arch/parisc/include/uapi/asm/socket.h +++ b/arch/parisc/include/uapi/asm/socket.h @@ -107,4 +107,6 @@ #define SO_TXTIME 0x4036 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 0x4037 + #endif /* _UAPI_ASM_SOCKET_H */ diff --git a/arch/s390/include/uapi/asm/socket.h b/arch/s390/include/uapi/asm/socket.h index 39d901476ee5..c8ba542e69e6 100644 --- a/arch/s390/include/uapi/asm/socket.h +++ b/arch/s390/include/uapi/asm/socket.h @@ -114,4 +114,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 62 + #endif /* _ASM_SOCKET_H */ diff --git a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h index 7ea35e5601b6..50006bde7dc0 100644 --- a/arch/sparc/include/uapi/asm/socket.h +++ b/arch/sparc/include/uapi/asm/socket.h @@ -104,6 +104,8 @@ #define SO_TXTIME 0x003f #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 0x0040 + /* Security levels - as per NRL IPv6 - don't actually do anything */ #define SO_SECURITY_AUTHENTICATION 0x5001 #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 diff --git a/arch/xtensa/include/uapi/asm/socket.h b/arch/xtensa/include/uapi/asm/socket.h index 1de07a7f7680..a36241ffbd86 100644 --- a/arch/xtensa/include/uapi/asm/socket.h +++ b/arch/xtensa/include/uapi/asm/socket.h @@ -119,4 +119,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 62 + #endif /* _XTENSA_SOCKET_H */ diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h index a12692e5f7a8..31fb8414ea4c 100644 --- a/include/uapi/asm-generic/socket.h +++ b/include/uapi/asm-generic/socket.h @@ -110,4 +110,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIF 62 + #endif /* __ASM_GENERIC_SOCKET_H */ diff --git a/net/core/sock.c b/net/core/sock.c index 6aa2e7e0b4fb..df8f83bc22b3 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -520,20 +520,43 @@ struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie) } EXPORT_SYMBOL(sk_dst_check); -static int sock_setbindtodevice(struct sock *sk, char __user *optval, - int optlen) +static int sock_setbindtodevice_locked(struct sock *sk, int ifindex) { int ret = -ENOPROTOOPT; #ifdef CONFIG_NETDEVICES struct net *net = sock_net(sk); - char devname[IFNAMSIZ]; - int index; /* Sorry... */ ret = -EPERM; if (!ns_capable(net->user_ns, CAP_NET_RAW)) goto out; + ret = -EINVAL; + if (ifindex < 0) + goto out; + + sk->sk_bound_dev_if = ifindex; + if (sk->sk_prot->rehash) + sk->sk_prot->rehash(sk); + sk_dst_reset(sk); + + ret = 0; + +out: +#endif + + return ret; +} + +static int sock_setbindtodevice(struct sock *sk, char __user *optval, + int optlen) +{ + int ret = -ENOPROTOOPT; +#ifdef CONFIG_NETDEVICES + struct net *net = sock_net(sk); + char devname[IFNAMSIZ]; + int index; + ret = -EINVAL; if (optlen < 0) goto out; @@ -566,14 +589,9 @@ static int sock_setbindtodevice(struct sock *sk, char __user *optval, } lock_sock(sk); - sk->sk_bound_dev_if = index; - if (sk->sk_prot->rehash) - sk->sk_prot->rehash(sk); - sk_dst_reset(sk); + ret = sock_setbindtodevice_locked(sk, index); release_sock(sk); - ret = 0; - out: #endif @@ -1055,6 +1073,10 @@ int sock_setsockopt(struct socket *sock, int level, int optname, } break; + case SO_BINDTOIF: + ret = sock_setbindtodevice_locked(sk, val); + break; + default: ret = -ENOPROTOOPT; break; @@ -1399,6 +1421,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname, SOF_TXTIME_REPORT_ERRORS : 0; break; + case SO_BINDTOIF: + v.val = sk->sk_bound_dev_if; + break; + default: /* We implement the SO_SNDLOWAT etc to not be settable * (1003.1g 7). From patchwork Thu Jan 10 14:25:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 1022956 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="e+uSteXo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43b7Zq4Lxjz9sCs for ; Fri, 11 Jan 2019 01:25:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728902AbfAJOZx (ORCPT ); Thu, 10 Jan 2019 09:25:53 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:37966 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728191AbfAJOZu (ORCPT ); Thu, 10 Jan 2019 09:25:50 -0500 Received: by mail-wm1-f66.google.com with SMTP id m22so12314847wml.3 for ; Thu, 10 Jan 2019 06:25:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qt/JVqnKpE6WT3N5Cq8SYedH8jeFW6IHkCF1PNL6ckg=; b=e+uSteXoOOWkwUkpA+SJoYqiFOJ1CPfN5r2VRAfkWKWFgFZxIq+IB5Gy6pcc4V2skP 7a1xIPfBAer87fcH8vS8NaxePbX/bOD//tZOsQUnHveIGNZr1r+FWHIIX8MGZYToz6xR AcYy/Ll3iQ6aZJPfTHuyITvy9hy/TUHq99h3WfU+rgf/ANDuXQZ3tUHXQCO5Lr8/BKoX gmRDd9M7qU7vB/bVC9zq9mycbM5LAtbftGfkE78QGAkziwdvDzn7aMMNifw5PtXyLPwl rI5u1cIekZuhiSoYl4tWwCjeaPnX7Cu1xNUrY0oI+WfIJy2rJmGJv4zFXqtb2m9p/Jtt XM1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qt/JVqnKpE6WT3N5Cq8SYedH8jeFW6IHkCF1PNL6ckg=; b=RtylrSL0M7YE3S9QnwYu3YumIUM7Dm67hJZjifyaHEUVfSK4cUfdi7UY5xoZhRjEW9 R/eh4yLUUXe03X2KfcsiXHujoZEK+zmKA5CFWca+oYDkG/Buf3EDmPnLN9DbKbuLXFbL UG/hWF0xD0Tw5MBT8F8ZJ9ynnAHkfYf/n9LNYjlHxAPoS/C3iK+nyXidpiHzLeZgz706 6U/CgrC6zbnFCYxFwU5ymgWrsfqaowVr9L4XF9JifIu17V5TGNVJVBHRRpyyhP/wpfkL Ie8WZBK/IyWB+zHaj1VQeNnge0U23zAUdpKs37T/tkNZB/wyQVa6ahwaFeV3WIR31WAy L2Dw== X-Gm-Message-State: AJcUukcF0g3c2JfGl/cOFJ04jq1someCQzDxCQWWxbzlaaEeUmNgo9yv +sY1I2lo5Vy5b6CBn/bPVHcY/qra X-Google-Smtp-Source: ALg8bN7V3qSneDgKyCT4zol5av/lPICf8eihpLSPA5uLuMgxiK/YZ7DI9kdHRSoKX5pvM75DTvL5UA== X-Received: by 2002:a7b:cd85:: with SMTP id y5mr9658586wmj.129.1547130346929; Thu, 10 Jan 2019 06:25:46 -0800 (PST) Received: from david-x1.fritz.box (p200300C2A71D0D0011DEB1B092EC6547.dip0.t-ipconnect.de. [2003:c2:a71d:d00:11de:b1b0:92ec:6547]) by smtp.gmail.com with ESMTPSA id a62sm14539812wmf.47.2019.01.10.06.25.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Jan 2019 06:25:46 -0800 (PST) From: David Herrmann To: netdev@vger.kernel.org Cc: davem@davemloft.net, teg@jklm.no, David Herrmann Subject: [PATCH 2/3] net/ipv4/udp_tunnel: prefer SO_BINDTOIF over SO_BINDTODEVICE Date: Thu, 10 Jan 2019 15:25:28 +0100 Message-Id: <20190110142529.14315-2-dh.herrmann@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190110142529.14315-1-dh.herrmann@gmail.com> References: <20190110142529.14315-1-dh.herrmann@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The udp-tunnel setup allows binding sockets to a network device. Prefer the new SO_BINDTOIF to avoid temporarily resolving the device-name just to look it up in the ioctl again. Signed-off-by: David Herrmann Reviewed-by: Tom Gundersen --- net/ipv4/udp_tunnel.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/net/ipv4/udp_tunnel.c b/net/ipv4/udp_tunnel.c index be8b5b2157d8..5d26c501da3b 100644 --- a/net/ipv4/udp_tunnel.c +++ b/net/ipv4/udp_tunnel.c @@ -21,18 +21,9 @@ int udp_sock_create4(struct net *net, struct udp_port_cfg *cfg, goto error; if (cfg->bind_ifindex) { - struct net_device *dev; - - dev = dev_get_by_index(net, cfg->bind_ifindex); - if (!dev) { - err = -ENODEV; - goto error; - } - - err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, - dev->name, strlen(dev->name) + 1); - dev_put(dev); - + err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTOIF, + (void *)&cfg->bind_ifindex, + sizeof(cfg->bind_ifindex)); if (err < 0) goto error; } From patchwork Thu Jan 10 14:25:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 1022955 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="n7zFGjSx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43b7Zm4TCJz9sDL for ; Fri, 11 Jan 2019 01:25:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728891AbfAJOZv (ORCPT ); Thu, 10 Jan 2019 09:25:51 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:54795 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727768AbfAJOZt (ORCPT ); Thu, 10 Jan 2019 09:25:49 -0500 Received: by mail-wm1-f67.google.com with SMTP id a62so11456755wmh.4 for ; Thu, 10 Jan 2019 06:25:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=c4s/UeBNJyzkc46ir9reiIXRjKNXrptY4vgCWcinp4I=; b=n7zFGjSxQ/uuD7KMYVXBg/udajkGwdHnpDXLnD4Vv2MwFFXAmqy+S/bDCDQpmbIgoI uDUck6b7MNq4LIwmW2bSdt7YEu73vV98JgoHyTRTubNhfBpb22z3T/5nR+PXjq1C1+F4 B4nY5Abms6+g38bw/lvq00OwhAxF11jVCzBBn3446i89ZonNRsD+V38oOMcW7DqvG1rb dyFUPyBwYWKJ7S8S5gJvuG/k6X8T3CmO5nY19xQf3optLtBnUdC6No+m8SoVXfjNE6nE LmbQP+ZtDkqSy8Uj74j6ygbNbW7bTRxnOmNZ+wcKlJ4WaWt+286ygjoy1lBLDDMZz9YZ vD2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=c4s/UeBNJyzkc46ir9reiIXRjKNXrptY4vgCWcinp4I=; b=L5flWVTeddj37l7w4I1GJAAvJr+1q726AY8627/hVtAvAwRCYk0S1xzWpg3XNb07xI 5lbUHNG60xXCOE9DQ2V3uhKN2pvtrSlTwcqq4l8rUaxEU0bqfhitKYHFcGHztPOntQdC vQfrccCnzrsh8Xe5m52eeF1xMo+q/VNPeFJBIfQDVRs+fYbbDAV2mefLA8MUdzIC68Ht WfemlMjC7EWr1AC/l8uJnq1+x17cMsZJL2KF2qTF3HpmLtTLOc4UjOL1TTQduTfLhyAi uYBHRtnZMlajX7uHs9R9Tv5cyDZRBK0qkMjFmDJ58vnc7YK69FblzDJP2u+VtBK0deN7 hUhg== X-Gm-Message-State: AJcUukcl/n6nN9wX5Tu3Gs9sPC4y7Boso2xPyPkWlz/synpV3X6bAGEC r1pdA1tQcEnrdDLoQbqvDr5RB++j X-Google-Smtp-Source: ALg8bN4nE861JRcQYOOXhv9xlCXvsiVimzjjrsqfwnIU0SCkpGaUMA5uiMHztfNCJDUqrnmDRey7tA== X-Received: by 2002:a1c:c70f:: with SMTP id x15mr10056384wmf.130.1547130348180; Thu, 10 Jan 2019 06:25:48 -0800 (PST) Received: from david-x1.fritz.box (p200300C2A71D0D0011DEB1B092EC6547.dip0.t-ipconnect.de. [2003:c2:a71d:d00:11de:b1b0:92ec:6547]) by smtp.gmail.com with ESMTPSA id a62sm14539812wmf.47.2019.01.10.06.25.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Jan 2019 06:25:47 -0800 (PST) From: David Herrmann To: netdev@vger.kernel.org Cc: davem@davemloft.net, teg@jklm.no, David Herrmann Subject: [PATCH 3/3] net/ipv6/udp_tunnel: prefer SO_BINDTOIF over SO_BINDTODEVICE Date: Thu, 10 Jan 2019 15:25:29 +0100 Message-Id: <20190110142529.14315-3-dh.herrmann@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190110142529.14315-1-dh.herrmann@gmail.com> References: <20190110142529.14315-1-dh.herrmann@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The udp-tunnel setup allows binding sockets to a network device. Prefer the new SO_BINDTOIF to avoid temporarily resolving the device-name just to look it up in the ioctl again. Signed-off-by: David Herrmann Reviewed-by: Tom Gundersen --- net/ipv6/ip6_udp_tunnel.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/net/ipv6/ip6_udp_tunnel.c b/net/ipv6/ip6_udp_tunnel.c index ad1a9ccd4b44..f5fd4e05ae81 100644 --- a/net/ipv6/ip6_udp_tunnel.c +++ b/net/ipv6/ip6_udp_tunnel.c @@ -32,18 +32,9 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg *cfg, goto error; } if (cfg->bind_ifindex) { - struct net_device *dev; - - dev = dev_get_by_index(net, cfg->bind_ifindex); - if (!dev) { - err = -ENODEV; - goto error; - } - - err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, - dev->name, strlen(dev->name) + 1); - dev_put(dev); - + err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTOIF, + (void *)&cfg->bind_ifindex, + sizeof(cfg->bind_ifindex)); if (err < 0) goto error; }