From patchwork Mon Aug 31 04:03:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khalid Elmously X-Patchwork-Id: 1354099 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BfxQn4PqVz9sTs; Mon, 31 Aug 2020 14:04:01 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1kCb2p-00059R-IO; Mon, 31 Aug 2020 04:03:47 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kCb2m-00058k-VL for kernel-team@lists.ubuntu.com; Mon, 31 Aug 2020 04:03:44 +0000 Received: from mail-qv1-f72.google.com ([209.85.219.72]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kCb2m-0006IX-LY for kernel-team@lists.ubuntu.com; Mon, 31 Aug 2020 04:03:44 +0000 Received: by mail-qv1-f72.google.com with SMTP id j13so4474665qvi.17 for ; Sun, 30 Aug 2020 21:03:44 -0700 (PDT) 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; bh=hrp9h8YBHEZqsTtn9T15rB5zjvY09YOt/gfmmVvlnDk=; b=l44MfLEnHiZ6kLvkVyPfZ0IjtZVxvT3GpY4VnT0zospXop1w9krWeJ28AE6Voc15jf 4FH8Nn3XVJDMQBpTTicEsPyvMMBOvXHfvDxhZitRab+qiZT3OvCOcQHyVERc0wGpbsfD VFjqfFwNdSbBYulBbxLHzaMaWGp9wEhnm/RINPVaNzOPw9XxQHbAtcULmqmXdTTovC6v /nDvlgnjG34AjsJeRs+psDVMWm8YXmHuaYjyoVO0eb3re1L+KuWS01CeyNXNRIJIxF41 llkTTyRuaISP9EWSKDAzvJacUgKNSkx1PgMqdmb/Ub2+2ZgTVRhLbA6+U755n85827ls 0Big== X-Gm-Message-State: AOAM5321pHcFfhMZugcm/yHfwcCxQQePZmPP/ALXepqyQvWpWx7sJzVW e5sV148jgWWHjEIvU+bDosgDughh7qZAPSb665aabkEhY1q7KKxLFgH/A1k9IclDgtJGXgbfzuR uoDaBpNvo03t97Q7ZGof+KIUBgLzeDrc1pp5VKTSdww== X-Received: by 2002:a05:620a:6c7:: with SMTP id 7mr9508182qky.30.1598846623376; Sun, 30 Aug 2020 21:03:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxHnJMJ2tgzuxk1gzt23E/p/84q5NsxSPOQ8brNow7Vu2gfaVBJJHbQO+7syjrFU93CRZJXiA== X-Received: by 2002:a05:620a:6c7:: with SMTP id 7mr9508163qky.30.1598846623032; Sun, 30 Aug 2020 21:03:43 -0700 (PDT) Received: from kbuntu2.fuzzbuzz.org (dhcp-24-53-242-104.cable.user.start.ca. [24.53.242.104]) by smtp.gmail.com with ESMTPSA id d9sm7779648qkj.83.2020.08.30.21.03.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2020 21:03:42 -0700 (PDT) From: Khalid Elmously To: kernel-team@lists.ubuntu.com Subject: [PATCH 02/13] bpf: Enable perf event rb output for bpf cgroup progs Date: Mon, 31 Aug 2020 00:03:22 -0400 Message-Id: <20200831040333.6058-3-khalid.elmously@canonical.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200831040333.6058-1-khalid.elmously@canonical.com> References: <20200831040333.6058-1-khalid.elmously@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Daniel Borkmann BugLink: https://bugs.launchpad.net/bugs/1887740 [ upstream commit fcf752ea8c9493acc33280e72112ea6108a0d104 ] Currently, connect(), sendmsg(), recvmsg() and bind-related hooks are all lacking perf event rb output in order to push notifications or monitoring events up to user space. Back in commit a5a3a828cd00 ("bpf: add perf event notificaton support for sock_ops"), I've worked with Sowmini to enable them for sock_ops where the context part is not used (as opposed to skbs for example where the packet data can be appended). Make the bpf_sockopt_event_output() helper generic and enable it for mentioned hooks. Signed-off-by: Daniel Borkmann Signed-off-by: Alexei Starovoitov Link: https://lore.kernel.org/bpf/69c39daf87e076b31e52473c902e9bfd37559124.1585323121.git.daniel@iogearbox.net Signed-off-by: Daniel Borkmann Signed-off-by: Khalid Elmously --- net/core/filter.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index d6f781e0a894..522f2ca0b95b 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4226,8 +4226,8 @@ static const struct bpf_func_proto bpf_get_socket_uid_proto = { .arg1_type = ARG_PTR_TO_CTX, }; -BPF_CALL_5(bpf_sockopt_event_output, struct bpf_sock_ops_kern *, bpf_sock, - struct bpf_map *, map, u64, flags, void *, data, u64, size) +BPF_CALL_5(bpf_event_output_data, void *, ctx, struct bpf_map *, map, u64, flags, + void *, data, u64, size) { if (unlikely(flags & ~(BPF_F_INDEX_MASK))) return -EINVAL; @@ -4235,8 +4235,8 @@ BPF_CALL_5(bpf_sockopt_event_output, struct bpf_sock_ops_kern *, bpf_sock, return bpf_event_output(map, flags, data, size, NULL, 0, NULL); } -static const struct bpf_func_proto bpf_sockopt_event_output_proto = { - .func = bpf_sockopt_event_output, +static const struct bpf_func_proto bpf_event_output_data_proto = { + .func = bpf_event_output_data, .gpl_only = true, .ret_type = RET_INTEGER, .arg1_type = ARG_PTR_TO_CTX, @@ -6033,6 +6033,8 @@ sock_filter_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) return &bpf_get_local_storage_proto; case BPF_FUNC_get_socket_cookie: return &bpf_get_socket_cookie_sock_proto; + case BPF_FUNC_perf_event_output: + return &bpf_event_output_data_proto; default: return bpf_base_func_proto(func_id); } @@ -6059,6 +6061,8 @@ sock_addr_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) return &bpf_get_socket_cookie_sock_addr_proto; case BPF_FUNC_get_local_storage: return &bpf_get_local_storage_proto; + case BPF_FUNC_perf_event_output: + return &bpf_event_output_data_proto; #ifdef CONFIG_INET case BPF_FUNC_sk_lookup_tcp: return &bpf_sock_addr_sk_lookup_tcp_proto; @@ -6301,7 +6305,7 @@ sock_ops_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) case BPF_FUNC_get_local_storage: return &bpf_get_local_storage_proto; case BPF_FUNC_perf_event_output: - return &bpf_sockopt_event_output_proto; + return &bpf_event_output_data_proto; case BPF_FUNC_sk_storage_get: return &bpf_sk_storage_get_proto; case BPF_FUNC_sk_storage_delete: