From patchwork Wed Mar 30 15:26:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 12796014 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 097B7C433EF for ; Wed, 30 Mar 2022 15:27:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348177AbiC3P24 (ORCPT ); Wed, 30 Mar 2022 11:28:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52354 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348173AbiC3P2z (ORCPT ); Wed, 30 Mar 2022 11:28:55 -0400 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CDF711AF7E3; Wed, 30 Mar 2022 08:27:08 -0700 (PDT) Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22UFLbBx007047; Wed, 30 Mar 2022 15:26:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=y1fF5YcD2rlCj1OiSYr3RCgJu48iffewo4ZMGl9uPCE=; b=IYd6H56AjAofGqNTh+jDYxMWfeYYvvedJiqAcdKm9wqU+QqFLUj+rsmcJw3m5D1zEy+4 nS4ZUi56N0Tn31Knk9RFy1h5QukGQ9Sv8psrQKMqcUJ2nJ9uoT/XeJ7lP45jMv4a7Dra eZH9owc7FY9LnWiIsw4VLGLOsvcbGhGYJdqT4tD70W9TUB/iggVZRQdq5UEkvwIWComk vacwBPOEpgnNWpdecnNn3FW0LvBjrmWnGyspBjgXGTx+3KPpIUO06CQlX52T8mLkzNWK UJ7vHZ0ryDTJXplbEd37g56BqMgLZTNaSYt3fEoAihMl0tYflibcyS0R4HxEMducrYKC BA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3f1tes1t19-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:50 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 22UFB4KY082540; Wed, 30 Mar 2022 15:26:50 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1anam02lp2040.outbound.protection.outlook.com [104.47.57.40]) by aserp3020.oracle.com with ESMTP id 3f1tmypv59-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ubbkr9UB9s06tQQrOywQ+2kTXFl/3i3GfquT0xi/7Zmljpz/0uY/I1T7X/JZIA2NIfH0sLxeCl+aGEAgrUadsZoFMnCbiKGdn60HoRY66hYgbt3BY088ceCb1EiIdnqjdaJSRpSfjpX5A6skiuhuuLhHyRQfH87WwMtGDrmrcHtmY5/jVLlQDtJmGQw78LbWr5Hh25/zP69SEPapvF+c4mp2PiGT0KJUxrRUQgqlObTezMBDGAz6aywT7TQFNQuowiLIdeBjdx8F5fdAof5cyqxvnoRvv8Gwe9dVE3dQR9+u+HUunizOgGG0L4cYtcKbftvS7v7ZMO8m9DPRcE6rWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=y1fF5YcD2rlCj1OiSYr3RCgJu48iffewo4ZMGl9uPCE=; b=FhRgB32PTzRkSBH4YsrLo5+wainuoWPIRftxhod5c5MwplyB5Wp+JSfL78/u4lvyA7p5tgMhXDFx7o0kWQlSeXhQuicR8aawCUgUcoqBo13DmoPzEDpiT6dkNz3gB7PGQu9I7k6e0G7xQK1sYgMN8WIHnsgwVkMR/RrX3UyB7zHMtj2CneK9miJi0e74CtNxKQwk53xvDXxNMtf12B8LcDToLo8lSkqblfHr0jBipZkRXSGpVW6cGJRXaqSrV85Yg3dED4GlG1F/eGXon1r+STiypxuwUMfIwbY06FWq3WiGJMgfwPVK6maHpTBj1Xz2shZ5OzLBFjC9IzCjbD55FQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y1fF5YcD2rlCj1OiSYr3RCgJu48iffewo4ZMGl9uPCE=; b=vMTv/ZMxD8ldH4khIL0g7IyWGppIWIm5kUhCphrrOC6Zd2tdnCUpd/q0YovOO0vZnKusyTuwShROSjF8YSy71w2YUqWuPBzhSJMPbWhyir5dv1RLuJxW8UDyUY5HjR/t3SnxU219ayQGdGjHY5xyYz9OH/PFsDHtotcr9VBuMKQ= Received: from BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) by BN8PR10MB3251.namprd10.prod.outlook.com (2603:10b6:408:c9::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Wed, 30 Mar 2022 15:26:48 +0000 Received: from BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386]) by BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386%4]) with mapi id 15.20.5123.020; Wed, 30 Mar 2022 15:26:48 +0000 From: Alan Maguire To: andrii@kernel.org, daniel@iogearbox.net, ast@kernel.org Cc: kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, toke@redhat.com, sunyucong@gmail.com, netdev@vger.kernel.org, bpf@vger.kernel.org, Alan Maguire Subject: [PATCH v5 bpf-next 1/5] libbpf: bpf_program__attach_uprobe_opts() should determine paths for programs/libraries where possible Date: Wed, 30 Mar 2022 16:26:36 +0100 Message-Id: <1648654000-21758-2-git-send-email-alan.maguire@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> References: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> X-ClientProxiedBy: LO4P123CA0362.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::7) To BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 19ddf010-c330-44c1-3f24-08da1261b4e0 X-MS-TrafficTypeDiagnostic: BN8PR10MB3251:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bXF062o7PtNFozQk36wHKrezizlD5tYE4vCtX3gjMj6e3PvTqwl7H+MxCCFtU8Z5+3kwTxsNPjqfpp3Kdq82LRVv1o685QtHSJ7Sd+RYtodnTpH26wMDmnt8ESXklnsENtGI3UNxjV9l7A+NMPcbysnn3fu7XdCH4CjtMCVBGQuOU4P9aRBtBkkrQzMShyNw03AtWIzEZoEmdTS7Zs3qoWAqBRV5PGeBO4xoC+W2oIvZvww1i9mA1oxjz3QYXzrmhijqvobnPeBa27KEDkD2wKCALURjNXPJGltvw1wDIBxUFwcTMbC8I80r3DM2LiUKNMSBzFWGZxyq/cOrUfkl+t9Bdf1WQr/dLLqM+IhscJ8AaLFV+NFOYz9bpfqwdgXlT6ovhxJSWJCyrdExnzqpHFhEEeYHhXk+452IK6E3y5scnfkbPCum5cOyAN+AsSdlyVy2hFb70biN8S7KK9GEhm85XTkiQx94+ogiYLI0T9/S8+nUjg+GJM7W9+k2eVJjU4zu58beeMlbjyOojNq0Bd5hgnCvb8ukkSTuKG8WrZCJOzFJYTqmVGoAfleUEdygLjwmMNR8pTU50S5yjiD9+x3NmFNiRpUUV/BvJAxo+3aIa8PyMc3mCZN1X6lLSa6nx572G821tuBJQgrrYWSRlLeuU9fIca89IgzliJ4w+4SxrisskDBjFrYIRv3vZCVpKxIt79efIRP6iUyJu+N2VEK7iRi9inKDWCm98F6Wf4rpoDIsjfBUa7B1rZfwIuig X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5267.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66476007)(66556008)(66946007)(8676002)(316002)(38100700002)(38350700002)(36756003)(4326008)(86362001)(6486002)(5660300002)(8936002)(2616005)(6506007)(7416002)(52116002)(44832011)(186003)(26005)(6512007)(6666004)(83380400001)(107886003)(508600001)(2906002)(101420200003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: e3xJZaX7QZBHhjh30CeqHRdERn3Fges/aXn5VOZ5eNJGOvwh+XKyhbsAHElb15WojrMjzvUEA1Hmc66IGBZO694qWEyHtZ4F5sSmUP8CrWxVHevnj25yutQu+/3GFxAP4u8Shmnv7QSs4fLjLciSPfTAilqgI10LYuTY5Q100Xh9AiD0CbQW8ijGQBCsSvcPg90eNaShKb10mmV6NV5QEAWN/2WqOKPhXz9KAhtYlAn99jvISve0q7s+3LAeLEotwrgqo2JfT1MIiEfD++Buxkv6i2Fe4Lpv/FYa6cV5Av/PUUbkTHAMvjQ8Y/QyJU4xn1nE7HglI3eDzXPOYzFB9YtQWgVKSVjkuDhYI6T71/oZCC+qgAVcOsVdFYGelyY/RP8IsuloGucwZMaYP1xNEyEUCETeBLwYZ6HTiqVYqoFKpJtMo/JKYJV9/obyHaMHkyXslkTthtf5i5liRpI4a+NWxV6I/zoQjCnTyHA5uBDfLsEnSYtBET/Tl1n8kRzg9MVN/8isgUjn8S2leyBq1+trwMi1N4kLQhQ4JSN5qdyYf9tTb2R0ExbXHmY/sBcAs3Xo4amPG1N2ltwwIZMW5p3gPIGZ4qy2QhpD+wTKUyDYB2p8XJAAl6efjTMYjIxGVjNWRyWmeGvV67nTs5MSAqmuQh+zdN3/QYl2dlX6mkksR/Eo53y0Fxbu+K+2bXBRaLTb/VKTJQF5zqaNnhi/WLeBlJ+D5Slo9XUCVxG0fr3QZa6M6hiZv/0GuRZAN9fSfw5GafmuBgHw1Si1kkDzWIUv/WxYTuFd7229wLU7rNVUzBaDZdWVEuFuVGRP7/iQB/vjKIJ7Ip+47xFRH+MfbxaPFdJRNFrCa0EKmkPZg+Bs7Nctj0QBLdOXZa80ofFGWq6YlzUIYtzj/T5yXHU2b1oULtzQOQ6pxUpwypHPCgZFIZi8anKghJdCe5Z1QQq0xpZWMouTjOhJ7PVltfh2po+SGZ0dolJNC0PdRO7rd50ayIngyS7z/sMs4ddXFJkD5vu9UHYV4TTVrZHzbCtflcstLl2w1t6MLKji0gWJvckUXh8RF01RtFxpBHll+Ul4GXr84xN3fzEDfCYdUT8jjgU+FQLeCHtbE4UKcXwhA405UH+BJEtbt8MF7of7syMTp7EARtUcdIMre2SKe4u82F19d4eXz+kIfJQfOoVbxrrxrQZNrUqUboT6K4yggJ3+1SPcP7Zqqz4QxLMBZkNRfIofPJuqC1eeSPwkGYncBHwqAH2b0f3+YQ60UwfSYg0Ob1YmLFPw4MFaB5HOUMGmHbDx3dn1XytMVUKMBLXxKuUykA7X8YgO1OP1l8MCvEwKU2k2sKnEEf797PmV0RhT+ZtVTwstvuPXYTwmBalya8ivDI4bZy35GgGNRcoY3gqrj6Z3njpJrMkOeNz3/50TaDkSfDQp0x8pEA+og4ZEd8GkvVIP5vrFUv3q/Ph3HpPiO5Yr9fwdICleNXtqmUE5pE5vhpo5HSKFz2pXDARKVkkQ5IErm3cDRHCTXZMHoHitP7E1tU+uLVYVfM/pMBDpApotN/D3oLwtHefE7kIgHQfq+xwSMzstRSmnnk49SYxXZO4pDV+MVs503lacsd15wfsU44EnCkLRfkw8HTs4HBXnLBe39w/DwV39nsO8LBXwy7NJFRw4sMDAw60piBA7DQXDQcR3MvgLOuXHjBTIYZwCzk5WgU6FoW6eV2NKLbVf3OaYXXnU+qSMsc5ookA/ijkZd5TiQ9lPt0/9ISWr8PY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19ddf010-c330-44c1-3f24-08da1261b4e0 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5267.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2022 15:26:48.3787 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AEOzluD2Dnv4rmQoLIq7AK/m+Q0bXWhUP/g9/AttxqzfHXlsZbGLyITx4D9u76o4bJgpTv/tZ9xYPRCJA84CMg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR10MB3251 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10302 signatures=695566 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 spamscore=0 phishscore=0 adultscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203300074 X-Proofpoint-GUID: V-OYj9lTrcaFNBSLd_1RHKGoSbA2XvSt X-Proofpoint-ORIG-GUID: V-OYj9lTrcaFNBSLd_1RHKGoSbA2XvSt Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net bpf_program__attach_uprobe_opts() requires a binary_path argument specifying binary to instrument. Supporting simply specifying "libc.so.6" or "foo" should be possible too. Library search checks LD_LIBRARY_PATH, then /usr/lib64, /usr/lib. This allows users to run BPF programs prefixed with LD_LIBRARY_PATH=/path2/lib while still searching standard locations. Similarly for non .so files, we check PATH and /usr/bin, /usr/sbin. Path determination will be useful for auto-attach of BPF uprobe programs using SEC() definition. Signed-off-by: Alan Maguire --- tools/lib/bpf/libbpf.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 809fe20..a7d5954 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -10517,6 +10517,46 @@ static int perf_event_uprobe_open_legacy(const char *probe_name, bool retprobe, return pfd; } +/* Get full path to program/shared library. */ +static int resolve_full_path(const char *file, char *result, size_t result_sz) +{ + const char *search_paths[2]; + int i; + + if (strstr(file, ".so")) { + search_paths[0] = getenv("LD_LIBRARY_PATH"); + search_paths[1] = "/usr/lib64:/usr/lib"; + } else { + search_paths[0] = getenv("PATH"); + search_paths[1] = "/usr/bin:/usr/sbin"; + } + + for (i = 0; i < ARRAY_SIZE(search_paths); i++) { + const char *s; + + if (!search_paths[i]) + continue; + for (s = search_paths[i]; s != NULL; s = strchr(s, ':')) { + char *next_path; + int seg_len; + + if (s[0] == ':') + s++; + next_path = strchr(s, ':'); + seg_len = next_path ? next_path - s : strlen(s); + if (!seg_len) + continue; + snprintf(result, result_sz, "%.*s/%s", seg_len, s, file); + /* ensure it is an executable file/link */ + if (access(result, R_OK | X_OK) < 0) + continue; + pr_debug("resolved '%s' to '%s'\n", file, result); + return 0; + } + } + return -ENOENT; +} + LIBBPF_API struct bpf_link * bpf_program__attach_uprobe_opts(const struct bpf_program *prog, pid_t pid, const char *binary_path, size_t func_offset, @@ -10524,6 +10564,7 @@ static int perf_event_uprobe_open_legacy(const char *probe_name, bool retprobe, { DECLARE_LIBBPF_OPTS(bpf_perf_event_opts, pe_opts); char errmsg[STRERR_BUFSIZE], *legacy_probe = NULL; + char full_binary_path[PATH_MAX]; struct bpf_link *link; size_t ref_ctr_off; int pfd, err; @@ -10536,12 +10577,22 @@ static int perf_event_uprobe_open_legacy(const char *probe_name, bool retprobe, ref_ctr_off = OPTS_GET(opts, ref_ctr_offset, 0); pe_opts.bpf_cookie = OPTS_GET(opts, bpf_cookie, 0); + if (binary_path && !strchr(binary_path, '/')) { + err = resolve_full_path(binary_path, full_binary_path, + sizeof(full_binary_path)); + if (err) { + pr_warn("failed to resolve full path for '%s'\n", binary_path); + return libbpf_err_ptr(err); + } + binary_path = full_binary_path; + } + legacy = determine_uprobe_perf_type() < 0; if (!legacy) { pfd = perf_event_open_probe(true /* uprobe */, retprobe, binary_path, func_offset, pid, ref_ctr_off); } else { - char probe_name[512]; + char probe_name[PATH_MAX + 64]; if (ref_ctr_off) return libbpf_err_ptr(-EINVAL); From patchwork Wed Mar 30 15:26:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 12796016 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6D81C433EF for ; Wed, 30 Mar 2022 15:27:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348176AbiC3P26 (ORCPT ); Wed, 30 Mar 2022 11:28:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348180AbiC3P25 (ORCPT ); Wed, 30 Mar 2022 11:28:57 -0400 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F03E1B2572; Wed, 30 Mar 2022 08:27:11 -0700 (PDT) Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22UFLXYu027896; Wed, 30 Mar 2022 15:26:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=7qt5dTYWWtkAnvdPUFRF8OqyJe+9yc6gf8l+FAT1KXQ=; b=cYB+ffVhnAFQHspwkC8xwMfHZUZQ1ij5laTYmt2UY4pw8+/Jbi+lRx1tbrKPas5SKb9q yMCMW+N+zfegffDlIWymog6RehC6bZMqH9eFUFXEby0LC67RUpDH/tkdRl9/iM1DM0jk J5TqsvoHkxvQq7/RB/DrGA6+/GgbD3SvMvaWoklsrqQ8MAecxV3R88GEm31C5An8kmDo nqddGX1oEpxgn11BhUKZRKBITJg1MjbKpGwCafoeDKlpCXhFG9s0IvWlieG+Lt579JIs HXbrHzmGiRqBQqV05fHVq/y/RV3C/zYPz+yyyTWNXyZGH+E0P9vQOEuH8/X9kcXa+mcj KQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com with ESMTP id 3f1sm2hv6v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:54 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 22UFC4tn009540; Wed, 30 Mar 2022 15:26:53 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1anam02lp2043.outbound.protection.outlook.com [104.47.57.43]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com with ESMTP id 3f1tg6x80e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SQMk+XJ7iQnYZYlHdLNLBoefWOwvpWH0tcjp/r67HDY7lfQZ2Jh/WlmDTge2cmbB7FuwZf5rXo/t6hQYPOTH1Uw53RaTWbu8k3NoIA3dPP6SkKpWP5yB46b0730KE5Yn0VqLNHpYGcwVb1U1wP5BD1WLJ8W2e9Gvo1q5aqO9uNEoaCoDRMfYTOdHxHUauHeUiqtobbfK0FPIys4Rcj5PkNRzWO+zEk7uh0ZzwdweOmLjFonrKfij09xkE9PD2wmIJwo7XYKlU/WcC/OZyho6Ui8ZMYIjvqSF2ESHhnPty6HxChPocCUA1TR6gZw4gqMbM+4ikRrP+kR1LIJKBYklww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7qt5dTYWWtkAnvdPUFRF8OqyJe+9yc6gf8l+FAT1KXQ=; b=GqNjQXgZIwcJ+nnku4wIH+RT+GUac7TIdQBHj8Z3e1rnLpMu++IVSn9w3lYJfLHAKlWyJPF8czTRApic52U3rogaVT803K9Vmt875GVns0osxMNTfzXQMvo+fnOFerZF97wj0tavvsjye39VIc2EezEjLvL448Ax92ep++QiJTJCBdITivnUHFVzhhYoHhgiAgDg5lRua3p5nmDnRqbEZke1r8FMFvjEL82g4d+eqHLMphZBl4J8GO14c/2HzUW/7Ua8DebMrPFgq95IBkIi5bE71D6OsKCOOBucEGyds5Cw8nJf7hiy9rCxb+mBFt+VkXcrRNI1J1ZVsx4ghTd2qg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7qt5dTYWWtkAnvdPUFRF8OqyJe+9yc6gf8l+FAT1KXQ=; b=N9cLKYSzPPnh6HYhtNCKhOLbKSiWUd7B4q0XOyXT8/XZFVMFFqUgrw3RoOWv1s5ISuhLVdyMLBQxUydjV35bZBpLU+MzPyCHGwq8zD68K5au2v4FaaTAzyPaTGmSvynYiNvHkI3X6RT6VIyKzEkfm4luxAYAWKGWcsa6daojkXY= Received: from BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) by BN8PR10MB3251.namprd10.prod.outlook.com (2603:10b6:408:c9::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Wed, 30 Mar 2022 15:26:50 +0000 Received: from BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386]) by BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386%4]) with mapi id 15.20.5123.020; Wed, 30 Mar 2022 15:26:50 +0000 From: Alan Maguire To: andrii@kernel.org, daniel@iogearbox.net, ast@kernel.org Cc: kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, toke@redhat.com, sunyucong@gmail.com, netdev@vger.kernel.org, bpf@vger.kernel.org, Alan Maguire Subject: [PATCH v5 bpf-next 2/5] libbpf: support function name-based attach uprobes Date: Wed, 30 Mar 2022 16:26:37 +0100 Message-Id: <1648654000-21758-3-git-send-email-alan.maguire@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> References: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> X-ClientProxiedBy: LO4P123CA0362.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::7) To BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e9ce5ee-61be-40f9-5a9b-08da1261b616 X-MS-TrafficTypeDiagnostic: BN8PR10MB3251:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8bUzC2L6Y9aWXr7VqxSeYvSqkAs4d23LlsnOx/ViAxlE97eoljnAjhVlggnWTNTVM78pvUWfjY4GObC9l6iYqcT37ecf6/EpT8D+r/v/uOboY9//Ebtl0wa2qZhFw0dYLSLssXelr9iuAkrYsDg+RZggQeFBrRYd6nXk0WC6TvMp0dkpuQpqrhggE1xg1BFgD8e0C0/4/0JCGXwRR1QzLnXdgGpS3mkkzsrqhs1OzHs2LiqzuxHAcXSm01C8nyxAlcddHeOTkBI6ILMV9rQYSUb5Q1VWyU1yTc3gmtryKIROkc52K7xelgkYDY8ldlqVXreYoqT1S2CRVqcnmz3Rj2Nn2TcrrySugZmCNdD9dxjH2G5UgyYgMGzVh7mKuqBeIAc1+xIf+pLkGGyYK/lTTtrfFBJ/N4hAwYgbul1/oClxF0r2Y8EvPoeCqoYRUlHGdrr8w7tM/6DNWat9f1AuNGrjbDZXc0vTlgC2Hej6TPL39NgoeLG1FezGyq4+cKc9zrWNHOgCsZVK9hDh0ng3yIuNDomJ8/RxafU2WNd0ODrA6CJSA8moM6FwqnbfhVeB1wDHvQzLaIpHKosyy++FDYE7d0AIxWIpwwR6kq4TlVazM6l4awte14XqIDi6uj0ysD8iFmcEKKmdJ0wDQLFVNAy1WCYWE7clLv4veScERJTABlBoV7eaa1/P6OQ9UCWgMe+UsfvUXQQfyThPfzB4I2B3CysUqVsJZUDGlAksiiyAqYsYzKcW7KDKC6GG+SFqxOQMEtGmFoCWyR/+v+gwUFrkYcs0YdSOI1hThtokhIk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5267.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66476007)(66556008)(66946007)(8676002)(316002)(38100700002)(38350700002)(36756003)(4326008)(86362001)(6486002)(966005)(5660300002)(8936002)(2616005)(6506007)(7416002)(52116002)(44832011)(186003)(26005)(6512007)(6666004)(83380400001)(107886003)(508600001)(2906002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sZ76oLUuaZNLptdMG+zEkdZl95fwtsoLa4iVoPhcGvQbsvyIRyt5c/d2jnAd+TiBAR1ab3nEbMgzk1SVZ88FDUeIs/iv2CWjQahFX3FN2/EONXeyeMfP42Qe7jzs0GojraQMROPx8LMgAsAOWULkAvB9ZjSF+pHTLgLNdpx9olE/EQ0ZYYU4/Lboa7GgWtEFODViJn78Kia6TAqWgxd4EOiqpCsB/8+og5kzPE1YnTmschgBIGFYxJkxKJhytKPZ1NKTCJ56gPj2sWuwmMYSTrySGUlDqYYZ1XXcfQ5qtMzNl9i6eZf8QdoA6f1hmHRpot1A+HWqItDKs/+oWdz7x7cVrvycAxboKE2b9j8oXHI8KE0YGPDvrsdnqIniqTN3In56R/wFYYXbjl3Qgc3rNbThgjBEaIEm8D3/4t6Mz3lCPJQ9TAmIuCxLkoWqmrSrMyip0rEgFZ6E7r0rVKcYCu4ILuTX1xHpd0fQpKp4g/MHWCqHx6PAaDJ/AYVQ1WW8SL9287OT5nm15IfBrlB3dl3Siq6EmkHh1BzneTMDaRklRN3qs7/RZm0eQB0T8ZNjISOlDsJEN2XBK5cZhI/X9Umme0ciNnHEkcDDZHby5y4xjR0eLHqSOvtxljqAYHlkoKwzHsIo/SEK96TqeL6Q7JY98WTqYwBOmi4sBjsDSSWTLbc1p8O2nArrwpBxg7RgS4YH3oMqPblQhc48Nj4AdK++y/2hsv+i105kwOdA64kOM/6OIFeMVy+zWa7bF6y2oflvq4FBV30UzMJY/kmx4oQvlPd09ehIP3Aq4pqyG5mWahfi0xOdBlnJdlBKcT6grur74ERyT7RTR5fEpJTS/oRtjmSTul+CRb3LR6y32Lu0I27pqogJ/zUhI+ZcDb10XRJWBnsrXVltZf8YF13uFOn84WP/Jc7MM8oLnhSyJoV6QHAY7lYTyBLu9LKrXTCmWk05J5LWQlfPZgG/1G/hcph9wpvbSPnsal4HkDZf2mkRZ2iNqf7SFATvaaCVs0c+l2XGFxFOsFbO8+FQE1+c/tlclZHEAC2LqYpCJqiOKjPj6X0qyjp/2Bl3oopTCyaj00xNfHtuf7OIi9hkmoXOFVCCWWsScmhVrBDe8bJSKdAM2V/Vr64nGlub/dHg1/Oir4+P3z6XBT45zuMFoOJyy/rLLhibU87FgzB26iuyXHCLOIx0x8q+jhs5dDCIt7RuKSWH6zwdrBxViWkZrOzCF056doZEzLDFxL4hF658owIDa2L+50RJAQGhQ4vG6O5UDU3aq4P2/60in/GnY/D2SjoKF6PMFFr/rTZOvHy8gDH1Jov8WPqzEM/I44JAlxU3gzXXevd9zVYQoa05hehk1bzS/bXZ1LUi4pJIu8nGSaLtnZECUa3tkGCAEe9+EA0DHO7fRGZd8+C7MPNw4HEHAyl1zUUoRKMi+pKO/JNokgBFKLuEPZg8XPEsmul2jSHdv8Atl4N6QIII4JrwErnHlHS8NRRHbDAU2Ubqfu0Ht67kNFkTAQL87Qz4tXu8TIBrjZ7TNaug7dSELgSBWO+EjhZAYTb3JoCbcDM0IyH1irs+XMSsAE83srFgs+7m2dq4bakpcj2I+ETzTuJZvcheob0/6VtgGg0RG226wqnOnKDe4KTIPN/HKhQ32VH1rq0GfrrTGWts2W1hLV3LIOxASTOyvI/i2q9FJfv0G/EGbVLLY65PdYOgDBhjyoT1FtmiM2xqxauA3J7PzrXjnFzdR2gWdRtsGnsGWnMwuXSm97E= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e9ce5ee-61be-40f9-5a9b-08da1261b616 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5267.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2022 15:26:50.6298 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: N/0WsFCemV9YjGy5eze1MzABUN1MH+76lsgolXnsO6D9DKeEreqsIHRiTFtVutZiRdSwsfExeOHKl37NBAn0LA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR10MB3251 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.425,18.0.850 definitions=2022-03-30_04:2022-03-29,2022-03-30 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 suspectscore=0 bulkscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203300074 X-Proofpoint-ORIG-GUID: 7__wi3Fw_EBcmgV_eEPiamWqyL4VR53A X-Proofpoint-GUID: 7__wi3Fw_EBcmgV_eEPiamWqyL4VR53A Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net kprobe attach is name-based, using lookups of kallsyms to translate a function name to an address. Currently uprobe attach is done via an offset value as described in [1]. Extend uprobe opts for attach to include a function name which can then be converted into a uprobe-friendly offset. The calcualation is done in several steps: 1. First, determine the symbol address using libelf; this gives us the offset as reported by objdump 2. If the function is a shared library function - and the binary provided is a shared library - no further work is required; the address found is the required address 3. Finally, if the function is local, subtract the base address associated with the object, retrieved from ELF program headers. The resultant value is then added to the func_offset value passed in to specify the uprobe attach address. So specifying a func_offset of 0 along with a function name "printf" will attach to printf entry. The modes of operation supported are then 1. to attach to a local function in a binary; function "foo1" in "/usr/bin/foo" 2. to attach to a shared library function in a shared library - function "malloc" in libc. [1] https://www.kernel.org/doc/html/latest/trace/uprobetracer.html Signed-off-by: Alan Maguire --- tools/lib/bpf/libbpf.c | 203 +++++++++++++++++++++++++++++++++++++++++++++++++ tools/lib/bpf/libbpf.h | 10 ++- 2 files changed, 212 insertions(+), 1 deletion(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index a7d5954..eda724c 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -10517,6 +10517,195 @@ static int perf_event_uprobe_open_legacy(const char *probe_name, bool retprobe, return pfd; } +/* uprobes deal in relative offsets; subtract the base address associated with + * the mapped binary. See Documentation/trace/uprobetracer.rst for more + * details. + */ +static long elf_find_relative_offset(const char *filename, Elf *elf, long addr) +{ + size_t n; + int i; + + if (elf_getphdrnum(elf, &n)) { + pr_warn("elf: failed to find program headers for '%s': %s\n", filename, + elf_errmsg(-1)); + return -ENOENT; + } + + for (i = 0; i < n; i++) { + int seg_start, seg_end, seg_offset; + GElf_Phdr phdr; + + if (!gelf_getphdr(elf, i, &phdr)) { + pr_warn("elf: failed to get program header %d from '%s': %s\n", i, filename, + elf_errmsg(-1)); + return -ENOENT; + } + if (phdr.p_type != PT_LOAD || !(phdr.p_flags & PF_X)) + continue; + + seg_start = phdr.p_vaddr; + seg_end = seg_start + phdr.p_memsz; + seg_offset = phdr.p_offset; + if (addr >= seg_start && addr < seg_end) + return addr - seg_start + seg_offset; + } + pr_warn("elf: failed to find prog header containing 0x%lx in '%s'\n", addr, filename); + return -ENOENT; +} + +/* Return next ELF section of sh_type after scn, or first of that type if scn is NULL. */ +static Elf_Scn *elf_find_next_scn_by_type(Elf *elf, int sh_type, Elf_Scn *scn) +{ + while ((scn = elf_nextscn(elf, scn)) != NULL) { + GElf_Shdr sh; + + if (!gelf_getshdr(scn, &sh)) + continue; + if (sh.sh_type == sh_type) + return scn; + } + return NULL; +} + +/* Find offset of function name in object specified by path. "name" matches + * symbol name or name@@LIB for library functions. + */ +static long elf_find_func_offset(const char *binary_path, const char *name) +{ + int fd, i, sh_types[2] = { SHT_DYNSYM, SHT_SYMTAB }; + bool is_shared_lib, is_name_qualified; + char errmsg[STRERR_BUFSIZE]; + long ret = -ENOENT; + size_t name_len; + GElf_Ehdr ehdr; + Elf *elf; + + fd = open(binary_path, O_RDONLY | O_CLOEXEC); + if (fd < 0) { + ret = -errno; + pr_warn("failed to open %s: %s\n", binary_path, + libbpf_strerror_r(ret, errmsg, sizeof(errmsg))); + return ret; + } + elf = elf_begin(fd, ELF_C_READ_MMAP, NULL); + if (!elf) { + pr_warn("elf: could not read elf from %s: %s\n", binary_path, elf_errmsg(-1)); + close(fd); + return -LIBBPF_ERRNO__FORMAT; + } + if (!gelf_getehdr(elf, &ehdr)) { + pr_warn("elf: failed to get ehdr from %s: %s\n", binary_path, elf_errmsg(-1)); + ret = -LIBBPF_ERRNO__FORMAT; + goto out; + } + /* for shared lib case, we do not need to calculate relative offset */ + is_shared_lib = ehdr.e_type == ET_DYN; + + name_len = strlen(name); + /* Does name specify "@@LIB"? */ + is_name_qualified = strstr(name, "@@") != NULL; + + /* Search SHT_DYNSYM, SHT_SYMTAB for symbol. This search order is used because if + * a binary is stripped, it may only have SHT_DYNSYM, and a fully-statically + * linked binary may not have SHT_DYMSYM, so absence of a section should not be + * reported as a warning/error. + */ + for (i = 0; i < ARRAY_SIZE(sh_types); i++) { + size_t nr_syms, strtabidx, idx; + Elf_Data *symbols = NULL; + Elf_Scn *scn = NULL; + int last_bind = -1; + const char *sname; + GElf_Shdr sh; + + scn = elf_find_next_scn_by_type(elf, sh_types[i], NULL); + if (!scn) { + pr_debug("elf: failed to find symbol table ELF sections in '%s'\n", + binary_path); + continue; + } + if (!gelf_getshdr(scn, &sh)) + continue; + strtabidx = sh.sh_link; + symbols = elf_getdata(scn, 0); + if (!symbols) { + pr_warn("elf: failed to get symbols for symtab section in '%s': %s\n", + binary_path, elf_errmsg(-1)); + ret = -LIBBPF_ERRNO__FORMAT; + goto out; + } + nr_syms = symbols->d_size / sh.sh_entsize; + + for (idx = 0; idx < nr_syms; idx++) { + int curr_bind; + GElf_Sym sym; + + if (!gelf_getsym(symbols, idx, &sym)) + continue; + + if (GELF_ST_TYPE(sym.st_info) != STT_FUNC) + continue; + + sname = elf_strptr(elf, strtabidx, sym.st_name); + if (!sname) + continue; + + curr_bind = GELF_ST_BIND(sym.st_info); + + /* User can specify func, func@@LIB or func@@LIB_VERSION. */ + if (strncmp(sname, name, name_len) != 0) + continue; + /* ...but we don't want a search for "foo" to match 'foo2" also, so any + * additional characters in sname should be of the form "@@LIB". + */ + if (!is_name_qualified && sname[name_len] != '\0' && sname[name_len] != '@') + continue; + + if (ret >= 0) { + /* handle multiple matches */ + if (last_bind != STB_WEAK && curr_bind != STB_WEAK) { + /* Only accept one non-weak bind. */ + pr_warn("elf: ambiguous match for '%s', '%s' in '%s'\n", + sname, name, binary_path); + ret = -LIBBPF_ERRNO__FORMAT; + goto out; + } else if (curr_bind == STB_WEAK) { + /* already have a non-weak bind, and + * this is a weak bind, so ignore. + */ + continue; + } + } + ret = sym.st_value; + last_bind = curr_bind; + } + /* For binaries that are not shared libraries, we need relative offset */ + if (ret > 0 && !is_shared_lib) + ret = elf_find_relative_offset(binary_path, elf, ret); + if (ret > 0) + break; + } + + if (ret > 0) { + pr_debug("elf: symbol address match for '%s' in '%s': 0x%lx\n", name, binary_path, + ret); + } else { + if (ret == 0) { + pr_warn("elf: '%s' is 0 in symtab for '%s': %s\n", name, binary_path, + is_shared_lib ? "should not be 0 in a shared library" : + "try using shared library path instead"); + ret = -ENOENT; + } else { + pr_warn("elf: failed to find symbol '%s' in '%s'\n", name, binary_path); + } + } +out: + elf_end(elf); + close(fd); + return ret; +} + /* Get full path to program/shared library. */ static int resolve_full_path(const char *file, char *result, size_t result_sz) { @@ -10569,6 +10758,7 @@ static int resolve_full_path(const char *file, char *result, size_t result_sz) size_t ref_ctr_off; int pfd, err; bool retprobe, legacy; + const char *func_name; if (!OPTS_VALID(opts, bpf_uprobe_opts)) return libbpf_err_ptr(-EINVAL); @@ -10586,6 +10776,19 @@ static int resolve_full_path(const char *file, char *result, size_t result_sz) } binary_path = full_binary_path; } + func_name = OPTS_GET(opts, func_name, NULL); + if (func_name) { + long sym_off; + + if (!binary_path) { + pr_warn("name-based attach requires binary_path\n"); + return libbpf_err_ptr(-EINVAL); + } + sym_off = elf_find_func_offset(binary_path, func_name); + if (sym_off < 0) + return libbpf_err_ptr(sym_off); + func_offset += sym_off; + } legacy = determine_uprobe_perf_type() < 0; if (!legacy) { diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 05dde85..28cd206 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -459,9 +459,17 @@ struct bpf_uprobe_opts { __u64 bpf_cookie; /* uprobe is return probe, invoked at function return time */ bool retprobe; + /* Function name to attach to. Could be an unqualified ("abc") or library-qualified + * "abc@LIBXYZ" name. To specify function entry, func_name should be set while + * func_offset argument to bpf_prog__attach_uprobe_opts() should be 0. To trace an + * offset within a function, specify func_name and use func_offset argument to specify + * offset within the function. Shared library functions must specify the shared library + * binary_path. + */ + const char *func_name; size_t :0; }; -#define bpf_uprobe_opts__last_field retprobe +#define bpf_uprobe_opts__last_field func_name /** * @brief **bpf_program__attach_uprobe()** attaches a BPF program From patchwork Wed Mar 30 15:26:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 12796019 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAB18C433EF for ; Wed, 30 Mar 2022 15:27:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348191AbiC3P3W (ORCPT ); Wed, 30 Mar 2022 11:29:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348210AbiC3P3N (ORCPT ); Wed, 30 Mar 2022 11:29:13 -0400 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A7211B9FDD; Wed, 30 Mar 2022 08:27:20 -0700 (PDT) Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22UFL08Q007033; Wed, 30 Mar 2022 15:26:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=/Gnsr9cLYV1x8NEYFEeoK+9Qiw9F/I5N6q4Z8+erXu4=; b=rTsdKIrRsAgca83wSIR2VXuEA6ggEdeHduNdlzVddxkNfD0SjMlVZTjaMO4MSwd6YREs CIDnXk5/r11M9ycIge1Z5rIPd6QIZVUQqQWY4G1Wg6Fqp47+B6w98gzt4kQ5JLrkOhL2 ZdZKYBiHEaMjaRiDx+Py6p6k/NHrnUg4JvjNih74Ht4Z2kv5mTSPGg0TBsb2XYu1tQzB CXAuIXqxAqfIlO+ioAXQF60UnZGm+uBGcTwaUcs2nU3tOWKZrqNsgvc6c3pVBRSazUJB Cu4XOjQBx77k8QQlsCDvayvn0jgGn4YqGMv//N4jzb/2bbeZltIvDXSldXGgN7cp5a8Z zA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com with ESMTP id 3f1tes1t1r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:55 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 22UFBKS4014788; Wed, 30 Mar 2022 15:26:55 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1anam02lp2042.outbound.protection.outlook.com [104.47.57.42]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com with ESMTP id 3f1s947qbm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gcbfey/hiQ+/a6i7wy8ybX02tuYGxwPCjEPPUgDsExAQZTh9ND5yJdaS8M15VmRM3l3GVuMmeBSTLY8/vyaFtjB5MRcaakRwyC6H0CAfBBUHhuMvFswYNY2ASMg6WOoCuUUclphC0+oE38In+yYuwBaOF3aDTAQ4+Vz/bZPk2QQZikvn0kwf+EwLVy3YDKDhqIoh6gXOIOGipDatnWUz4/vv0H1+ieOnok+Y0UuGnmeAkvnn6ynkbXiobesrVaxalpVEhARTvg+h56cMbgpg3/W/v+PDoQa3GMO/BDofxG6Mazs5OI5Jw8DgPd7LTGvycQeMi6LxHFTxHnkZeUl+ZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/Gnsr9cLYV1x8NEYFEeoK+9Qiw9F/I5N6q4Z8+erXu4=; b=axi4B3bsrXAIy1QeAd6ol2M+BuYuNVTSRh1djQY8Vy9AiJrd9WiXq8BYFqPavsDFjKazOyc0EvzcFzstuZGYVBEN5k13AB62yZKBg22skRMTRIoVCZE/FnUF4HqANCsTO0R9o9FdSZjbQJQH5SYxD21nmzEwuN1QXrO5Sp/YaIjDoI2kTtujPyYyJWkTTGR9rLzDHDWFYwzwvabssFtOsvPWsNtT03tP7aZd+S19Hr2BkTcA6b8oJQqmKKPXxpwyr6tlMz3+0KBlzi8hcIEUdMSvGsebLX1QhNvX3Y1TPiIP3a4fn2xRH74h+tYnOxusvPdURuBGTUjHlu6rbYDgaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/Gnsr9cLYV1x8NEYFEeoK+9Qiw9F/I5N6q4Z8+erXu4=; b=YOn0FCDYf5jhOWtYhu99O7egIQW9EXxqog1TvX8eZzqrGOdLX57TMCHPmSWEtk6RGuIDBDbpBaw8DyQ5twdxd9XlOuSwU0HlohOvjFIwBOFwcTNq1poWbfp5eIHA86FNIhvxB6vwUxOpz8gb6eWae66kSQKu8Dw5Zj3HnobMPqg= Received: from BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) by BN8PR10MB3251.namprd10.prod.outlook.com (2603:10b6:408:c9::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Wed, 30 Mar 2022 15:26:52 +0000 Received: from BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386]) by BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386%4]) with mapi id 15.20.5123.020; Wed, 30 Mar 2022 15:26:52 +0000 From: Alan Maguire To: andrii@kernel.org, daniel@iogearbox.net, ast@kernel.org Cc: kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, toke@redhat.com, sunyucong@gmail.com, netdev@vger.kernel.org, bpf@vger.kernel.org, Alan Maguire Subject: [PATCH v5 bpf-next 3/5] libbpf: add auto-attach for uprobes based on section name Date: Wed, 30 Mar 2022 16:26:38 +0100 Message-Id: <1648654000-21758-4-git-send-email-alan.maguire@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> References: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> X-ClientProxiedBy: LO4P123CA0362.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::7) To BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 81d80b1c-2a44-439f-343a-08da1261b751 X-MS-TrafficTypeDiagnostic: BN8PR10MB3251:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x+DJPCjBTDVE1d43dp4lF56zup1XP9/YZUddRwQJDNkaKrAfGvKJW1CQbR6dDPmrT+k9HDZArn0RB8A4NC+DnjyMxZM3TZC+MSwiKiNQ2/nX9tWDuy8jZosBHlcO5ZU9rMeapKc2e1krkK0BsmbK3KiLYMBAcZG3g0N8/4Kf823j9OTEHQ2QI/+uTtk8jCSu3dk3JL1xTiayvblO8DpOSjh33IiX0MppEkw5d5CEojOuEcVk+sjoJHETKl4sP7PpXFcnf49m4OK5smz97gPSCsVfOGslezgvW518kUmKf804h5beS1w2r7c0lTKczdtubDB6uAv5Y6EeOXFyokAQOfmIz5foqnugnuXb8rJ8o6zRwS1A+xlcTd+YrdtrMH+MH06CX05C5A+cYeve+TNgioz2tm7PuCbSNNhmSbzqZOp7bMcidAmmIpaOtqlDoBj7nn/U9/vED2F9410ibvfUYNBMCqgY6BFEQSxLuLHHHefv6YTc9FEZ6/nC8KS5bB+/kdxQoi9SDM8WKFNdjR7pVtrUAmjysduKOVUrD25nTzKhjLL3VacimwcZkFYiSSvStWpEnVxH9OOYw0l+euKJTELGI7i/7l71ehtq51wf86LtcdHTfXAeTQSzcUEMOZXibrxgxr5l2Qrlgo8w7zE+cpg6veWcIVhjeIkL46L4wqkvxp7ixfnDiSX+pjzHZTg2Pcbj2PS5J/D2na9bzlWmtg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5267.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66476007)(66556008)(66946007)(8676002)(316002)(38100700002)(38350700002)(36756003)(4326008)(86362001)(6486002)(5660300002)(8936002)(2616005)(6506007)(7416002)(52116002)(44832011)(186003)(26005)(6512007)(6666004)(83380400001)(107886003)(508600001)(2906002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vPDhs4Sluw+FPUO+l7OEl/L0w6fd2rO04jisQ6KHx+KXDQc1924IAEyuwhAuBOaYQUDvyS125anOK4Iq8pgxXEXklZdvMbL02zCVe8Ii6Vkic9YoUEUdn23QbxMiw1ay4WR/kYk1R1ie4tHCzzgdqVNL7DE7QtwdhZPdMbN506r3HMyS+HXSDfjD7l8ffl0GWl34W4T1B6SJYL5wv2jOTG3qV3A4OzEhio4c2eSimFry6ugwL6AfHTk9I21xqsybWeeVOXlvXEhHdG+GqJu7lVGrLXqg/Ll5g5HhqMp9g7OXyh+Ev+Tf2E4V1N71OYGIU01df8cjwG/4HMw/xnuSGBgLeFIk9aPy/+PiqmROUJ3ju9WHvIZo7Q9/8Z+kIKN87tXqlX4ygxaMxNkVskSuqghk45Mex4cBQb2hY/tlvPsj+wBm7TmZbpVK1pkEvr+t1J7k9pQGbSLJXaQtnGQKlOz/P2ntgYNzTOAxx1QoCBQRVaG2jizuu88el/kO3GJYqpzkw4+xopc4WHrjGeINiYlnaTxDcBhIWFdZi6iiNlSmJmG4HPF7WbQ2Vg9oG7403T7nNk6RVpGMiCUBHoxAa9VSq3bytQUC2eZPNMyxyr5KQdIOyoUUheqowTSuPiQGehbh8hgRlpWwSl8aF7YtFnTIj1dk9VtGKGtkn8O7Z7/u3au3YEeE4zRfBr42IO/pCFTigYSO+jVvIoKAcBI6cWr73/9gGpjnpRIw73zVShhQmnNzH1GDG76CpU//nAmM4GkfSYvY0Rth+Q/YcAC0kwt44Zs+fjyuEJN0pv1Lr3qA47aPogaBouBvOGkeQwb4aLDzwL/iKX3wiTp28QLgTtHqRz66P+8fave3zv+8/NqI29mvBR/AsUjN8ujA8EzLE4inHtCBorRzcWjhgNMzNWBjWqZBluVT2sJr/8FRwLaphLu+0FW8Alr4R+E0x8xZpZkzIWv57zBZfoE78bixWOURFebFBDIOGqCN5qPc0hyyz78ieSa86DY7vrUBqoMiA+IhjVvWDusDBbr3RpEFWLki81yJM8gMo5mQdTcFVkUpBXm4nFufLp2LqUxpQtb7N8gYjSSUsPlP6dev4KYC0IGDc/bvX/vhhmvH1n7Zfdx3hMo8oTE139f4qnaU0f/CcZt1gmb4sMxjg2mIyeToS/VOJJWYZ88aAz4O8u9PqeyCUvct6Epiddi3y/VRFm+ouUnt1TUTAtB+WFpA0fIs9clKdCDQNFndj5wYERsl0DLfXcA+fnqR7luhrU/AgTNmcZJz78rSXefFVXARQAdsfeYf4DEHMPnBFqsowDLzKdQdTQ1fYrnYkEUZDKcAPz3rzFJbr1Qlo55vBArya9lO4EEVSHC/58XONd0+2A7vLZhLXfKbZzIyY9Gycre2ejtsmkANvWRn7JImsPzjmdNspadvc4Btwj6JWYa7NEoe5n43moufgPurL/DbdqqjaJU2ElF3bR7vSyzifyGcb4Llc5WSCgjPNuKeQQOKgejVTspnHzdUsHysHuG9VbaNrImQWr3LfP+8i27HlcHkhHG1uM5VHQS2VBEEKncO8MMIDo15ReQRoif0VRkHFeCWpiL6QDtt8qjgUkSmd47ghimF3wOfeBdcElHLuKdG4LpKH/LPdbo8R9JcvLiHYdsEgNnsApuw5KT80smqMimWMlI69tRBwCc46WCqmRC81jnbiZdY7jIftV1NHBrLhendhEzajY7jwalu8PKyRo9lFn0vbTDtqXRsAPLVymd+Ca4jxnk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81d80b1c-2a44-439f-343a-08da1261b751 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5267.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2022 15:26:52.4901 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KCfGI5SraAf6QMDMqErhU8vsMV8avwIq27LPI6teRBSK65bzfRpGLn4NrRP4cJAw3FYjUJXR3dW7tWtYhrEoJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR10MB3251 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.425,18.0.850 definitions=2022-03-30_04:2022-03-29,2022-03-30 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=1 bulkscore=0 malwarescore=0 mlxscore=0 phishscore=0 spamscore=0 suspectscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203300074 X-Proofpoint-GUID: _5X0uZkx3FO68orGRYDzt88oXl9pPMla X-Proofpoint-ORIG-GUID: _5X0uZkx3FO68orGRYDzt88oXl9pPMla Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net Now that u[ret]probes can use name-based specification, it makes sense to add support for auto-attach based on SEC() definition. The format proposed is SEC("u[ret]probe/binary:[raw_offset|[function_name[+offset]]") For example, to trace malloc() in libc: SEC("uprobe/libc.so.6:malloc") ...or to trace function foo2 in /usr/bin/foo: SEC("uprobe//usr/bin/foo:foo2") Auto-attach is done for all tasks (pid -1). prog can be an absolute path or simply a program/library name; in the latter case, we use PATH/LD_LIBRARY_PATH to resolve the full path, falling back to standard locations (/usr/bin:/usr/sbin or /usr/lib64:/usr/lib) if the file is not found via environment-variable specified locations. Signed-off-by: Alan Maguire --- tools/lib/bpf/libbpf.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index eda724c..38b1c91 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -8630,6 +8630,7 @@ int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log } static int attach_kprobe(const struct bpf_program *prog, long cookie, struct bpf_link **link); +static int attach_uprobe(const struct bpf_program *prog, long cookie, struct bpf_link **link); static int attach_tp(const struct bpf_program *prog, long cookie, struct bpf_link **link); static int attach_raw_tp(const struct bpf_program *prog, long cookie, struct bpf_link **link); static int attach_trace(const struct bpf_program *prog, long cookie, struct bpf_link **link); @@ -8642,9 +8643,9 @@ int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log SEC_DEF("sk_reuseport/migrate", SK_REUSEPORT, BPF_SK_REUSEPORT_SELECT_OR_MIGRATE, SEC_ATTACHABLE | SEC_SLOPPY_PFX), SEC_DEF("sk_reuseport", SK_REUSEPORT, BPF_SK_REUSEPORT_SELECT, SEC_ATTACHABLE | SEC_SLOPPY_PFX), SEC_DEF("kprobe/", KPROBE, 0, SEC_NONE, attach_kprobe), - SEC_DEF("uprobe/", KPROBE, 0, SEC_NONE), + SEC_DEF("uprobe+", KPROBE, 0, SEC_NONE, attach_uprobe), SEC_DEF("kretprobe/", KPROBE, 0, SEC_NONE, attach_kprobe), - SEC_DEF("uretprobe/", KPROBE, 0, SEC_NONE), + SEC_DEF("uretprobe+", KPROBE, 0, SEC_NONE, attach_uprobe), SEC_DEF("kprobe.multi/", KPROBE, BPF_TRACE_KPROBE_MULTI, SEC_NONE, attach_kprobe_multi), SEC_DEF("kretprobe.multi/", KPROBE, BPF_TRACE_KPROBE_MULTI, SEC_NONE, attach_kprobe_multi), SEC_DEF("tc", SCHED_CLS, 0, SEC_NONE), @@ -10843,6 +10844,75 @@ static int resolve_full_path(const char *file, char *result, size_t result_sz) } +/* Format of u[ret]probe section definition supporting auto-attach: + * u[ret]probe/binary:function[+offset] + * + * binary can be an absolute/relative path or a filename; the latter is resolved to a + * full binary path via bpf_program__attach_uprobe_opts. + * + * Specifying uprobe+ ensures we carry out strict matching; either "uprobe" must be + * specified (and auto-attach is not possible) or the above format is specified for + * auto-attach. + */ +static int attach_uprobe(const struct bpf_program *prog, long cookie, struct bpf_link **link) +{ + DECLARE_LIBBPF_OPTS(bpf_uprobe_opts, opts); + char *func, *probe_name, *func_end; + char *func_name, binary_path[512]; + unsigned long long raw_offset; + size_t offset = 0; + int n; + + *link = NULL; + + opts.retprobe = str_has_pfx(prog->sec_name, "uretprobe/"); + if (opts.retprobe) + probe_name = prog->sec_name + sizeof("uretprobe/") - 1; + else + probe_name = prog->sec_name + sizeof("uprobe/") - 1; + + /* handle SEC("u[ret]probe") - format is valid, but auto-attach is impossible. */ + if (strlen(probe_name) == 0) { + pr_debug("section '%s' is old-style u[ret]probe/function, cannot auto-attach\n", + prog->sec_name); + return 0; + } + snprintf(binary_path, sizeof(binary_path), "%s", probe_name); + /* ':' should be prior to function+offset */ + func_name = strrchr(binary_path, ':'); + if (!func_name) { + pr_warn("section '%s' missing ':function[+offset]' specification\n", + prog->sec_name); + return -EINVAL; + } + func_name[0] = '\0'; + func_name++; + n = sscanf(func_name, "%m[a-zA-Z0-9_.]+%li", &func, &offset); + if (n < 1) { + pr_warn("uprobe name '%s' is invalid\n", func_name); + return -EINVAL; + } + if (opts.retprobe && offset != 0) { + free(func); + pr_warn("uretprobes do not support offset specification\n"); + return -EINVAL; + } + + /* Is func a raw address? */ + errno = 0; + raw_offset = strtoull(func, &func_end, 0); + if (!errno && !*func_end) { + free(func); + func = NULL; + offset = (size_t)raw_offset; + } + opts.func_name = func; + + *link = bpf_program__attach_uprobe_opts(prog, -1, binary_path, offset, &opts); + free(func); + return 0; +} + struct bpf_link *bpf_program__attach_uprobe(const struct bpf_program *prog, bool retprobe, pid_t pid, const char *binary_path, From patchwork Wed Mar 30 15:26:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 12796017 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4DF96C433FE for ; Wed, 30 Mar 2022 15:27:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348188AbiC3P3D (ORCPT ); Wed, 30 Mar 2022 11:29:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348186AbiC3P27 (ORCPT ); Wed, 30 Mar 2022 11:28:59 -0400 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8A3B81B30A8; Wed, 30 Mar 2022 08:27:13 -0700 (PDT) Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22UFM0W1027915; Wed, 30 Mar 2022 15:26:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=AxgLFuP/tlSx1rsffAT5IXk1Giv2HX5q1I0A5GvUjcM=; b=WQcYbbEWPedxvpzlBR8SXA8PbWEl/GH/7XoCmLzvZxIRmQGscDXl9dXPi9Zmfrqf25Uo g+rB6UqS0UdA3eB6EpmaTs01bXHHhaRuND6HNY5VN78XDZLrMm9VRptEbrGfO5lP0ew9 0Y56cpecNP1F71yZvwNNLVlXT9i4+NrqqOQyoz4Qz/iMbk4CxG1meIh3Hn4rSts3pEN+ HlGCOKNZfzx5kUbFm2qXIp0X9rb+p2NBQksA9DEx4dE89Asfj0zhlpgDLc7JEQNpEvd4 kb/S/J/hWwcUV4UfgEH6msalhXCiz3dy5Nun7dT+GTZSrIsUtSFoA3fhs5YcDUvLv48/ 9w== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com with ESMTP id 3f1sm2hv7a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:57 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 22UFAZqZ023548; Wed, 30 Mar 2022 15:26:56 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2171.outbound.protection.outlook.com [104.47.58.171]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3f1s949chw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YExplzGgTS9jQl3TwHNhGsb8/kQA/cvlZp+ETIzWvNnRF8bhEZYYZZlO6UwEGFnOdFqyYrqn+bSmUAfGhxvsF9b7PUNusKimZpMYoAMmWbwsZ41wxokSPAheL7dae6H6gvJp5S/saccg1eTRgLhNRo4QKR4hOPD6nQBk/RiFJqtg0ijJ+R3kZyqKqD5virpKPdB2i0+0dDcIjWJI0d9qk3Ex1B7QRD17pQ9NYAE9HrFh/2UUq+oDG2/8bNEOU+9JrJl7m0CMWLDBRwKb4opZH8j1fR9jgXYPBLNDPYs0LVAHTjenfQTH1LMkOxUWsnYZoDB4HUtfU1oKZbV0qsu8bA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AxgLFuP/tlSx1rsffAT5IXk1Giv2HX5q1I0A5GvUjcM=; b=eOGpb5tzxKPF16Z08FRcjU2vyOq8ZJYu6EsP4aPjs0jtEw753rvVPIvOfqnK5gy9myI/ymphSg6TdGjCI4pHIBys2Fn9Ge++sDEcXxD3cP//IPGbGXYFuySpoqNM57JXBAQpREm1qYK9Iq8u2UJ1yVb082FV7VMkWJSMAtjSKFRClcK0/aDTxlaaWQ5WL7S/MR3p7jZMm4m5BA51dou7S9+5AFYSHrbDJByfxtNaBceAO1IDaq4hkMDtsubKwV7s/YYVpjlGHi7rIIK5oX4msXF51LGt1R2ipuH2xTK6ZkYr77qRlZgyG8yxc7bQXj7/H/lvD0ajf282LJG3PJzxHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AxgLFuP/tlSx1rsffAT5IXk1Giv2HX5q1I0A5GvUjcM=; b=NlSRHs8CgjjTupSA3Xt3s5d+5eVIWTi80YH4e+pc3h/dKkhY0WN3gGhl1ai9soNaI/DXtrZY9JGAjrvQ3xGiexgTfkJRNvR5B0aZGt16oD+z9MkZ0NKUQcjCy8zy6PJhZ+BxR5uhZc2o6+2iE+d/XoRAo3eu6+HLRb/RJxmrcfE= Received: from BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) by DM5PR10MB1322.namprd10.prod.outlook.com (2603:10b6:3:e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.19; Wed, 30 Mar 2022 15:26:54 +0000 Received: from BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386]) by BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386%4]) with mapi id 15.20.5123.020; Wed, 30 Mar 2022 15:26:54 +0000 From: Alan Maguire To: andrii@kernel.org, daniel@iogearbox.net, ast@kernel.org Cc: kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, toke@redhat.com, sunyucong@gmail.com, netdev@vger.kernel.org, bpf@vger.kernel.org, Alan Maguire Subject: [PATCH v5 bpf-next 4/5] selftests/bpf: add tests for u[ret]probe attach by name Date: Wed, 30 Mar 2022 16:26:39 +0100 Message-Id: <1648654000-21758-5-git-send-email-alan.maguire@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> References: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> X-ClientProxiedBy: LO4P123CA0362.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::7) To BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6a83c3b7-3ac4-41c1-860a-08da1261b863 X-MS-TrafficTypeDiagnostic: DM5PR10MB1322:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KETD4uJ0J0qQx37aNvTxnNY7edndF8gYyvYVwrGV8aqN0bnMf8P5uCzSYE7kBdfzZA5vN//YoJd+jSDAFhFsQ9qOyiELS4abib2MIaU+U5Ams3hULa5AHcVgnwkY2C3lJtchnrr5JR1ndoGpi7mfMeh1EnoK1mDHceEofZF/4n3nYKEDWkWuKL38GLCp07yOnCo5heozBHdbaNfqaeP9e9rcqhUqrZRVAztkrweBFP5OgG89EZc0/81Nl56s9g+2mxHQoAzzyoCeDsMXI7aZi1U8rH0HZWVUX1TWA+hDpONPvpPSmTaFqy4vAGUoRpy9ZXxjbK5UVtcmrS5pyk5dBxaOLKzjiTX33uWTCMyASnO6YSOmKG5eXrJZ2LIQYF4CAUvzb/WO/fT6K+eWnJvdJkSaRb+t+sga+DN9Cs4UBfvp8p2AaE1/v8J80F7CGA7BaCiMVPvG4Xw+nlxvXLM5R5JLcPH3B9ppoTSI44DFvNKt6Ux4aZ5US6JHlS2qS2RSbRWoCFgto6woj3UNjI7lKHD16i3Cas8EPZ370fddv6oG2e0dHz5riIqEBAW35nvtB77QJjJp+Zi8ImEtrJgwhFldHmqHoxIp0kZoNnILFt1yOgMK2cfRGstQANwY+tZOZW0MEz4VujxauHCa2lZDygq3dG/58uzN/VFyQQgMYVsOk/fGA7a7VeLS3m/JTwVyv9CFF7okO8LozrSEL0S8HQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5267.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(83380400001)(6666004)(26005)(38350700002)(186003)(6486002)(5660300002)(316002)(2616005)(38100700002)(44832011)(107886003)(7416002)(2906002)(66556008)(36756003)(66946007)(8936002)(8676002)(4326008)(66476007)(6512007)(52116002)(508600001)(6506007)(86362001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3XM4UgNC+1rTSf1LheJ8ZXrV8sW4wafX1mSupr7S0fz/Y7ePHJsnsCbdhaC616nh5SgGEP5d/eJErZL8t5TQoCLrnVIgs/JGrEtlVHfPFTJ7PsVrGnFUCi4w2BPX55U0RSowgiihXWRRFg9gNadGqH5HiJVFe9moO1oHHG25NCJ7Lava8/ySyavCxzMZzlfwzs9R+HzLsfIB1ctGzBt3rzHw2m2HALWT9negb7lX7E4JzJLtQDoozsaKfCJaNB9DHf78rxyLQaFvn26+iLIpHLZKO2q25jIVsjsqu/AV6UodICElkIL82pb+6zvnIIJrrw7smiWEPTDwhPCtcbcrTZEFrxHYONEiTfy5ylm1lppCyt7ZgViDgi/MvynZ8u6tIzicfeJ7JqBEmlehkIMGQ3c3UsPeHKDstz8J2rrZebL6n6QLd79ugOpB5WTDZ2s9SBzpe5U+RmhtF4jTasCTUHUbqp38IDnxdaaTFFpAzw8fXh2ouZ5ZonxMdTGDJBNVeEe/WqH91KDru72lm/oLxANDR/iT1NLA0mIPxHcK5MJWFlQ23/+vhEdRackV1TaIqGSrZTyHmHi8QI/bWXTSoW80KLoQlAzbhY6njSXuAw2VQ6rZwHavL2KkM+uEkrxB83QSI2DiwCB8Yr/vPv9iLd5GQxfy2+hufWi1ii7FNmSrIr0wDqMflm5mmQFpPZONbiQz3MfKAJ71msowjczt/nkW1ja1ZOV5ZYy5AlvPyPcW0ZiSrK/5O5Ew34J4251Gb0WpAkF1yaYQv+aNcEViRYxrYw44JyXT8bK9OQVtUvlIGRlruGWEpboKMoniCBb7vmM4ZPfAOBsOC5s9r2YhYMnf1OlN2RUKwNjVjKicsvJigW5YsxFB9jDvBL6LJhlFcOvXHczgg2eY/4Z6WH6S0o4br75IUKwXvtDF8gdgR7EX280zyPl3iuPpOvZmUz8yXCd+PwmAKBi1Rbx6/LqIIzNBym8EGbt0QHZo9mOwIbfo3VvQKcaIukP1ASuFUcrvasixiltpl/khSpJHrhdYj2wiyONlmqbow4H5KTb3OQjjcPjXRi/l4RHx6QbP9KjXrTd2uh3YFSBcF4oHGKsmocrNd10dQz92WNL4TpU509chOFigvjjsC0KnnjgWVDaU2TYiOZxwNvL9bkG/0AB9VolIjwon26L0Uq3IxXhjpDbvJaPBm8vrWSf28hGwX6UczxDoLv+VArXDwyLbeRiBJ3YwpjTeMPNKH6s4LU3/lItXc2ruw3GgBItsxTMeq92omV0VupiNchqY+pVFzTEm0vRN7b3CCBa/XJaEX0B7o9veF306pbpf6ldJ7SU2o7QsOryZ8nEtUccAFmdEpermN76WF8XcHQEIxVmm5FPlp95J/9rcbdWqLTvf0Ey7R1c0PP2UwSKeRF4mwardqYAAJCzqmiEzt/G/1O0ZAjxa3jR4OnweUOwZKsQIXWqnPTdyJ3iOUySGY49H061vhVVSsQqeIKKdSzoUtFhCkxNRd/NgvrRPuJ6W1+CsoALAmWvVx4nLzp4IbZUjCKneyiwwTdAQseQZFUG/plYy7i4Ty5do+KRnbwIbeZVCitRRPm2jTkslQFjWx0i8KyvZtE7iL1f2LQQMSTewiAX/Fhw/31kSXlg3HdlRyidWVHa+/MtovGiOF2ba4IvMJYHiDzKSU1JInOlH2FmMjIp5/OeYOjQEp6afCqQyxnueUI/ZioJUcJXfdQp3mixD0Zhp268nU4S02hh6OKdAeiXSrkyFj9M= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a83c3b7-3ac4-41c1-860a-08da1261b863 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5267.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2022 15:26:54.2723 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ehqalZ37NG/QbiMhOTOOhGGfBaa9xgs6K9REOmMqmGcq4YimBXnJfbe/wXep5Domrg3OXxW9p0/dNPqFLah+pg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR10MB1322 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.425,18.0.850 definitions=2022-03-30_04:2022-03-29,2022-03-30 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203300074 X-Proofpoint-ORIG-GUID: jQUKIRK-uTbE6VWV9C6tNA9IkWCquVb_ X-Proofpoint-GUID: jQUKIRK-uTbE6VWV9C6tNA9IkWCquVb_ Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net add tests that verify attaching by name for 1. local functions in a program 2. library functions in a shared object ...succeed for uprobe and uretprobes using new "func_name" option for bpf_program__attach_uprobe_opts(). Also verify auto-attach works where uprobe, path to binary and function name are specified, but fails with -EOPNOTSUPP with a SEC name that does not specify binary path/function. Signed-off-by: Alan Maguire --- .../selftests/bpf/prog_tests/attach_probe.c | 85 ++++++++++++++++++---- .../selftests/bpf/progs/test_attach_probe.c | 41 ++++++++++- 2 files changed, 109 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/attach_probe.c b/tools/testing/selftests/bpf/prog_tests/attach_probe.c index d48f6e5..c0c6d41 100644 --- a/tools/testing/selftests/bpf/prog_tests/attach_probe.c +++ b/tools/testing/selftests/bpf/prog_tests/attach_probe.c @@ -11,15 +11,22 @@ static void trigger_func(void) asm volatile (""); } +/* attach point for byname uprobe */ +static void trigger_func2(void) +{ + asm volatile (""); +} + void test_attach_probe(void) { DECLARE_LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts); - int duration = 0; struct bpf_link *kprobe_link, *kretprobe_link; struct bpf_link *uprobe_link, *uretprobe_link; struct test_attach_probe* skel; ssize_t uprobe_offset, ref_ctr_offset; + struct bpf_link *uprobe_err_link; bool legacy; + char *mem; /* Check if new-style kprobe/uprobe API is supported. * Kernels that support new FD-based kprobe and uprobe BPF attachment @@ -43,9 +50,9 @@ void test_attach_probe(void) return; skel = test_attach_probe__open_and_load(); - if (CHECK(!skel, "skel_open", "failed to open skeleton\n")) + if (!ASSERT_OK_PTR(skel, "skel_open")) return; - if (CHECK(!skel->bss, "check_bss", ".bss wasn't mmap()-ed\n")) + if (!ASSERT_OK_PTR(skel->bss, "check_bss")) goto cleanup; kprobe_link = bpf_program__attach_kprobe(skel->progs.handle_kprobe, @@ -90,25 +97,73 @@ void test_attach_probe(void) goto cleanup; skel->links.handle_uretprobe = uretprobe_link; - /* trigger & validate kprobe && kretprobe */ - usleep(1); + /* verify auto-attach fails for old-style uprobe definition */ + uprobe_err_link = bpf_program__attach(skel->progs.handle_uprobe_byname); + if (!ASSERT_EQ(libbpf_get_error(uprobe_err_link), -EOPNOTSUPP, + "auto-attach should fail for old-style name")) + goto cleanup; + + uprobe_opts.func_name = "trigger_func2"; + uprobe_opts.retprobe = false; + uprobe_opts.ref_ctr_offset = 0; + skel->links.handle_uprobe_byname = + bpf_program__attach_uprobe_opts(skel->progs.handle_uprobe_byname, + 0 /* this pid */, + "/proc/self/exe", + 0, &uprobe_opts); + if (!ASSERT_OK_PTR(skel->links.handle_uprobe_byname, "attach_uprobe_byname")) + goto cleanup; + + /* verify auto-attach works */ + skel->links.handle_uretprobe_byname = + bpf_program__attach(skel->progs.handle_uretprobe_byname); + if (!ASSERT_OK_PTR(skel->links.handle_uretprobe_byname, "attach_uretprobe_byname")) + goto cleanup; - if (CHECK(skel->bss->kprobe_res != 1, "check_kprobe_res", - "wrong kprobe res: %d\n", skel->bss->kprobe_res)) + /* test attach by name for a library function, using the library + * as the binary argument. libc.so.6 will be resolved via dlopen()/dlinfo(). + */ + uprobe_opts.func_name = "malloc"; + uprobe_opts.retprobe = false; + skel->links.handle_uprobe_byname2 = + bpf_program__attach_uprobe_opts(skel->progs.handle_uprobe_byname2, + 0 /* this pid */, + "libc.so.6", + 0, &uprobe_opts); + if (!ASSERT_OK_PTR(skel->links.handle_uprobe_byname2, "attach_uprobe_byname2")) goto cleanup; - if (CHECK(skel->bss->kretprobe_res != 2, "check_kretprobe_res", - "wrong kretprobe res: %d\n", skel->bss->kretprobe_res)) + + uprobe_opts.func_name = "free"; + uprobe_opts.retprobe = true; + skel->links.handle_uretprobe_byname2 = + bpf_program__attach_uprobe_opts(skel->progs.handle_uretprobe_byname2, + -1 /* any pid */, + "libc.so.6", + 0, &uprobe_opts); + if (!ASSERT_OK_PTR(skel->links.handle_uretprobe_byname2, "attach_uretprobe_byname2")) goto cleanup; + /* trigger & validate kprobe && kretprobe */ + usleep(1); + + /* trigger & validate shared library u[ret]probes attached by name */ + mem = malloc(1); + free(mem); + /* trigger & validate uprobe & uretprobe */ trigger_func(); - if (CHECK(skel->bss->uprobe_res != 3, "check_uprobe_res", - "wrong uprobe res: %d\n", skel->bss->uprobe_res)) - goto cleanup; - if (CHECK(skel->bss->uretprobe_res != 4, "check_uretprobe_res", - "wrong uretprobe res: %d\n", skel->bss->uretprobe_res)) - goto cleanup; + /* trigger & validate uprobe attached by name */ + trigger_func2(); + + ASSERT_EQ(skel->bss->kprobe_res, 1, "check_kprobe_res"); + ASSERT_EQ(skel->bss->kretprobe_res, 2, "check_kretprobe_res"); + ASSERT_EQ(skel->bss->uprobe_res, 3, "check_uprobe_res"); + ASSERT_EQ(skel->bss->uretprobe_res, 4, "check_uretprobe_res"); + ASSERT_EQ(skel->bss->uprobe_byname_res, 5, "check_uprobe_byname_res"); + ASSERT_EQ(skel->bss->uretprobe_byname_res, 6, "check_uretprobe_byname_res"); + ASSERT_EQ(skel->bss->uprobe_byname2_res, 7, "check_uprobe_byname2_res"); + ASSERT_EQ(skel->bss->uretprobe_byname2_res, 8, "check_uretprobe_byname2_res"); cleanup: test_attach_probe__destroy(skel); diff --git a/tools/testing/selftests/bpf/progs/test_attach_probe.c b/tools/testing/selftests/bpf/progs/test_attach_probe.c index 8056a4c..af994d1 100644 --- a/tools/testing/selftests/bpf/progs/test_attach_probe.c +++ b/tools/testing/selftests/bpf/progs/test_attach_probe.c @@ -10,6 +10,10 @@ int kretprobe_res = 0; int uprobe_res = 0; int uretprobe_res = 0; +int uprobe_byname_res = 0; +int uretprobe_byname_res = 0; +int uprobe_byname2_res = 0; +int uretprobe_byname2_res = 0; SEC("kprobe/sys_nanosleep") int handle_kprobe(struct pt_regs *ctx) @@ -25,18 +29,51 @@ int BPF_KRETPROBE(handle_kretprobe) return 0; } -SEC("uprobe/trigger_func") +SEC("uprobe") int handle_uprobe(struct pt_regs *ctx) { uprobe_res = 3; return 0; } -SEC("uretprobe/trigger_func") +SEC("uretprobe") int handle_uretprobe(struct pt_regs *ctx) { uretprobe_res = 4; return 0; } +SEC("uprobe") +int handle_uprobe_byname(struct pt_regs *ctx) +{ + uprobe_byname_res = 5; + return 0; +} + +/* use auto-attach format for section definition. */ +SEC("uretprobe//proc/self/exe:trigger_func2") +int handle_uretprobe_byname(struct pt_regs *ctx) +{ + uretprobe_byname_res = 6; + return 0; +} + +SEC("uprobe") +int handle_uprobe_byname2(struct pt_regs *ctx) +{ + unsigned int size = PT_REGS_PARM1(ctx); + + /* verify malloc size */ + if (size == 1) + uprobe_byname2_res = 7; + return 0; +} + +SEC("uretprobe") +int handle_uretprobe_byname2(struct pt_regs *ctx) +{ + uretprobe_byname2_res = 8; + return 0; +} + char _license[] SEC("license") = "GPL"; From patchwork Wed Mar 30 15:26:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Maguire X-Patchwork-Id: 12796018 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 804DEC433EF for ; Wed, 30 Mar 2022 15:27:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348186AbiC3P3D (ORCPT ); Wed, 30 Mar 2022 11:29:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348191AbiC3P3C (ORCPT ); Wed, 30 Mar 2022 11:29:02 -0400 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CE3F1B5388; Wed, 30 Mar 2022 08:27:16 -0700 (PDT) Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22UFNYlK027881; Wed, 30 Mar 2022 15:26:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=Nmc47HQizRRt1JgKSUFPwD1OrG0yITvOHjbKi7FS08A=; b=m3wXmpDNPD/hGU5TtSZP62xx3CHguN6EZtFMKbUyM0dksrBFzniWCfllFgykoACNp6RV 5n8TXK5mML97DNqCm4esFT0Ncubx2GEyEt0C/P4bUPpet/sVLcU3caGdZCS58NI1N6lb 88Hdj6LDZRHkWpD/zgs7IGbL+R997zbQBUiB/HAfe9i4VliUC2AHfkvBbOvtPOQxcqth QtlAZrbvBZz/zG5WgMf/RH7gmACa9N/qoC5WU+ZCL0xP3fUdQL5qx7u4KgtuXI28DMq7 oCVQLm40tSZh2bIzwv04F0bHjJSlTND3VIpnTKA2B94mqBpJ9/PrnkF1C3bsN+QySHLW XA== Received: from aserp3030.oracle.com ([141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3f1sm2hv7d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:59 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 22UFBAss055900; Wed, 30 Mar 2022 15:26:58 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2170.outbound.protection.outlook.com [104.47.58.170]) by aserp3030.oracle.com with ESMTP id 3f1rv8f9k9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Mar 2022 15:26:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TJVZerfrMTgSJO1pUD0bXAfJcNt1PHtmqrYiM5+jv484Wc2tmsk85ob1e3EfyYDyc6NvNc7JaLco5U2Jtk6uxb06pofWaj54g8i0wy0W+L5Pmro5tcTZs11U9syUMuxRDxyfoOQLqdMbcSsgX1t4lGeDP/bBHeJd2jtmFGGMtDJ0PRVyTL2MP0x564u6ZxUNr+ZIHr3JtFazFvD37mDcMlQosGnlS5fRXQ8FjAoXxSwrqVYoCqMKmqfY5KXsCvwOZS4KLHlHJ2y1QWWPeFcAOoaNyz2RaBUzm8MWWtW2a/wu3hAe7JaYLmFX3Ax0REgSHPGR8cTPzjt75M99BGZWiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Nmc47HQizRRt1JgKSUFPwD1OrG0yITvOHjbKi7FS08A=; b=Fjx1OlS0WGEqtEcFhWy9Qj792mYobAOji14nzg1PJUccum8TVh8Nz8DyCIc6VI+xQKbyT/7vCVWBPY5LbXQqperr4T3UV2zMFyoP1EC6AaS1WVBrxeWghj1KRiyXHG39mPdUfTfHggz6qi+9eTx0dP0rgebC6O6ySeXM+2qVQ8sD6QvtuGuJDFqM2JH+DHRUGMjIL5jzlBf9V3g+vEiFH3dH+3T5zrJ8peNVSXehn3Ym4CG+tpQzoeMs0W685bW3wAakSU4Na3iLQSEYx9ixbNvWAZiiV37eben4S/NrbuLfbCEzbJIbGUlDmkm+BRfN+Qd/ErHrs/ix/TCZCLMXcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nmc47HQizRRt1JgKSUFPwD1OrG0yITvOHjbKi7FS08A=; b=xADyuWMVAooZ+Y388WhFBFKSqNwayGwZGjUzVS8rFKG/cOIsb5pPkrg1nhK9QaZiCjxlI93RcB5Fonn0Vdy8eciTjsBbW/gzdr+BczjTvhOzmOxBwz8SBE1STxrDdIZPGoptG2AkJUEe4LOBdbYxSr3lUfO94j6dIGK1vgK0W6I= Received: from BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) by DM5PR10MB1322.namprd10.prod.outlook.com (2603:10b6:3:e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.19; Wed, 30 Mar 2022 15:26:56 +0000 Received: from BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386]) by BLAPR10MB5267.namprd10.prod.outlook.com ([fe80::1483:5b00:1247:2386%4]) with mapi id 15.20.5123.020; Wed, 30 Mar 2022 15:26:56 +0000 From: Alan Maguire To: andrii@kernel.org, daniel@iogearbox.net, ast@kernel.org Cc: kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, toke@redhat.com, sunyucong@gmail.com, netdev@vger.kernel.org, bpf@vger.kernel.org, Alan Maguire Subject: [PATCH v5 bpf-next 5/5] selftests/bpf: add tests for uprobe auto-attach via skeleton Date: Wed, 30 Mar 2022 16:26:40 +0100 Message-Id: <1648654000-21758-6-git-send-email-alan.maguire@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> References: <1648654000-21758-1-git-send-email-alan.maguire@oracle.com> X-ClientProxiedBy: LO4P123CA0362.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::7) To BLAPR10MB5267.namprd10.prod.outlook.com (2603:10b6:208:30e::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aad1d0cd-11a6-4ed8-8e6a-08da1261b986 X-MS-TrafficTypeDiagnostic: DM5PR10MB1322:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ee+odXd884Uh8WVTF7sdaG+Dvj32gLyx8Gpr2ifH0D/IGaca7jdL7bmY5q6w7qVR3pvF3x6R39qL8Axy2brKoS0YfrpL3HdcAzvgY1Pxz7ARw1FITxu0ncCxYIKQ2jIlTr5DLLq9CZU6dIml8Lm2NuhQiNZxBeXO6EzoaZuwDKP8k/3HEvcnVJxCKjUF/7fJNGLJj+l2kxJY4/6Itzy0pisGuOFguuWLEopBtwfH71qT9YvJA9m5Rpgl6J/SH4sEnLl01aD1hl54/JKMN8Ij05c8u3BFCBwx0G84BtIpJwDNPhOxp8Xt0q2cb3PJRsFbnirj65do0SBAvDYij0tXj/W6etyuFlGEOgnGUOHoOb9aXQiprOJu3ZPt46U/uUc+/k1WvHT/JXwFqVrQX9jKsN+kHYOqGB4lDUY6G2Sz2NepxQuZnENXnPX3+lCOgxILG4bLHU2VEjF1irllVB/f3Fw+FDE578HRxCoQfLZuxUeUfxJKgtjl1aC4iUb2Fgjvp8PK6NRx2y0FOkpqQCVfQ1KIHObtkvSu5H/iv2nhI64A/wg+nMC7qv5g35AdFEin1dY/zWpjQs7h4UMlr59pyLYGIiYWdksoahu/YHx15mrWxgs5+usenbzfnlEDhfggXlfEn1C+m26S0vgd+IDOLVaZcbMW99khKEIeI/GdL34jowGxl/QxZw9rRWC3qLRiAyGNYMr2HfxEwl1Yal4hyQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5267.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(83380400001)(6666004)(26005)(38350700002)(186003)(6486002)(5660300002)(316002)(2616005)(38100700002)(44832011)(107886003)(7416002)(2906002)(66556008)(36756003)(66946007)(8936002)(8676002)(4326008)(66476007)(6512007)(52116002)(508600001)(6506007)(86362001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: g3wFk6nI8wzzcMCwvH+I7hzLC/HKFeUCux3dKnRWueq8wFA7ziCcJrCVGLmCzCPM6YM1SQGTHcyWxrVkYuGxrijT23Y/zfRHjtx4b6JuyTxQMPtPAorNJ/p6vEs/5a6Y5SNsVeqGMUIV7FytwYIaoJPpV2X1Lj47AVVGqyvcMYHZZZSdd7+Ew/CHLOX01JQdXcMbArU/y/H6PSAGe4+mTipGHsQsHXjAWcYvzOpdBSZ6AwN/Wz5QALufATx5qRAvJTgMDlZcVuGZqKyobzxCuSlsBvKHFfM3ipd4EvXgDMqr3X3lV3hF0dXCs0SZuHU3+bjSKksTyz0bp7peHnmgnxqb+wWYS/j+tSLjHspj8eSlUQILPnuuh42e4wucLETKwNsIwwxh5BIGbHS/B0/Od0ybVruK8Zd10VRUBjwbLoEd5urKaqE0G0lZmSV8o84oGmBS9R5tJYOHW35ls5+rUN+8MiN6uB1wW6UxMkJNpZvRdtdYwOBw5FsyRZ0CP9O+NCy6fvGi7vHNofZ6BWpng7OTJe6c9Xi+KIvP9QXbiTMsiGANdFKwU3dUPVKjeD+fD7AH6r5MZUwBrdh9pTGm3KzMNgvyP4KbVcuKnWRUO4hp8aESZ6AMCuXIPPrp9aAo2B9NhwuZ1DkLlEoU+jA3FwkQH939FVYnqwdZxwvXj0aQj9q9T87cuEDd6uivrZe1qrIB7DQumBgJS/b6hYlN/fZtsTLhNss7bLlvxQBRCBAuALcwGUxhNRUsRCRKW0FVdnj52cN5koDebH1eijInYU2E1Ykjy2F6PxQ0ZtEygAjRF5fFxCIJEzg/Q6QqqWxBF/pNYWaB3ffPHdF+vzopLhgJPFm3xw7IS8qmvH/O8AUrE17dwO8VvXTvDW5Cmgd3osCtWI9RHuyuJMcmxt5jPchZgx0ITFaPWkyakU/zUBRo37Ub9+Oy3uqzo1vKj6Gt9BlfmwlWnXDfS0SM4Z9JdTBsSHujknPNYr53b9H2/50Da3+1SLNeZ2S9KXfDXd6sJBHQ0Ywy43y//S1tF0txoax0TMiUuWD86gPsJQjQA7IZ9aRt+KcJbyTCi5xeqd60Gl+l0wRTew2jUBwpxV8RsTsQgdt1gcTNCOCybJoM76a1MzCA9TnU+EGsusntpx4z2ov+wgDowWjmoQTnWCR1/YHAJnHQWPPzwiMOe/OkdxVBUL3CILb7EyIERQStZBckUkmYpyRgVmYlPKPM7zvFn46l9eGjYy5q851pSohqjIJKDdRmlaFISUoosVBGGjJ4LHMt33tMmJ7Kk918L1wNgHuWIt3oeTrHvwf1coX1LOuQ+qAE7Sbi314Gc19A5GyMqXUXLsCGTmzhl1frVajSUm7bqicg+vinAFx8unjv2kZy+pTCFa3s5AvSux1/ONwO2LG+7Wz/a/cGhHJERm2oXMsSqPb2CGjmJ4QCmHQXPKbMadz1Srpz8s63BLMDENTojAfuar3vjKiwWZ0ZcURVr6b4NPv7d5LtyoMKLHyFuOV+81H6OVbVtlFTgCcF+3g+tUiEuBvczwZessGgMmkztVIBT6U/57/ss27xq7YnZ+lzJXvIVq5t7rm/Xc6HTBydcC/WHNRIq6+yyB9F6+nd7+tCZ2hqlVYA68BGSg6x5fweLyfqrA5dDYC7XPRoc65wiP+DEjiFi1BmdhL9zY3Z5qxTWYLhZ0FGKB+45Ahbq8AmUwZ/BA7qqIYB433/y9Nz4HgqCnVCn0/PSY8WbjrD7JsuXxT2GjvP1z8MQTtU4nk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: aad1d0cd-11a6-4ed8-8e6a-08da1261b986 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5267.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2022 15:26:56.2733 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kbDFy4jNxnyFrtzRQafp3qA4GS+yDNb/6GU+EAG3ONCag0LctR1pQFEwDOfPEfU43bxJPkSlC+h/6ZSkVjR9Jw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR10MB1322 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10302 signatures=695566 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 adultscore=0 mlxscore=0 phishscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203300074 X-Proofpoint-ORIG-GUID: xg0POY3sZUlBqBchwB2Bi_UbnIUn_yOh X-Proofpoint-GUID: xg0POY3sZUlBqBchwB2Bi_UbnIUn_yOh Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net tests that verify auto-attach works for function entry/return for local functions in program and library functions in a library. Signed-off-by: Alan Maguire --- .../selftests/bpf/prog_tests/uprobe_autoattach.c | 38 ++++++++++++++++ .../selftests/bpf/progs/test_uprobe_autoattach.c | 52 ++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c create mode 100644 tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c diff --git a/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c b/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c new file mode 100644 index 0000000..03b15d6 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2022, Oracle and/or its affiliates. */ + +#include +#include "test_uprobe_autoattach.skel.h" + +/* uprobe attach point */ +static void autoattach_trigger_func(void) +{ + asm volatile (""); +} + +void test_uprobe_autoattach(void) +{ + struct test_uprobe_autoattach *skel; + char *mem; + + skel = test_uprobe_autoattach__open_and_load(); + if (!ASSERT_OK_PTR(skel, "skel_open")) + return; + + if (!ASSERT_OK(test_uprobe_autoattach__attach(skel), "skel_attach")) + goto cleanup; + + /* trigger & validate uprobe & uretprobe */ + autoattach_trigger_func(); + + /* trigger & validate shared library u[ret]probes attached by name */ + mem = malloc(1); + free(mem); + + ASSERT_EQ(skel->bss->uprobe_byname_res, 1, "check_uprobe_byname_res"); + ASSERT_EQ(skel->bss->uretprobe_byname_res, 2, "check_uretprobe_byname_res"); + ASSERT_EQ(skel->bss->uprobe_byname2_res, 3, "check_uprobe_byname2_res"); + ASSERT_EQ(skel->bss->uretprobe_byname2_res, 4, "check_uretprobe_byname2_res"); +cleanup: + test_uprobe_autoattach__destroy(skel); +} diff --git a/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c b/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c new file mode 100644 index 0000000..b442fb5 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2022, Oracle and/or its affiliates. */ + +#include +#include +#include +#include + +int uprobe_byname_res = 0; +int uretprobe_byname_res = 0; +int uprobe_byname2_res = 0; +int uretprobe_byname2_res = 0; + +/* This program cannot auto-attach, but that should not stop other + * programs from attaching. + */ +SEC("uprobe") +int handle_uprobe_noautoattach(struct pt_regs *ctx) +{ + return 0; +} + +SEC("uprobe//proc/self/exe:autoattach_trigger_func") +int handle_uprobe_byname(struct pt_regs *ctx) +{ + uprobe_byname_res = 1; + return 0; +} + +SEC("uretprobe//proc/self/exe:autoattach_trigger_func") +int handle_uretprobe_byname(struct pt_regs *ctx) +{ + uretprobe_byname_res = 2; + return 0; +} + + +SEC("uprobe/libc.so.6:malloc") +int handle_uprobe_byname2(struct pt_regs *ctx) +{ + uprobe_byname2_res = 3; + return 0; +} + +SEC("uretprobe/libc.so.6:free") +int handle_uretprobe_byname2(struct pt_regs *ctx) +{ + uretprobe_byname2_res = 4; + return 0; +} + +char _license[] SEC("license") = "GPL";