From patchwork Fri Jan 18 00:41:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1027062 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=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="Gy0cG4cs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43ghvg230Zz9sDr for ; Fri, 18 Jan 2019 11:41:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726517AbfARAlP (ORCPT ); Thu, 17 Jan 2019 19:41:15 -0500 Received: from mail-io1-f74.google.com ([209.85.166.74]:34630 "EHLO mail-io1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725982AbfARAlO (ORCPT ); Thu, 17 Jan 2019 19:41:14 -0500 Received: by mail-io1-f74.google.com with SMTP id q16so8880965ios.1 for ; Thu, 17 Jan 2019 16:41:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=mKuzY+RrONFNfr6GgEzOJRFN6u3Ye2Ipp5sfARH6pKE=; b=Gy0cG4csdchxzsy9bKZ0z7QIRvlCEZxBwCWwVbBc55lK7TIOlR9wuV0yGS9j3aZA2H tHx96oEYHTbyPK9Q/WkXIqlioce0k+aPiZvHa8WP1Eksj9oDG8hk3sM8g2PVVUj00lEf EaZvSO8OSZfhjfDxh7/Jw5onLX2hvuERf+E+JxY5y2PMWBzhk0U27UfqpPuXS3d5T4DF tCATo+jqppasbCpIQ7fu94LkA+jtOwjjAX6u3WyO/7MO/+ekaUCE2iGSgRj8SzN1geYd 5f6P3b1Qh7famG2C9LieltdJyo2G8jc40zJGdBW3g8QLa3NSYomrj61SkmyAeNJOmaRB eJZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=mKuzY+RrONFNfr6GgEzOJRFN6u3Ye2Ipp5sfARH6pKE=; b=NwYcBj5tEUwOaiMuFIage6xzF81RxXJlbBwWtwFSr4jrsWVG+SpMiLTX5+maanxsG/ n3Gm3Ie4aTJX8MSb+GyaNIqkubNl/O0Zd3wnIaN4/uWrMrUmc513AdBD517WDuqgxOBj bzmos80iU7Velo15itTDYC86QmgBk9uBUludBVX1ellEGMwQ93J65kjqKPQeL1Fm9yvk Z3okivC3GK5TcuiYmCW3tDY5QwtaV1NmghNZLpnenaA1GVBGlpTK1ud62Naa7Gvv/tqH BM0CN7H7o9tdDd1HBug+UomIk6BhAb7MnXM609cOBLVXwdsQJoheAjt2phpjynq8Bded LjfQ== X-Gm-Message-State: AJcUuketKsoqd2D3J4BBA5nQ+42qIYrW3WDGQNyqe3KFZLIrQZabBlK7 0qO8NV+OHhFM3vPuTiJ+m+UDmz6MczWb1ib+0ikXwxW8y4l13efnMHZrDP6tjzYgBQFS1nTwQS4 O6rWc24MEPZEohfixJOfERCJs2w8r8OlBUpWT2Hm+3NxNnh+mumU3tQ== X-Google-Smtp-Source: ALg8bN4U4N8zExsqpYkepqmLcQN8Ag3yjxK2hT9iJj49UyMb81jeb/hDUHwrtLPc0qQfkJBnRqF9T+I= X-Received: by 2002:a24:194e:: with SMTP id b75mr2643572itb.36.1547772073177; Thu, 17 Jan 2019 16:41:13 -0800 (PST) Date: Thu, 17 Jan 2019 16:41:02 -0800 In-Reply-To: <20190118004106.163825-1-sdf@google.com> Message-Id: <20190118004106.163825-2-sdf@google.com> Mime-Version: 1.0 References: <20190118004106.163825-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.321.g9e740568ce-goog Subject: [PATCH bpf-next 1/5] bpf: add BPF_CGROUP_INET{4, 6}_SOCK_RELEASE hooks From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org These hooks mirror existing BPF_CGROUP_INET{4,6}_SOCK hooks (which trigger upon socket creation), but trigger when the socket is closed. Signed-off-by: Stanislav Fomichev --- include/linux/bpf-cgroup.h | 6 ++++++ include/net/inet_common.h | 1 + include/uapi/linux/bpf.h | 2 ++ kernel/bpf/syscall.c | 8 ++++++++ net/core/filter.c | 7 +++++++ net/ipv4/af_inet.c | 13 ++++++++++++- net/ipv6/af_inet6.c | 5 ++++- 7 files changed, 40 insertions(+), 2 deletions(-) diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h index 588dd5f0bd85..31fcfe215d80 100644 --- a/include/linux/bpf-cgroup.h +++ b/include/linux/bpf-cgroup.h @@ -176,6 +176,12 @@ int bpf_percpu_cgroup_storage_update(struct bpf_map *map, void *key, #define BPF_CGROUP_RUN_PROG_INET_SOCK(sk) \ BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET_SOCK_CREATE) +#define BPF_CGROUP_RUN_PROG_INET4_SOCK_RELEASE(sk) \ + BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET4_SOCK_RELEASE) + +#define BPF_CGROUP_RUN_PROG_INET6_SOCK_RELEASE(sk) \ + BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET6_SOCK_RELEASE) + #define BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk) \ BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET4_POST_BIND) diff --git a/include/net/inet_common.h b/include/net/inet_common.h index 975901a95c0f..0e64046afe30 100644 --- a/include/net/inet_common.h +++ b/include/net/inet_common.h @@ -17,6 +17,7 @@ struct sockaddr; struct socket; int inet_release(struct socket *sock); +int __inet_release(struct socket *sock); int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags); int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 91c43884f295..8e78aa28a42e 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -186,6 +186,8 @@ enum bpf_attach_type { BPF_CGROUP_UDP6_SENDMSG, BPF_LIRC_MODE2, BPF_FLOW_DISSECTOR, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET6_SOCK_RELEASE, __MAX_BPF_ATTACH_TYPE }; diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index b155cd17c1bd..6fa113448580 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -1417,6 +1417,8 @@ bpf_prog_load_check_attach_type(enum bpf_prog_type prog_type, case BPF_PROG_TYPE_CGROUP_SOCK: switch (expected_attach_type) { case BPF_CGROUP_INET_SOCK_CREATE: + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: case BPF_CGROUP_INET4_POST_BIND: case BPF_CGROUP_INET6_POST_BIND: return 0; @@ -1709,6 +1711,8 @@ static int bpf_prog_attach(const union bpf_attr *attr) ptype = BPF_PROG_TYPE_CGROUP_SKB; break; case BPF_CGROUP_INET_SOCK_CREATE: + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: case BPF_CGROUP_INET4_POST_BIND: case BPF_CGROUP_INET6_POST_BIND: ptype = BPF_PROG_TYPE_CGROUP_SOCK; @@ -1791,6 +1795,8 @@ static int bpf_prog_detach(const union bpf_attr *attr) ptype = BPF_PROG_TYPE_CGROUP_SKB; break; case BPF_CGROUP_INET_SOCK_CREATE: + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: case BPF_CGROUP_INET4_POST_BIND: case BPF_CGROUP_INET6_POST_BIND: ptype = BPF_PROG_TYPE_CGROUP_SOCK; @@ -1841,6 +1847,8 @@ static int bpf_prog_query(const union bpf_attr *attr, case BPF_CGROUP_INET_INGRESS: case BPF_CGROUP_INET_EGRESS: case BPF_CGROUP_INET_SOCK_CREATE: + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: case BPF_CGROUP_INET4_BIND: case BPF_CGROUP_INET6_BIND: case BPF_CGROUP_INET4_POST_BIND: diff --git a/net/core/filter.c b/net/core/filter.c index 2b3b436ef545..b4da6793fdbc 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -5885,12 +5885,16 @@ static bool __sock_filter_check_attach_type(int off, switch (attach_type) { case BPF_CGROUP_INET_SOCK_CREATE: goto full_access; + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: + goto read_only; default: return false; } case bpf_ctx_range(struct bpf_sock, src_ip4): switch (attach_type) { case BPF_CGROUP_INET4_POST_BIND: + case BPF_CGROUP_INET4_SOCK_RELEASE: goto read_only; default: return false; @@ -5898,6 +5902,7 @@ static bool __sock_filter_check_attach_type(int off, case bpf_ctx_range_till(struct bpf_sock, src_ip6[0], src_ip6[3]): switch (attach_type) { case BPF_CGROUP_INET6_POST_BIND: + case BPF_CGROUP_INET6_SOCK_RELEASE: goto read_only; default: return false; @@ -5906,6 +5911,8 @@ static bool __sock_filter_check_attach_type(int off, switch (attach_type) { case BPF_CGROUP_INET4_POST_BIND: case BPF_CGROUP_INET6_POST_BIND: + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: goto read_only; default: return false; diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 0dfb72c46671..b703ad242365 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -403,7 +403,7 @@ static int inet_create(struct net *net, struct socket *sock, int protocol, * function we are destroying the object and from then on nobody * should refer to it. */ -int inet_release(struct socket *sock) +int __inet_release(struct socket *sock) { struct sock *sk = sock->sk; @@ -429,6 +429,17 @@ int inet_release(struct socket *sock) } return 0; } +EXPORT_SYMBOL(__inet_release); + +int inet_release(struct socket *sock) +{ + struct sock *sk = sock->sk; + + if (sk && !sk->sk_kern_sock) + BPF_CGROUP_RUN_PROG_INET4_SOCK_RELEASE(sk); + + return __inet_release(sock); +} EXPORT_SYMBOL(inet_release); int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index d99753b5e39b..44c86595eba8 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -464,13 +464,16 @@ int inet6_release(struct socket *sock) if (!sk) return -EINVAL; + if (!sk->sk_kern_sock) + BPF_CGROUP_RUN_PROG_INET6_SOCK_RELEASE(sock->sk); + /* Free mc lists */ ipv6_sock_mc_close(sk); /* Free ac lists */ ipv6_sock_ac_close(sk); - return inet_release(sock); + return __inet_release(sock); } EXPORT_SYMBOL(inet6_release); From patchwork Fri Jan 18 00:41:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1027063 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=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="tGNsCfap"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43ghvh0C6Mz9sCh for ; Fri, 18 Jan 2019 11:41:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726682AbfARAlR (ORCPT ); Thu, 17 Jan 2019 19:41:17 -0500 Received: from mail-it1-f202.google.com ([209.85.166.202]:36994 "EHLO mail-it1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725982AbfARAlR (ORCPT ); Thu, 17 Jan 2019 19:41:17 -0500 Received: by mail-it1-f202.google.com with SMTP id y86so2247542ita.2 for ; Thu, 17 Jan 2019 16:41:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=NzKH+hAH0U9Ee/9yS9KS2bUjH/Z9XFW85X7FaoaQiOY=; b=tGNsCfapXkIH0tf0mkKx154LmoZTHLroAnXUV2XMNJdMxyaO92Nu9/zgy6kL6x+vCI hRhdIg3hLCn+JIEHTQD7WWrmz6DSrbpXa1pNIL1vGPX8HMz86Fbrtd49IwfCTVG1n7XU j1jva2BX8jvAczG2xqD/dLhvO/Pef1b8iXP53ba0+FGW1ykmSxpfNBsQer4jnFn8Rb4E xcjuCDA2udDKh+gPnq16d7MEu3f2V3G6Q1rQt8inVMugsf2jPx35mC1csJzcZ77P6OMP JW7VMfLH15Z9EiUva+aVerPF7JW/gaJtkPct3HjOxtpL5Dl1+fHGqRiBzFnUT3Jnwgca yC0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=NzKH+hAH0U9Ee/9yS9KS2bUjH/Z9XFW85X7FaoaQiOY=; b=s1c1h+FIrNVuWRHwtudAUNPqZIOocH+TgJpmwDjiXdpXqkPZc+ZaXjfNZhlbP8vqz4 gdeMWnK8Wsa+7wLsgs5+FGd1U6gSGCgTVCI6UYRA2j73wZ42sgJGV2y6kfBLESoFRoLY vZK8fHvoc0tdZqsKdgFDC1vq2r+1NwB/OGMAJvalh+4EYg9W2Ywr+ZfN4hgVmC5fFWlc BUes/s2tzpu44WvTgQ6zh4OSVwOfumH/jchvlWHr8qWzDFWaVSpHap/LBhAdi13kFO58 gkVjCBwNKEYd60kSIRcPh9LNqSYNHaLYndgGkRNH7O1iJXBgtJJt+G4HY/bgPRulIJ/Y ZpLg== X-Gm-Message-State: AJcUukc7qu3cItFvIVpdaS63eC8L1PW5jQQEu7EyGDF4GjfIBlG/PuEk QmxXZ6aXQRQldMoaM38HFuQ8gBEPJv4Jy0KssLV6lzFwC1mKvhZmU2xjpzNjzLavMDm4hEvlqUF RXBYHhOG1/FTd4QnVc9XInIKDRUzyJp6OiEe+xwVzA6HLLyzPAF4K+A== X-Google-Smtp-Source: ALg8bN5cNYCNv/t4A3FqDP8HHgJPmeVXExzbVk7jZEmBr22IXlcxDqDvnNW/QQjgMjeL6XWbQ+O5Sm0= X-Received: by 2002:a24:78c:: with SMTP id f134mr7305931itf.24.1547772075888; Thu, 17 Jan 2019 16:41:15 -0800 (PST) Date: Thu, 17 Jan 2019 16:41:03 -0800 In-Reply-To: <20190118004106.163825-1-sdf@google.com> Message-Id: <20190118004106.163825-3-sdf@google.com> Mime-Version: 1.0 References: <20190118004106.163825-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.321.g9e740568ce-goog Subject: [PATCH bpf-next 2/5] tools: bpf: support BPF_CGROUP_INET{4, 6}_SOCK_RELEASE in libbpf/bpftool From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Sync uapi and make sure libbpf and bpftools are aware of the hooks. Signed-off-by: Stanislav Fomichev --- tools/bpf/bpftool/cgroup.c | 2 ++ tools/include/uapi/linux/bpf.h | 2 ++ tools/lib/bpf/libbpf.c | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/tools/bpf/bpftool/cgroup.c b/tools/bpf/bpftool/cgroup.c index 4b5c8da2a7c0..3474f810ba5a 100644 --- a/tools/bpf/bpftool/cgroup.c +++ b/tools/bpf/bpftool/cgroup.c @@ -31,6 +31,8 @@ static const char * const attach_type_strings[] = { [BPF_CGROUP_INET_INGRESS] = "ingress", [BPF_CGROUP_INET_EGRESS] = "egress", [BPF_CGROUP_INET_SOCK_CREATE] = "sock_create", + [BPF_CGROUP_INET4_SOCK_RELEASE] = "sock_release4", + [BPF_CGROUP_INET6_SOCK_RELEASE] = "sock_release6", [BPF_CGROUP_SOCK_OPS] = "sock_ops", [BPF_CGROUP_DEVICE] = "device", [BPF_CGROUP_INET4_BIND] = "bind4", diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 91c43884f295..8e78aa28a42e 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -186,6 +186,8 @@ enum bpf_attach_type { BPF_CGROUP_UDP6_SENDMSG, BPF_LIRC_MODE2, BPF_FLOW_DISSECTOR, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET6_SOCK_RELEASE, __MAX_BPF_ATTACH_TYPE }; diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 169e347c76f6..fdadd1ac22ad 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -2626,6 +2626,10 @@ static const struct { BPF_APROG_SEC("cgroup_skb/egress", BPF_PROG_TYPE_CGROUP_SKB, BPF_CGROUP_INET_EGRESS), BPF_APROG_COMPAT("cgroup/skb", BPF_PROG_TYPE_CGROUP_SKB), + BPF_EAPROG_SEC("cgroup/sock_release4", BPF_PROG_TYPE_CGROUP_SOCK, + BPF_CGROUP_INET4_SOCK_RELEASE), + BPF_EAPROG_SEC("cgroup/sock_release6", BPF_PROG_TYPE_CGROUP_SOCK, + BPF_CGROUP_INET6_SOCK_RELEASE), BPF_APROG_SEC("cgroup/sock", BPF_PROG_TYPE_CGROUP_SOCK, BPF_CGROUP_INET_SOCK_CREATE), BPF_EAPROG_SEC("cgroup/post_bind4", BPF_PROG_TYPE_CGROUP_SOCK, From patchwork Fri Jan 18 00:41:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1027064 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=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="ov4CKXgs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43ghvh5zy8z9sLt for ; Fri, 18 Jan 2019 11:41:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726761AbfARAlT (ORCPT ); Thu, 17 Jan 2019 19:41:19 -0500 Received: from mail-io1-f74.google.com ([209.85.166.74]:45323 "EHLO mail-io1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725982AbfARAlT (ORCPT ); Thu, 17 Jan 2019 19:41:19 -0500 Received: by mail-io1-f74.google.com with SMTP id r65so8759454iod.12 for ; Thu, 17 Jan 2019 16:41:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=EvJcqo+95eOblnetNU0Z59dPhYM4uA3AAoO0eoVI9JE=; b=ov4CKXgspvLlcunQ/fWoAMGnhTMl6q79n8nhFcY5Pvrggk6BlYErNdv9w6ruIIZHvw OjdQ9veDi1q7Ln+w3Xvi5+XhXEAwcnhA9Z39KWXZa9dIbjlZIh27lbrkqrPAhqCP0VWv G1vqvx+BC3ld0lXDShCotRoLMo+K0LA7xmEr5dGF393aVPyh+0TAyScs8a9Hj+McoOK3 pKro9UW2qOKRxfiMWV5am0T5shR/IpVpPCYMGZHKWuRhhFUTTPhzn4dBJf9YNFuL3mn0 qvSNcjkTHoGF0bwop3aBhMEdQdMaIG8JS2GpUrVRkmUic2GS5FxtwN7EHQXO7pByox0m 4iKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=EvJcqo+95eOblnetNU0Z59dPhYM4uA3AAoO0eoVI9JE=; b=YAMwK/+0RcFzFYC41nsSdBf9bqu0Jp/Bd3Dj+57z7Bsp1b9thX1VbrraUknUDjek7i 02SAP06S4mZVjYJTna7pP5kYukkUAGigunQ0upx6liXsMCYY8znL33oWcLhki1BoxB47 beQ2uSONthVnHbLBgho+8Wssfd12HAdDcyLHgkB34D9NgFUb7wt4eLmMbOx+Shzg2p0u 8uFw9MEK2f9TZL8KUx6YieFX5DgWG4bSNj5lw7u/4nu86gWfMvtYhiHmRX/Dxh/YlmL6 6k0angkmLGMRbWF9QnI1uF4IhwLTafp/Q2lYiYDf+7AzFpMINjC17tNjsqXZV2pwx3Vc 3GyA== X-Gm-Message-State: AJcUukd6swNk0tsQkRh9/e3+980hZt0d6SUh9zjUBvZR5jdA3HfwCI0P svUhdTLN9JXy77Ag/Tq/kEqDTpad5RJrpWlLjQLsg4sAoBF0XORV0CMznOGOnaQx9jTj3agxpp6 KU6A2E8V79LdYOxhEUtYwRWUblIuLSn6x648fBdDsz3ysAjcvZKm0tQ== X-Google-Smtp-Source: ALg8bN6MbHcmf8miV5Ed8RFUgMZjOa4cSiqF7Y1IFvejM+j88/piy69ZJiidA9pLLTQ2REY1VMaJfkU= X-Received: by 2002:a24:5948:: with SMTP id p69mr2504041itb.21.1547772078599; Thu, 17 Jan 2019 16:41:18 -0800 (PST) Date: Thu, 17 Jan 2019 16:41:04 -0800 In-Reply-To: <20190118004106.163825-1-sdf@google.com> Message-Id: <20190118004106.163825-4-sdf@google.com> Mime-Version: 1.0 References: <20190118004106.163825-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.321.g9e740568ce-goog Subject: [PATCH bpf-next 3/5] selftests/bpf: add BPF_CGROUP_INET{4, 6}_SOCK_RELEASE to test_section_names.c From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make sure section name detection works for new hooks. Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_section_names.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/testing/selftests/bpf/test_section_names.c b/tools/testing/selftests/bpf/test_section_names.c index 7c4f41572b1c..c794005c3093 100644 --- a/tools/testing/selftests/bpf/test_section_names.c +++ b/tools/testing/selftests/bpf/test_section_names.c @@ -55,6 +55,16 @@ static struct sec_name_test tests[] = { {0, BPF_PROG_TYPE_CGROUP_SOCK, 0}, {0, BPF_CGROUP_INET_SOCK_CREATE}, }, + { + "cgroup/sock_release4", + {0, BPF_PROG_TYPE_CGROUP_SOCK, BPF_CGROUP_INET4_SOCK_RELEASE}, + {0, BPF_CGROUP_INET4_SOCK_RELEASE}, + }, + { + "cgroup/sock_release6", + {0, BPF_PROG_TYPE_CGROUP_SOCK, BPF_CGROUP_INET6_SOCK_RELEASE}, + {0, BPF_CGROUP_INET6_SOCK_RELEASE}, + }, { "cgroup/post_bind4", {0, BPF_PROG_TYPE_CGROUP_SOCK, BPF_CGROUP_INET4_POST_BIND}, From patchwork Fri Jan 18 00:41:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1027065 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=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="fXvum3uv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43ghvq3D2Fz9sCh for ; Fri, 18 Jan 2019 11:41:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726818AbfARAlX (ORCPT ); Thu, 17 Jan 2019 19:41:23 -0500 Received: from mail-qk1-f201.google.com ([209.85.222.201]:49548 "EHLO mail-qk1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725982AbfARAlW (ORCPT ); Thu, 17 Jan 2019 19:41:22 -0500 Received: by mail-qk1-f201.google.com with SMTP id s14so10143409qkl.16 for ; Thu, 17 Jan 2019 16:41:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=SqRVf1k8r4HU1tLrXmuqSPjPH96zEritmDCw3oJVIxE=; b=fXvum3uv76QwJQklaD6UsNj2blrVzvhLBsxFIBWbhcK7lIn2K5XkbvtbhbvZyYJ/Lk 4wvZj28N9hFMrMVJKBZr6CMtyBL8KuYIpm2pMUmK5uVm9h0+RJoqn0Q0gSABg2Ow2Cym VknSGPnj2+xRH6YwDyKVzovlYFNR+yA6bXt4b3DjeemLOyMnMgpfvhPW1eOKrrPtdOgm aaiH8Z08Fk2wjxBp0vBLaesrEJK8y0MDlAafXwKNRicQkOpCYIARB5f9sL3A51Se4VaZ GpfrRho6Tj0latLC6GScSEen2V+4Fjenr/f6kb9iwCp078YLBJ1SWXyEiSBRhl75+RCf bK9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=SqRVf1k8r4HU1tLrXmuqSPjPH96zEritmDCw3oJVIxE=; b=Na7VaYtjHpA4XKmyCUELvE+GHtLW6YZ9g+bm0BMNHNVeJPhAmKeXhbA47GuiWPScc2 P7PGVLFcUGqk1fSZ43BD8MYiFaEF5PfFEmG/ZgvD15K8QH2pdm9il3Vz07c7dppOoEwQ iVIzZ+PRYvg5MesuUeu0RQHIBX6oN1vF2Z33M141Uxf7k13EDfxFsglRwCva76+C0PMc GYIkbFAfisOA2IdKWELAWSTgpdE6Uh0B1R/soPyjX+wn/GsJUmTlHM8SnxJjm/7sHWBL zjbyBggw5i4DVHx4FJfnhM7MDsKeoCDice8YpaQlR+x4QL+PSauwgkFjGuWcPgCJzOv9 UrVg== X-Gm-Message-State: AJcUukfWEiaM6uRrbfvaODXGj061zosImklcONtAUSxreZtBiJI/nVe9 iSrEYdw07AA7dMhXQzOylqbUfDgtS5Jr2XdEKzxiKh7Z7fuIeEHSRDNACbGrkR4dpyHF+XP0Q5i tHMnxz39VJEHrm5fgzPyK+hdl+609HUXO9AojEn4LuagR+BpKvWLVsA== X-Google-Smtp-Source: ALg8bN6n3MaoAxmlKH6bxByrs9cUTmO01W+G52YWZUq8r/H6Ysg64hp9kOQqGtAyYX8SPxc/6zTujR8= X-Received: by 2002:a0c:8a7c:: with SMTP id 57mr9218433qvu.45.1547772081710; Thu, 17 Jan 2019 16:41:21 -0800 (PST) Date: Thu, 17 Jan 2019 16:41:05 -0800 In-Reply-To: <20190118004106.163825-1-sdf@google.com> Message-Id: <20190118004106.163825-5-sdf@google.com> Mime-Version: 1.0 References: <20190118004106.163825-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.321.g9e740568ce-goog Subject: [PATCH bpf-next 4/5] selftests/bpf: add BPF_CGROUP_INET{4, 6}_SOCK_RELEASE to test_sock.c From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add context access tests for BPF_CGROUP_INET{4,6}_SOCK_RELEASE. Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_sock.c | 119 ++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/tools/testing/selftests/bpf/test_sock.c b/tools/testing/selftests/bpf/test_sock.c index 561ffb6d6433..07ef99b52640 100644 --- a/tools/testing/selftests/bpf/test_sock.c +++ b/tools/testing/selftests/bpf/test_sock.c @@ -309,6 +309,125 @@ static struct sock_test tests[] = { 0, SUCCESS, }, + { + "sock_release4 load with valid access: src_ip4", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, src_ip4)), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET4_SOCK_RELEASE, + AF_INET, + SOCK_STREAM, + "127.0.0.1", + 0, + SUCCESS, + }, + { + "sock_release4 load with valid access: src_port", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, src_port)), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET4_SOCK_RELEASE, + AF_INET, + SOCK_STREAM, + "127.0.0.1", + 0, + SUCCESS, + }, + { + "sock_release4 load with invalid access: src_ip6", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, src_ip6[0])), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET4_SOCK_RELEASE, + 0, + 0, + NULL, + 0, + LOAD_REJECT, + }, + { + "sock_release4 load with valid access: mark", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, mark)), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET4_SOCK_RELEASE, + AF_INET, + SOCK_STREAM, + "127.0.0.1", + 0, + SUCCESS, + }, + { + "sock_release6 load with valid access: src_ip6", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, src_ip6[0])), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET6_SOCK_RELEASE, + BPF_CGROUP_INET6_SOCK_RELEASE, + AF_INET6, + SOCK_STREAM, + "::", + 0, + SUCCESS, + }, + { + "sock_release6 load with valid access: src_port", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, src_port)), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET6_SOCK_RELEASE, + BPF_CGROUP_INET6_SOCK_RELEASE, + AF_INET6, + SOCK_STREAM, + "::", + 0, + SUCCESS, + }, + { + "sock_release6 load with invalid access: src_ip4", + .insns = { + BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), + BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, + offsetof(struct bpf_sock, src_ip4)), + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + BPF_CGROUP_INET6_SOCK_RELEASE, + BPF_CGROUP_INET6_SOCK_RELEASE, + 0, + 0, + NULL, + 0, + LOAD_REJECT, + }, }; static size_t probe_prog_length(const struct bpf_insn *fp) From patchwork Fri Jan 18 00:41:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1027066 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=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="GtPbHnq2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43ghvr1V1hz9sDr for ; Fri, 18 Jan 2019 11:41:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726833AbfARAl0 (ORCPT ); Thu, 17 Jan 2019 19:41:26 -0500 Received: from mail-pg1-f202.google.com ([209.85.215.202]:45282 "EHLO mail-pg1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725981AbfARAlZ (ORCPT ); Thu, 17 Jan 2019 19:41:25 -0500 Received: by mail-pg1-f202.google.com with SMTP id y8so7291603pgq.12 for ; Thu, 17 Jan 2019 16:41:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=iatdyQTpttijykU49010aO94BKDm+r0/+2WndPhwCaw=; b=GtPbHnq2pzrD7aD7Yl5Xr2p06cPIWsGBMeLcs4ZaDCpantxH1Wn5e0xkvwXyW+pwOb a2ybS888emlKTbL+MZk+8OZazfr9dpmI/wUFttkmfAkVSbDzc+Qp9n6iATLxIO/RV4GD 4xdwBrkpntPRZfBU4le10E6rPFSXOygjzTTb/4qyaUw6NtVSC1MckT0dUEb626J/Dz8/ CCaxcQclyUZ2T1EUHAAOPLzOs/qCr6D2yTVCuyTLphoEWxn6uG3if3JWJtJKLrykeIys PAOpv4nGVwcKty6PzWGctv1rlpSgNcDfGkNlPrm4mBzUg9S6a9q78teX4/USnPJxYH4L PyVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=iatdyQTpttijykU49010aO94BKDm+r0/+2WndPhwCaw=; b=BxtOt3r9OBWqqAMuNhO5XqK6QQ90XuwjiOVYqnggG1IqCmj7n1RZeAIA4xb9PTA9t7 Yt6uDDuNGrG4gA6yuQJxA+oYnH98C/lsETcHY3hDgPk0K2CkX6To+YOuI7+DQWB8ZED0 FfJhhxXcJj2LuxGEzhzx/gY4tW7BJEFCti3NeHTzhfbAWXWdre4EDi2b16/zFI9gHVLu fdN9Z7hIbTGOuH1VJxms/ICicrwUO08nqzeKMbrsEMGy+O78ZKjppginjH9gf2vTECPn +3a4lFrFaN3Ddjp7qlySh7vdowpwrgv5BZ/6RnJ/WqNjLNvFIrTUcTf+WkHRGSWu+kTA mjKA== X-Gm-Message-State: AJcUukdxZ5YU5zlyZCVu4iFH6TXVA+Wlv7dJRGk7pHGBpDv/fDT7Y1fT XEoXLm3kGKDqQDS/8WAF1SbQOVSGWa39mp9AcjIG/PEChKJvE93L000ITFqUu9p2b1OgatqJOyR 8Dht2ylfy/3cqdofwj98ykI9y3DwMGVk97jm5WmhqApHtCUd0wHjyng== X-Google-Smtp-Source: ALg8bN7fq3YIQ6DtS8dJhX/CyjmcH4snpEYD/PPGaovpKoImEr4V1K/WN1+v1/NGCg2FloJBlm6Ke2U= X-Received: by 2002:a17:902:7888:: with SMTP id q8mr1358587pll.130.1547772084465; Thu, 17 Jan 2019 16:41:24 -0800 (PST) Date: Thu, 17 Jan 2019 16:41:06 -0800 In-Reply-To: <20190118004106.163825-1-sdf@google.com> Message-Id: <20190118004106.163825-6-sdf@google.com> Mime-Version: 1.0 References: <20190118004106.163825-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.321.g9e740568ce-goog Subject: [PATCH bpf-next 5/5] selftests/bpf: add BPF_CGROUP_INET{4, 6}_SOCK_RELEASE to test_sock_addr.c From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Count the number of times hooks were executed in the cgroup local storage to make sure they trigger. Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_sock_addr.c | 131 ++++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/test_sock_addr.c b/tools/testing/selftests/bpf/test_sock_addr.c index 3f110eaaf29c..92845bf6fac9 100644 --- a/tools/testing/selftests/bpf/test_sock_addr.c +++ b/tools/testing/selftests/bpf/test_sock_addr.c @@ -82,6 +82,9 @@ struct sock_addr_test { } expected_result; }; +/* Per-test storage for additional cgroup storage map */ +static int cg_storage_fd; + static int bind4_prog_load(const struct sock_addr_test *test); static int bind6_prog_load(const struct sock_addr_test *test); static int connect4_prog_load(const struct sock_addr_test *test); @@ -94,6 +97,7 @@ static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test); static int sendmsg6_rw_c_prog_load(const struct sock_addr_test *test); static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test); static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test); +static int release46_prog_load(const struct sock_addr_test *test); static struct sock_addr_test tests[] = { /* bind */ @@ -507,6 +511,35 @@ static struct sock_addr_test tests[] = { SRC6_REWRITE_IP, SYSCALL_EPERM, }, + /* release */ + { + "release4: make sure the hook triggers", + release46_prog_load, + BPF_CGROUP_INET4_SOCK_RELEASE, + BPF_CGROUP_INET4_SOCK_RELEASE, + AF_INET, + SOCK_STREAM, + SERV4_REWRITE_IP, + 0, + SERV4_REWRITE_IP, + 0, + NULL, + SUCCESS, + }, + { + "release6: make sure the hook triggers", + release46_prog_load, + BPF_CGROUP_INET6_SOCK_RELEASE, + BPF_CGROUP_INET6_SOCK_RELEASE, + AF_INET6, + SOCK_DGRAM, + SERV6_REWRITE_IP, + 0, + SERV6_REWRITE_IP, + 0, + NULL, + SUCCESS, + }, }; static int mk_sockaddr(int domain, const char *ip, unsigned short port, @@ -554,7 +587,15 @@ static int load_insns(const struct sock_addr_test *test, int ret; memset(&load_attr, 0, sizeof(struct bpf_load_program_attr)); - load_attr.prog_type = BPF_PROG_TYPE_CGROUP_SOCK_ADDR; + switch (test->expected_attach_type) { + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: + load_attr.prog_type = BPF_PROG_TYPE_CGROUP_SOCK; + break; + default: + load_attr.prog_type = BPF_PROG_TYPE_CGROUP_SOCK_ADDR; + break; + } load_attr.expected_attach_type = test->expected_attach_type; load_attr.insns = insns; load_attr.insns_cnt = insns_cnt; @@ -916,6 +957,35 @@ static int sendmsg6_rw_c_prog_load(const struct sock_addr_test *test) return load_path(test, SENDMSG6_PROG_PATH); } +static int release46_prog_load(const struct sock_addr_test *test) +{ + struct bpf_cgroup_storage_key key; + unsigned long long value; + struct bpf_insn insns[] = { + BPF_LD_MAP_FD(BPF_REG_1, 0), /* map fd */ + BPF_MOV64_IMM(BPF_REG_2, 0), /* flags, not used */ + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_MOV64_IMM(BPF_REG_1, 1), + BPF_STX_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), + BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0x1), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_EXIT_INSN(), + }; + + cg_storage_fd = bpf_create_map(BPF_MAP_TYPE_CGROUP_STORAGE, sizeof(key), + sizeof(value), 0, 0); + if (cg_storage_fd < 0) { + printf("Failed to create map: %s\n", strerror(errno)); + return -1; + } + + insns[0].imm = cg_storage_fd; + + return load_insns(test, insns, sizeof(insns) / sizeof(struct bpf_insn)); +} + static int cmp_addr(const struct sockaddr_storage *addr1, const struct sockaddr_storage *addr2, int cmp_port) { @@ -1346,6 +1416,57 @@ static int run_sendmsg_test_case(const struct sock_addr_test *test) return err; } +static int run_release_test_case(const struct sock_addr_test *test) +{ + socklen_t addr_len = sizeof(struct sockaddr_storage); + struct sockaddr_storage requested_addr; + struct sockaddr_storage expected_addr; + struct bpf_cgroup_storage_key key; + unsigned long long value; + int servfd = -1; + + if (bpf_map_get_next_key(cg_storage_fd, NULL, &key)) { + printf("Failed to get the first key in cgroup storage\n"); + return -1; + } + + if (bpf_map_lookup_elem(cg_storage_fd, &key, &value)) { + printf("Failed to lookup cgroup storage 0\n"); + return -1; + } + + if (value != 0) { + printf("Unexpected data in the cgroup storage: %llu\n", value); + return -1; + } + + if (init_addrs(test, &requested_addr, &expected_addr, NULL)) + return -1; + + servfd = start_server(test->type, &requested_addr, addr_len); + if (servfd < 0) + return -1; + + close(servfd); + + if (bpf_map_get_next_key(cg_storage_fd, NULL, &key)) { + printf("Failed to get the first key in cgroup storage\n"); + return -1; + } + + if (bpf_map_lookup_elem(cg_storage_fd, &key, &value)) { + printf("Failed to lookup cgroup storage 0\n"); + return -1; + } + + if (value != 1) { + printf("Unexpected data in the cgroup storage: %llu\n", value); + return -1; + } + + return 0; +} + static int run_test_case(int cgfd, const struct sock_addr_test *test) { int progfd = -1; @@ -1381,6 +1502,10 @@ static int run_test_case(int cgfd, const struct sock_addr_test *test) case BPF_CGROUP_UDP6_SENDMSG: err = run_sendmsg_test_case(test); break; + case BPF_CGROUP_INET4_SOCK_RELEASE: + case BPF_CGROUP_INET6_SOCK_RELEASE: + err = run_release_test_case(test); + break; default: goto err; } @@ -1405,6 +1530,10 @@ static int run_test_case(int cgfd, const struct sock_addr_test *test) /* Detaching w/o checking return code: best effort attempt. */ if (progfd != -1) bpf_prog_detach(cgfd, test->attach_type); + if (cg_storage_fd > 0) { + close(cg_storage_fd); + cg_storage_fd = 0; + } close(progfd); printf("[%s]\n", err ? "FAIL" : "PASS"); return err;