From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, T_DKIMWL_WL_HIGH,T_DKIMWL_WL_MED,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FC86C28CF6 for ; Wed, 1 Aug 2018 21:37:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EB13F208AC for ; Wed, 1 Aug 2018 21:37:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="pzzbPTVz"; dkim=pass (1024-bit key) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="RRH5doo3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB13F208AC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=fb.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388754AbeHAXZj (ORCPT ); Wed, 1 Aug 2018 19:25:39 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:46302 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388481AbeHAXZi (ORCPT ); Wed, 1 Aug 2018 19:25:38 -0400 Received: from pps.filterd (m0109332.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w71LYL5D009953; Wed, 1 Aug 2018 14:37:30 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=facebook; bh=hvvgO2+GdmjlDs6eeS84Pg+svLLlAWUss8s2fLdl/IM=; b=pzzbPTVzCc7raVTCLdCZb2HAghLYLfSX6I893/j6GndhCs7WmriVvPlZLPsfJ9ISepr6 5O0g9XGx0sanRDf3Uen0djLggryjUHPp0H8ikTqQt021GHzJjYPbA1L4xRG4kORcCuBx 4UMsK9NhjfpUSLUs6NeWHhl9zjRYVGHDzKg= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2kkm9tr3qg-2 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 01 Aug 2018 14:37:30 -0700 Received: from NAM03-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.23) with Microsoft SMTP Server (TLS) id 14.3.361.1; Wed, 1 Aug 2018 14:37:28 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hvvgO2+GdmjlDs6eeS84Pg+svLLlAWUss8s2fLdl/IM=; b=RRH5doo3I2QABCZwh8EJL0FSD++xmS5DcL8c93bAe9zn3DOVRwxdGK9In8WoahwJv8M7/B/HAeHaJAf5OIoy/K27ssMT0quY9icSGkkN1eUe8YSwjSIbqpiMfB5o1LCFMaVkuOx99mPA2SBq4BlJ3t1ZxNF1Iq+b2hDTggE3dMo= Received: from castle.thefacebook.com (2620:10d:c090:200::6:18d2) by BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.995.19; Wed, 1 Aug 2018 21:37:24 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v5 bpf-next 12/14] selftests/bpf: add verifier cgroup storage tests Date: Wed, 1 Aug 2018 14:36:47 -0700 Message-ID: <20180801213649.30751-13-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180801213649.30751-1-guro@fb.com> References: <20180801213649.30751-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c090:200::6:18d2] X-ClientProxiedBy: MWHPR0201CA0053.namprd02.prod.outlook.com (2603:10b6:301:73::30) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5b8a1c64-e620-480e-1537-08d5f7f6f87f X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989117)(5600074)(711020)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020);SRVR:BY2PR15MB0167; X-Microsoft-Exchange-Diagnostics: 1;BY2PR15MB0167;3:UNMYsgQsevS4ZgUAlz8u+WIIg4xYgDZz+o1qajk+cwwVnQhBl8q0FimYRVKP91uNm61WZQfz7fH/Gb3jo8NYIvUdbUi5cWk3FeXA4JtQ+JHcJ0gaxyDaO8wjTefuZbErS5pLvILi5A+aRHfJwdjO/+Ep06ddN92cUE7LF8LGqNyiFHZ0ehWbrmzmeDePOWhg4OH6GQxS9aoeNy+B0/3p+sOduUQ0B0ZicFnLDuO0RGgXPCBQxsqRRVtrkOoUmG9W;25:qOmXvE8NHJGuIaYTKfPTKjpr5hvDzJ0uvdvadmn+viLKqFBSVnDcTmXdfdQC5fB1ttThf59WSgBuGz+B/fWvrKNu6Bu4s0QTeNJn9keA7rebiR1batY6P642MnzRotVWMcYZiV+gXFF+nvNsHhgBBx7HECmx5aB+VD/INbd6ytzuvgSvss6Es50m/bJkZsK2ur9vkW8hssCUSepfQQIa79rOae+5w5peAuWU2ZOyUoox3Q2ypqbiUfrzvWOjIDA4lGa7qZR3MXlXDVovokLp/oflhlnJhdjDtvElbFPoPp/WBjnUTk2LZVSB6CXmVpfuoT2GuLYqfrQjDqKIkPWwBg==;31:LMuT/lwuLF6UB7qYyWmo23JRuDL0eEjcDwD1BA56HCz6yjQkoKrMdZHm6g6DG0KHT8ocmeJ5ox9QP4mQdIXqn3kCKMCc3ZDx1/QZvRG94XxYdhYTC3prsosSJOEDAaLhA8Wj1mnZYWW6sqRrU9d+hH/uWzNS+Y/oCgTvvGNMJHqZLWTv0XX/RoqDeW62D7JBnujFa9OlXcW3L6SDlX26/KapFwVqEvr4tqYYHjVX0jg= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1;BY2PR15MB0167;20:4wZRjg6T0wPSpfVwWb9o0a9YNLSO2V8RYCOnV93GGydYn5UH7NzCiYSeERczqCNSP7Jf2gZnJZoE/QYTzkXBn8JHKBse/1IvRCX6XdyKr81ksJiBKFSC79SfkpjOeFYSz14DwYGoYtnGznH5I0tBGg2Igquoj076uM9iPIDaW4gUYdC+TibuqwGxH0ID2XYaERNpHednoRb7bEw19nICA8EqJq5ihxrQC3F622t37IzUaZcLULvvbxZ/DVSDWJDra6Wv0hjgKsQz8KNubPB/kgMkpe3H6uvSJvM0gMz5wwTbQ596BlgeAcerVfpRRz7ZtAGYtn4Aq3+qyvq63DD+biKWrZoaBruUuNl76PQeNvM9JkArmpRa6ElFWdLKlFZQHeB3/TxXaXW5k78HSdEUku+cBY2bZcUvOYunzBx6t4bU+1ahwt9sQdjTxF13M1U6w6qUY4X9XGpaXH1lLvqWfEZBy7w2Oh7MsbcDWAHqWFhSaRJcTmM3MzWRo3Z9sitQ;4:Xbj+U9WPITlziWbzsEjd1Tfr12DicyzTUn0qgdQfPN3AMQe6bTDJEoF6uGiByIJPPMRNPFCJh16KSKLXKE6RcKydzXcS2FV/iX1QpNmoB0EPbcMORn8rESPoCiM1QnecpxiXq/EGCxZ176slJjPraVVJnRLovMv05jjvYkxCcbQvYqxSKDMDlzEwV0BDy12pykNgNI17AWv3cCMdlBgGpObfg5T84LEf4PhLJcHYqDw8iNnoH5YlI2N9BpAvMYT+aYDFB0Ga8OKrLBNwYf77oexlH4QWBSuPzYm/TGRqya+qeo+J2IuyXDboLIPRUbw4 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(67672495146484); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231311)(11241501184)(944501410)(52105095)(3002001)(10201501046)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(6072148)(201708071742011)(7699016);SRVR:BY2PR15MB0167;BCL:0;PCL:0;RULEID:;SRVR:BY2PR15MB0167; X-Forefront-PRVS: 0751474A44 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(39860400002)(366004)(376002)(346002)(136003)(396003)(189003)(199004)(25786009)(52116002)(54906003)(36756003)(16586007)(50226002)(68736007)(53936002)(316002)(51416003)(76176011)(6512007)(6486002)(52396003)(50466002)(5660300001)(6506007)(386003)(4326008)(478600001)(186003)(6916009)(1076002)(8676002)(305945005)(476003)(6116002)(11346002)(486006)(2351001)(6666003)(7736002)(2361001)(97736004)(8936002)(48376002)(446003)(2906002)(16526019)(53416004)(86362001)(47776003)(46003)(69596002)(14444005)(106356001)(105586002)(81166006)(2616005)(81156014)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:BY2PR15MB0167;H:castle.thefacebook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR15MB0167;23:PIZpUuD3wwg9K7fJ08rfrhh9dH7gcLmGIMmKqQU3n?= =?us-ascii?Q?vrPGa/PNkwS4cm6tmM+KWkiCCT0q7toAIQmMFjGXRoX4RuRX6qlj8WEzYyy1?= =?us-ascii?Q?LtMM5uhdm70GCUclX3hwUm0RLeCqyuW2Z5STOxPYAl+9iLQsGkwm5tjuH9gB?= =?us-ascii?Q?HyJlJePs/V4o7CyJi0THMeAW+9cgeD1ZF0DGKZhGka4LAhMU4OrJpSNsYISz?= =?us-ascii?Q?22CC4kT5H+5dkv/iamnpSDdXCfo0DGp7YHGXtovF7CJvArDhNFHtqN7bVSie?= =?us-ascii?Q?hfEIybKWd5Q07XcDWHC060DoFktjQ1Gi3nhKqgzeuPCbfJUwk6aVxx3vaUZu?= =?us-ascii?Q?mpy2LexUJBmX4QPmVXim+tulbn3cZEJGMXqpMFd9w7Ha8AiE4LuPgk8FLSA7?= =?us-ascii?Q?179NfHB6LGyVYxZWam7njMxtD6pe3T8l7x8jh1rUK2EaVDv+m0qChlt6ihmm?= =?us-ascii?Q?ACrBk3t3Qa5dRELpIYkiUCC20WWr+4eMtIlIgui+PZk3IChhbAemT5OnY6Tp?= =?us-ascii?Q?mL3flZmvNdPsAiFgzP3s2qD1sjnu8ArjunAX6irObFhxNMxfO/pvyU17Uqrv?= =?us-ascii?Q?boe9U1cumKR9VkwCMKQU/AqYJmYF+7XSIxkXJlH5R3rAsRW7nrkKog0cww2l?= =?us-ascii?Q?hGhnDcfm7svoP6M/0QAyoTN/QgiOsD0yyN966vioxvAoFLIDSqoRHZRzvYSn?= =?us-ascii?Q?uAlhn13jz9w6b6fKs5PqSW98hjMJiMxxua54SbO53qWCRn+wSvCCLRYMDPXN?= =?us-ascii?Q?yVOQb5qKuqWaZIZmYBJfbaB3CP26Ct+HLBtst+w41pbBI+7OwX/4Yw3kh87/?= =?us-ascii?Q?tGALSIdXzO6Xd0sxLcUGzyIMyXAwEaruy/R3oOaogo18x2tq/sA8m/wLaI7A?= =?us-ascii?Q?fdqUnnIc+vuPcO5Qa8JU2iXyUYKyARXoycnC5+TVllbjh6v6YofckTK0SFs6?= =?us-ascii?Q?AHocG6vuxhcovJ/Gkl9dV8MyHnpKJyyog9NPGipImtaP+b8bdDqPZ61v5cKU?= =?us-ascii?Q?rLqoj79XtWLu6TubdMvyr/FOg3i7mUIt/saVsk8yKhuY0zt7tHh+gqncvwl0?= =?us-ascii?Q?s5Mgp+C2D5Hj/P17dcre4sm0gFFpiYUq1Oz1mo8OHysD6JrhBH0yFeDUqOd3?= =?us-ascii?Q?KepnyfQfjepED1wzbHZ8J1whFOwuaEvCKv6U8QlLDGak/0KBE2UOAYDIKVKW?= =?us-ascii?Q?8h8o2xFXBdjrR8zR3MfdVavM5AVW0jaCUVIfDNIQoGIyQWWYEGF5c6VHM0pg?= =?us-ascii?Q?yXpY+hYCTGYToMFPss6mtc/3i109Fy/o9PveJF6yi2Ly05f/GON5MI7obBd9?= =?us-ascii?B?dz09?= X-Microsoft-Antispam-Message-Info: ptpuYeDJ+C3pfyVI9jzkw9FLhwccPsfsittrfmhW+QixertJi9j3qm0hjmGxEQt1sriKOea9puw2JKeAGXzvPCaUKsMliZJ8r0SyYxhVB79nZWLc+V2oBkiNiapXd/gG6QQV2zp8705bZJ9ZIHaDlPJAPaMWOHspM7yIl+kWk4z1qTYpsdnROZTzfMk8vIC9cDRj9lV3y9QVRKL90LzhWpMz42G1unA1bkh2vNpvfpeCecz1GmTvgFlwYw44uS2T/nT7+Xt64a9JHMjt8Rr0AMWsoWrGCRMwpQKqiOPtDZKdOnGB+2rVe/cxIo4gNiFH+oEBoz1Qwwti5Favpeb+qfGoWKSv5Nz+wJ3Uev+BpL8= X-Microsoft-Exchange-Diagnostics: 1;BY2PR15MB0167;6:GlDQknpsl3Hrw3SIb/pfNdfbkfUZhrJsVXojLoCv8bgtgEUyXroJVY8uynCWQe+VFsOWb2UwnXvo8yKPSxDUXe+WAZtLEz0KV0d/DP6N88++kqibsVpx4L6AfEwjfi5BqCAQ5upTAO4VQf7EPB97oEAh7IOXW2tgEqFKNI70rz2GNDd5H5kD6jTmg7w/QIwpZ8FT8MkE5ZYR5RXM/heQ3NYSzfj7niF/IGxaj2qsW/BtYUAaggAVqGPBWlwrjFkJUr0Qgqntk1VYfZhO7WTFpVybUkt81Lj5fEbEJcDloCVlArs4V0YN4b1CZAOKYZoPbW+foTgJQ2+JkpaehR1ZXFh12Tm7wbZnDPsxtAfZyiawBOuN8JxeN2fr6XpPyxpjgoXIzNB4xEZjnBUVD9FgqzdmWgDKPp10XaJfbzjd5eK+aQ589NPdx2x9Six1KKFGmVo/2YoCFbf6Pq7r85LPHw==;5:bioKg6OP+IxQMaqI8YVxbsyy4px/9D5Ta43zaoC57WAJneNeG3iYsokD8/rm8HsKDWCZkBhtl9eq+nw81pWMu5w9pa4TE5S1q/bI0fJGU2SsPRuDx3BnVLWU7i8u3/n3y9hf88FSJg4BTtd0NsJqxTeZG14wyS8vpLD1DHCGVG4=;7:JF/uMns61oBn895o931e4rdD9vVEO3Gpq4VNIXPIS42tjYEeHqm9PoIsDMpetW3Ae1O+WbIXwX1/LVh1ghjaWbb2OLm0VtRZKXx8dvX3nWBcCgfmuIkSWGmPin+c0lWed6usHEH/MYq6HUQwEdFrtok3TJ5DTVaVRn3Yy7J3tC5hLduk9v7S4Fcqu59QP97iuqstxMfmOOVxNEoJ9eaR3NodzJfUkkzAG/IbTRS+EpRTzs4ZFwLh/uQrqmsC8Pj9 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY2PR15MB0167;20:jHMy/LXF9B8AQbvEKSzYCfNC4vHkB//5a/qaJIjiu5fwVy8nKPCxs9NpmTPXwlN+GQeEBajn3bnD6S0Le1FCKWcuwo2TbWY94ondU2dr1rYce7ZyHDGX3MPPdrE5JsN6ov4xrhXP6IJaEge82FSGkVFTKHruGb4QDp3cmKFKMOU= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2018 21:37:24.0682 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5b8a1c64-e620-480e-1537-08d5f7f6f87f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR15MB0167 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-08-01_08:,, signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add the following verifier tests to cover the cgroup storage functionality: 1) valid access to the cgroup storage 2) invalid access: use regular hashmap instead of cgroup storage map 3) invalid access: use invalid map fd 4) invalid access: try access memory after the cgroup storage 5) invalid access: try access memory before the cgroup storage 6) invalid access: call get_local_storage() with non-zero flags For tests 2)-6) check returned error strings. Expected output: $ ./test_verifier #0/u add+sub+mul OK #0/p add+sub+mul OK #1/u DIV32 by 0, zero check 1 OK ... #280/p valid cgroup storage access OK #281/p invalid cgroup storage access 1 OK #282/p invalid cgroup storage access 2 OK #283/p invalid per-cgroup storage access 3 OK #284/p invalid cgroup storage access 4 OK #285/p invalid cgroup storage access 5 OK ... #649/p pass modified ctx pointer to helper, 2 OK #650/p pass modified ctx pointer to helper, 3 OK Summary: 901 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- tools/testing/selftests/bpf/bpf_helpers.h | 2 + tools/testing/selftests/bpf/test_verifier.c | 140 +++++++++++++++++++++++++++- 2 files changed, 141 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/bpf_helpers.h b/tools/testing/selftests/bpf/bpf_helpers.h index 19a424483f6e..cb9fcfbc9307 100644 --- a/tools/testing/selftests/bpf/bpf_helpers.h +++ b/tools/testing/selftests/bpf/bpf_helpers.h @@ -135,6 +135,8 @@ static int (*bpf_rc_keydown)(void *ctx, unsigned int protocol, (void *) BPF_FUNC_rc_keydown; static unsigned long long (*bpf_get_current_cgroup_id)(void) = (void *) BPF_FUNC_get_current_cgroup_id; +static void *(*bpf_get_local_storage)(void *map, unsigned long long flags) = + (void *) BPF_FUNC_get_local_storage; /* llvm builtin functions that eBPF C program may use to * emit BPF_LD_ABS and BPF_LD_IND instructions diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index c582afba9d1f..4b5e03c25204 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -50,7 +50,7 @@ #define MAX_INSNS BPF_MAXINSNS #define MAX_FIXUPS 8 -#define MAX_NR_MAPS 7 +#define MAX_NR_MAPS 8 #define POINTER_VALUE 0xcafe4all #define TEST_DATA_LEN 64 @@ -70,6 +70,7 @@ struct bpf_test { int fixup_prog1[MAX_FIXUPS]; int fixup_prog2[MAX_FIXUPS]; int fixup_map_in_map[MAX_FIXUPS]; + int fixup_cgroup_storage[MAX_FIXUPS]; const char *errstr; const char *errstr_unpriv; uint32_t retval; @@ -4630,6 +4631,121 @@ static struct bpf_test tests[] = { .result = REJECT, .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, }, + { + "valid cgroup storage access", + .insns = { + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + .fixup_cgroup_storage = { 1 }, + .result = ACCEPT, + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, + { + "invalid cgroup storage access 1", + .insns = { + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + .fixup_map1 = { 1 }, + .result = REJECT, + .errstr = "cannot pass map_type 1 into func bpf_get_local_storage", + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, + { + "invalid cgroup storage access 2", + .insns = { + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_LD_MAP_FD(BPF_REG_1, 1), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + .result = REJECT, + .errstr = "fd 1 is not pointing to valid bpf_map", + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, + { + "invalid per-cgroup storage access 3", + .insns = { + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 256), + BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 1), + BPF_MOV64_IMM(BPF_REG_0, 0), + BPF_EXIT_INSN(), + }, + .fixup_cgroup_storage = { 1 }, + .result = REJECT, + .errstr = "invalid access to map value, value_size=64 off=256 size=4", + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, + { + "invalid cgroup storage access 4", + .insns = { + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, -2), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 1), + BPF_EXIT_INSN(), + }, + .fixup_cgroup_storage = { 1 }, + .result = REJECT, + .errstr = "invalid access to map value, value_size=64 off=-2 size=4", + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, + { + "invalid cgroup storage access 5", + .insns = { + BPF_MOV64_IMM(BPF_REG_2, 7), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + .fixup_cgroup_storage = { 1 }, + .result = REJECT, + .errstr = "get_local_storage() doesn't support non-zero flags", + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, + { + "invalid cgroup storage access 6", + .insns = { + BPF_MOV64_REG(BPF_REG_2, BPF_REG_1), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1), + BPF_EXIT_INSN(), + }, + .fixup_cgroup_storage = { 1 }, + .result = REJECT, + .errstr = "get_local_storage() doesn't support non-zero flags", + .prog_type = BPF_PROG_TYPE_CGROUP_SKB, + }, { "multiple registers share map_lookup_elem result", .insns = { @@ -12462,6 +12578,19 @@ static int create_map_in_map(void) return outer_map_fd; } +static int create_cgroup_storage(void) +{ + int fd; + + fd = bpf_create_map(BPF_MAP_TYPE_CGROUP_STORAGE, + sizeof(struct bpf_cgroup_storage_key), + TEST_DATA_LEN, 0, 0); + if (fd < 0) + printf("Failed to create array '%s'!\n", strerror(errno)); + + return fd; +} + static char bpf_vlog[UINT_MAX >> 8]; static void do_test_fixup(struct bpf_test *test, struct bpf_insn *prog, @@ -12474,6 +12603,7 @@ static void do_test_fixup(struct bpf_test *test, struct bpf_insn *prog, int *fixup_prog1 = test->fixup_prog1; int *fixup_prog2 = test->fixup_prog2; int *fixup_map_in_map = test->fixup_map_in_map; + int *fixup_cgroup_storage = test->fixup_cgroup_storage; if (test->fill_helper) test->fill_helper(test); @@ -12541,6 +12671,14 @@ static void do_test_fixup(struct bpf_test *test, struct bpf_insn *prog, fixup_map_in_map++; } while (*fixup_map_in_map); } + + if (*fixup_cgroup_storage) { + map_fds[7] = create_cgroup_storage(); + do { + prog[*fixup_cgroup_storage].imm = map_fds[7]; + fixup_cgroup_storage++; + } while (*fixup_cgroup_storage); + } } static void do_test_single(struct bpf_test *test, bool unpriv, -- 2.14.4