From patchwork Mon Oct 15 17:27:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Stringer X-Patchwork-Id: 984296 X-Patchwork-Delegate: bpf@iogearbox.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=none (p=none dis=none) header.from=wand.net.nz Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="u43JTc3W"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42Yll32rf9z9s9J for ; Tue, 16 Oct 2018 04:27:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726869AbeJPBOH (ORCPT ); Mon, 15 Oct 2018 21:14:07 -0400 Received: from mail-qt1-f193.google.com ([209.85.160.193]:42456 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726638AbeJPBOG (ORCPT ); Mon, 15 Oct 2018 21:14:06 -0400 Received: by mail-qt1-f193.google.com with SMTP id j46-v6so22381995qtc.9 for ; Mon, 15 Oct 2018 10:27:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=DO2iHdGPc1UQjSKr+ZBrBixnNmlTOBzbp6dzIJnkrrM=; b=u43JTc3WPpWtPqjAzmdiwdSDUDTb8Kx6gbFjXcP+RjPHLKo4kHQi4cgFIpddYCByDQ 3yUvkCVaFRmVZ8qQkGzWROY+oXe9aqS5I1GJMmuqaPkNqLnFY3LT9c/g7RdT9NjIj+uC swrR+el/wEf2IzDUa9IFAUbS2lVIHWunrdsuPWwkFo6VLJw3vXiuUCrFBEddCXkAfuvh kHmUqnnorUJdCXmFn1EmeORy8hNhJPhEYBVNiGd8XveSPuM+wpBR2//FN455Aw5j0B2K UtTb9efUzLxdO2xq+R9no8Nk7m+ScP/0gtJuT2nzjixbkIP0xJZZyPpjwXg6XEfT6Ic+ GeNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=DO2iHdGPc1UQjSKr+ZBrBixnNmlTOBzbp6dzIJnkrrM=; b=szscLyGzyZpQli8sQ1aevtF55cWraZlIC9pigwUZGOAs7m+gq4J3EB8yYIZhI3kT7E /K0HjITMYggIHP8nERQS5YZ1ZhUYMN6IlYyugZhgcaV/2nILjbF94X/YQ7eq8Xzx2GnH E42hJ3B+g3i+4FUpiR2kXL7XgFUOlGicql3dUdqhCpWFsDQEgETettk17de7LAwDTTGb JA3+dIjT6jq2cn0BwlMDLT6LxU59SJ7jTOU4ri0lz0xg4W+3muXHIFwtFE4oZMC5ugLH JMNAMzUHBIROxEff9zINpPL0fuL9MMXcrceSiTSO0CHMIZv0lKdK16n8rjf0LaTTlSIr 95fA== X-Gm-Message-State: ABuFfojwhtD0QskBUzacnFin4ROBO7oyr69qEs2szTz/u4mYSBK9WzSW OYCFLgdMLSlrU8lHQQ8vMq4= X-Google-Smtp-Source: ACcGV60zzSoqUQ6dxq/qqolen+rwSQvZr/nDr1/xffCPwonMwXrvxwlyXyj0vvFK2IOKOzLbXHhGKw== X-Received: by 2002:a0c:8ec9:: with SMTP id y9mr9548632qvb.65.1539624475831; Mon, 15 Oct 2018 10:27:55 -0700 (PDT) Received: from localhost.localdomain ([99.0.85.34]) by smtp.gmail.com with ESMTPSA id n67-v6sm10346113qkh.66.2018.10.15.10.27.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Oct 2018 10:27:55 -0700 (PDT) From: Joe Stringer To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org Subject: [PATCH bpf-next 1/2] bpf: Allow sk_lookup with IPv6 module Date: Mon, 15 Oct 2018 10:27:45 -0700 Message-Id: <20181015172746.6475-2-joe@wand.net.nz> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181015172746.6475-1-joe@wand.net.nz> References: <20181015172746.6475-1-joe@wand.net.nz> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This is a more complete fix than d71019b54bff ("net: core: Fix build with CONFIG_IPV6=m"), so that IPv6 sockets may be looked up if the IPv6 module is loaded (not just if it's compiled in). Signed-off-by: Joe Stringer --- include/net/addrconf.h | 5 +++++ net/core/filter.c | 12 +++++++----- net/ipv6/af_inet6.c | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 6def0351bcc3..14b789a123e7 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h @@ -265,6 +265,11 @@ extern const struct ipv6_stub *ipv6_stub __read_mostly; struct ipv6_bpf_stub { int (*inet6_bind)(struct sock *sk, struct sockaddr *uaddr, int addr_len, bool force_bind_address_no_port, bool with_lock); + struct sock *(*udp6_lib_lookup)(struct net *net, + const struct in6_addr *saddr, __be16 sport, + const struct in6_addr *daddr, __be16 dport, + int dif, int sdif, struct udp_table *tbl, + struct sk_buff *skb); }; extern const struct ipv6_bpf_stub *ipv6_bpf_stub __read_mostly; diff --git a/net/core/filter.c b/net/core/filter.c index b844761b5d4c..21aba2a521c7 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4842,7 +4842,7 @@ static struct sock *sk_lookup(struct net *net, struct bpf_sock_tuple *tuple, sk = __udp4_lib_lookup(net, src4, tuple->ipv4.sport, dst4, tuple->ipv4.dport, dif, sdif, &udp_table, skb); -#if IS_REACHABLE(CONFIG_IPV6) +#if IS_ENABLED(CONFIG_IPV6) } else { struct in6_addr *src6 = (struct in6_addr *)&tuple->ipv6.saddr; struct in6_addr *dst6 = (struct in6_addr *)&tuple->ipv6.daddr; @@ -4853,10 +4853,12 @@ static struct sock *sk_lookup(struct net *net, struct bpf_sock_tuple *tuple, src6, tuple->ipv6.sport, dst6, tuple->ipv6.dport, dif, sdif, &refcounted); - else - sk = __udp6_lib_lookup(net, src6, tuple->ipv6.sport, - dst6, tuple->ipv6.dport, - dif, sdif, &udp_table, skb); + else if (likely(ipv6_bpf_stub)) + sk = ipv6_bpf_stub->udp6_lib_lookup(net, + src6, tuple->ipv6.sport, + dst6, tuple->ipv6.dport, + dif, sdif, + &udp_table, skb); #endif } diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index e9c8cfdf4b4c..3f4d61017a69 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -901,6 +901,7 @@ static const struct ipv6_stub ipv6_stub_impl = { static const struct ipv6_bpf_stub ipv6_bpf_stub_impl = { .inet6_bind = __inet6_bind, + .udp6_lib_lookup = __udp6_lib_lookup, }; static int __init inet6_init(void) From patchwork Mon Oct 15 17:27:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Stringer X-Patchwork-Id: 984297 X-Patchwork-Delegate: bpf@iogearbox.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=none (p=none dis=none) header.from=wand.net.nz Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HRCQIOQu"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42Yll42cDmz9s8F for ; Tue, 16 Oct 2018 04:28:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726880AbeJPBOJ (ORCPT ); Mon, 15 Oct 2018 21:14:09 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:35231 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbeJPBOI (ORCPT ); Mon, 15 Oct 2018 21:14:08 -0400 Received: by mail-qt1-f195.google.com with SMTP id d21-v6so10004717qtq.2 for ; Mon, 15 Oct 2018 10:27:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=AyMpOO2hkNhGLi1tnF+bLoquEERvWA20WczedaWlSNQ=; b=HRCQIOQu6L5iUDaG+H+a/OAsBW0Rv8yPiNSord2IH7mp1ESfP6lKMaprv6njxg+aX1 Iy6A0wFNiusfYc4uPaRSZyxAACeKgho0eOk3fKOXOMx8ptKaOaJQ/DchZr729VVSHuGS wv+oMbOEfpy4ZmEesfBzeqaoPeJ/QAJmEwyvfyWExKM3yU4md0uenOKjCHJjPgij1x9i zyiNaHXyQwndSJYKnRrqhUh7TkLUFvgUFmTjQZc2138gMAatB9Wod4A6jjwtrMh8Vu5o GWwuRzPu0e/WWm/aEnioNHWD+uCvZQ+wAp/3DKO1ZJXoaQ9zItZJRxm5ajgcpNn7/TiW eXSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=AyMpOO2hkNhGLi1tnF+bLoquEERvWA20WczedaWlSNQ=; b=K7fsSz1LZqii1gF1HEvndgfGbZ+/WDbEfDh4kaKQbf/16Cy4oSHhdlmPTpEtyWIg5M 4e7rbCh5Gzz6/4jzqPJlE+0oRgq5kr8tVtfK7daCmhZufjJ3mDfBt7TO0v6Ll/irF7cU O5fpMtBUCSypiwiCbjayE+dYDG14W4ZnHUfZcBJM4Opx6laKleebjh3+rKFQM/0iMX10 48OmVLnCCACJjo84Um9bXwjCdWcFCMhMgKaSb7NATlmRkFoZhKReOZpK6Atufv6jin9W ZohmqDBUqV0YiSf868hsoid2tVfv9zhgIyiW1Xk2RDmK56MaewaAe/tTRDBOaGYIg63M CUkA== X-Gm-Message-State: ABuFfohwZUD2HOqFmoVPWOtFhwEfBkZyBcrdVqWfY5slSQhn9H4sw3Pz /FKkSXilZ5cHKJGQSBReI5s= X-Google-Smtp-Source: ACcGV62Sq+ytF4YOVGJ6nTNA4D/6Cv3VF4aX5lBW4Vckig+bRFpPxBqzBsOBAVdR9muo210RHZNwDw== X-Received: by 2002:a0c:c901:: with SMTP id r1mr17984145qvj.170.1539624477161; Mon, 15 Oct 2018 10:27:57 -0700 (PDT) Received: from localhost.localdomain ([99.0.85.34]) by smtp.gmail.com with ESMTPSA id n67-v6sm10346113qkh.66.2018.10.15.10.27.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Oct 2018 10:27:56 -0700 (PDT) From: Joe Stringer To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org Subject: [PATCH bpf-next 2/2] bpf: Fix IPv6 dport byte-order in bpf_sk_lookup Date: Mon, 15 Oct 2018 10:27:46 -0700 Message-Id: <20181015172746.6475-3-joe@wand.net.nz> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181015172746.6475-1-joe@wand.net.nz> References: <20181015172746.6475-1-joe@wand.net.nz> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit 6acc9b432e67 ("bpf: Add helper to retrieve socket in BPF") mistakenly passed the destination port in network byte-order to the IPv6 TCP/UDP socket lookup functions, which meant that BPF writers would need to either manually swap the byte-order of this field or otherwise IPv6 sockets could not be located via this helper. Fix the issue by swapping the byte-order appropriately in the helper. This also makes the API more consistent with the IPv4 version. Fixes: 6acc9b432e67 ("bpf: Add helper to retrieve socket in BPF") Signed-off-by: Joe Stringer --- net/core/filter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index 21aba2a521c7..d877c4c599ce 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4846,17 +4846,18 @@ static struct sock *sk_lookup(struct net *net, struct bpf_sock_tuple *tuple, } else { struct in6_addr *src6 = (struct in6_addr *)&tuple->ipv6.saddr; struct in6_addr *dst6 = (struct in6_addr *)&tuple->ipv6.daddr; + u16 hnum = ntohs(tuple->ipv6.dport); int sdif = inet6_sdif(skb); if (proto == IPPROTO_TCP) sk = __inet6_lookup(net, &tcp_hashinfo, skb, 0, src6, tuple->ipv6.sport, - dst6, tuple->ipv6.dport, + dst6, hnum, dif, sdif, &refcounted); else if (likely(ipv6_bpf_stub)) sk = ipv6_bpf_stub->udp6_lib_lookup(net, src6, tuple->ipv6.sport, - dst6, tuple->ipv6.dport, + dst6, hnum, dif, sdif, &udp_table, skb); #endif