From patchwork Thu Aug 2 21:27:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952972 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="bHRzuTpT"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="eo+l3ywR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbt0PHyz9s0R for ; Fri, 3 Aug 2018 07:29:30 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731146AbeHBXVP (ORCPT ); Thu, 2 Aug 2018 19:21:15 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59102 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727260AbeHBXVP (ORCPT ); Thu, 2 Aug 2018 19:21:15 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUY012185; Thu, 2 Aug 2018 14:28:04 -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=SS3hL9y/Kz8AKahUGvBHEw2nIAlhiKXXnDeKs9koJN0=; b=bHRzuTpTn4aPV3eE6FNIFTBu8+YPprg5vLk8Vgt3V5LS2mTpAPTjhxbt1fvpzf+vtlc/ UuGPFVOFsIexnrpvg0nVvdhSJOJLWir+mbeJQos4sf6OUhOTAg0/+KInsA6BLx8frLZL w04xm9lERWaMoX+qABY5FxYo/TEv9C9gMQE= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:04 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:02 -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=SS3hL9y/Kz8AKahUGvBHEw2nIAlhiKXXnDeKs9koJN0=; b=eo+l3ywRi+JusC4W9RWXxq0yUmFO58CuRS2pU5Gk7SUUytYrzFFgjcj4IsloPVyyZasULjFAKl2TYkXiogB8NHQ3sIcgwpQvazBsjQV5V3IA2BCur29U6Kfz0p7KUKTpVaiOeUHQ+cFu0fywkx52zgLj3LxUuC3x5DsgjK5HtZ0= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:27:52 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 01/14] bpf: add ability to charge bpf maps memory dynamically Date: Thu, 2 Aug 2018 14:27:17 -0700 Message-ID: <20180802212730.18579-2-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f0952631-e815-4d9d-e66e-08d5f8bece89 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:8pwBfkHZIsemPN9xdHMS5zPb0I9Fh9R8uh4vsI5LsfXAYwd4Cj0aFE0KWJFC0tHRn31TPLFfa3ru9qhikTp/bMFO5Z89OGtgVoLBfTrCwHE2n+p1BR06Q7yW93nMEvB9tRBjQPJH5HhjsNtrTircSzwYliIURkb5ZIURlBVlwYMXuv6yxf+MEla/WSdBAUrjA+Z1dETYiRpW7h7WmTjUiLzZZ1Wc/KyV9UBdrGwrMJOIEH/XLFYIw921CrfsSLk6; 25:hAUC+KAL/gNB/YJ/fWx0FymD8iq+Y5qP72M/vla0NiIMjRhrhTUcpGk8n9Da3V2jFIJn8qsUMe7Fb3QEvLFX10xgppo6NX0AlY8uMFxSP8fvsBT9su2RBn2Pf6WJwOUqCG7ZrAz1Jx0FHFXcUOXb4eXy/IHBotwfARCFf3xHmYl4sXPHKlb7nCe5TwwO1ujrgWbtDQO24IlbWsldOnbsNVsCCBXvwsGqYzxMtHCJ+21VwdeeC7DeG7ZgMzQHyMGR8Odr8MwKNRBT5eYSXfDfeH8pJ1E2N58RFyewOKvG6jf1635rfRNRRCs/04x/5xsSh0uBSmXVabQC5j46FOu1gg==; 31:IBcKl6is1hTWzDUqmE+JNlRTY/UT6DLtEMH4UwFjy/Iwsd46JLuG5F8kZTkHN1E5q1UxzU8T9zTyyPCF9KmzsZXZmnJmvL0OLxG3Ve1O/N806pZrhPrX5993PLgv4NPd0g5aplxXW1X9s7gIahuLdzU0vuzdU2mjGPADHz/hye3eHH7QhVDL19fUsnuTcClp6wKYytV9PKlYm1+VszHZltHVM3JoA+KPumwOypfolIc= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:VscEg4bQA4TNOQAhw/4nJl3mimUkHGAHib5mIOtW9/NyWHgOQaKGUDk9EFqMFOKfTiaDDT9sMijXC3Z2jKCQRfVbH8TBqshB/nAw7rI0T6vqtyI6VrnyCHW8lERRhT125XB0TgH3nNGMAC7rqVVLJW4fMh+PgzF6Jg8jLniRBqS6zz0hMz+/uqL7vqxFkBwIb7pJ2DdOSs8DhwkIgxypb2fDpiaA6pV7YpzioxEhd7v+4rGSeVBcmSr3dyRuxrDN0BTGItLYtW9Lm19/fchmYsn3Qgjn9xzcny7U+YCDKRopRrN0fCpT9vTAYGnFKaNiEL1pA/JE/G5PoIkw9U08cpv6EfOclGP8JvejWZAgrfynNYMWkC0uVu3pivaxpb97TXDEVcm59Ijy562lHJ8t3gYAK5VQWB6Ood+2Z15AoafP5ToRO1oTdJJBGeyKBhj3Fay+ZInqMB9AYnrZ7JHBMOBPVG8JH7cL9wbZZYfez1E0G7HMJOGVYulxOCenukGS; 4:RM0qvgVG8aCSvfT65YHhldOTDNXWfIN/5ptprSYmzg2Q2/NVDEWrI70KTYdRiWEHjPk8mc4bUtWdw0HVHg2RAD82pp8hMuVisoLp+N/fXWswCwXzdcdwDZCDuq5AtsF4dDUiomAIRka9OKVLbbSpN9IQvWJZPErCQVIaha36P4rtQgawbgMqeTKvOsjCgf1nKaOWwXMecFt0WCiyC6wP8lyoLnFTALTZeNjyy3Kn9gokj27Kq3jgNm7E2IxeqPr5U8z57jwYg2sc9kFX3TaNd2Q8rtiOmB/wzBc9gxY7Cztw8hJt/u13MweA6AmwF5ucw2h3UJxRY9A9onxVwYJdH9uu+855ocLzLkPA1NUZ76s= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192374486261705)(67672495146484); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(575784001)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:Ce3ZiYJFtSb+zwBfVrF4RPyXNXQGqQA0nFmcYarZyChbJ+3yHT+V9lzN1/OYLrBkENUu0Fp2IObC/LuV5wNw2iJo3ecGQlCC8kEYuXGXnnO8Nyxhhl9HMyebEXfClMxf7FSHKiGWRfjLuxHHWwj4TcP8clyFwIT4znCYOe0Lm8z+DNh5He8WI5hnyoq5VU/4CzT+hijRdeMWMfiZJD1GHlDGOCwue9/y1ZQJWxK47iiMFDG8SID0i1ThoKHZCRhoW1j07m/+mmNpupN+T3fFAsfw9/9HTdQlH9irFXhim9d7mWryb/SeBNwn3hvSkTeOOJ9SlSDtM3u3mT+Tis8Si+NT8rhNT3Psk7OhrTOKiuaHpL0BosDB1mg9f+6r0xxFjQBq6Pf1quAZ2vVLE4J0bCdHbqglbvA0RND1UNb69+nJGcVUeVEe0I6cK9O+e/gyp9IaK44XPVJ83UkkH6UFhLuvEFl4ULJOrWU4qj8xetAtIPNHPg+khn7iGDdK6zqhSrazrbZpUdjk5acu4Iy7DTPxfDGRSgNdQh3y3AqLUP/820vG0Zan1pwyhack9cD937+gPvzhUBJGYZwVU2XH9xryHLYBaRKLhpGN2KwWZp3zc4Tg2/bHb0lc5kZdcVOYV2Cy5G+0muGhx53REjqZA+H0XNZrjGmEZRPKwPddLU7Hbh97swGTxwBo17OAfu/MGeYcKyX6W0cbKD3zh7LrX0LjprD31muOiT2+kv/7Ck+hs+waiCSXhSA+S3SfRk/lT3bJwiGGg+7Bt+BLZf+oYi2ey6KyoB+PS+sXwlCRZexcJ0Lj2df2Ix5Ak2sgEn3AwmClDroDG5CBT9G873LvAD4US++uxHRVEl65M0e8HmWPSlou2KCvOKQ0zd4YHmlhyfELtU49qu4FhHcjuMrmyuSZrkguRohMessCVwPQCcMAZu0UOe2VIIqP8GzBygxEh8MoJ6e5/fKWudCXwNqoqt1WtBg6BaGWL8ynWBM9ZqUYQFBaSeAZfzyeB2ulPIz0gpEW11PnKbPt1/fVADpcXVrNcEfuUmIfpK9HnsFtIyEQeA4H67J6ljG+Zq+KuCO4RWthUqcFx5dGivgT7Ap8xfPAUY+uqSzIrIJCh+tGV0TXv1z1t8lrBLOYb2g0V3cZF4juNLrkqYvjmsvPnOb8dAog6sf2BVvglPH2BBogXxUJiv1SfKiDrOvY+ujoWyvCxnN7LEo9VDya9EtyG63Y5gYycEFgGFwjXr4+ymogk/aw5Ja8dT+ZWN86Mg+S31j85EC9Lqu2FCGUaAfbIPVXMnJR7N7lpvfAy5gJZN2Z2ls= X-Microsoft-Antispam-Message-Info: glh1xPJsBF3jMCPHGMYdAPx7L8EOLAazmo4IaPpG60hL6ns+maqIi7OS91buSNY4s/KTPZZWURCbpyUjeiJWZ2AZ1ShQqMfyUkXmCM9pPt8i5kY/t2nhmVRX3R6X1yp28QIliDQLCj//8t9qzJHsvu0roGeKhSDzfVdb9RPMA+nntjCV2IyT8R2uSYnRDTvWkxStqDXan77+lMI5NiaXyDiBfSQFnRoOtqxAM/4aSiWPov7ayvASC+6zdOvSLqNmmXNP4Yo5cMREfHsa6X6vWk/51vt/PLS/bmZdl0D/Dxz5I9h2bRGPLRDabI8ENZwiufMm/0v7v4/jiCw79bA4llcmKFcSsfBBD9HeMmiN0Ys= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:9QSVrLy66oiAuKmgz8xyeUz5IpBd2q+3887MaBkQr9JZud28e0I9WFApsbzLvOdKFMXyMuwY556k6uFORXqV4fiLUN8vn9KyhWApcR4NJz+fTwTjYRffC6C1GL7O7KGdGiC60YamLN+LDG6aFZ5ezJp6HNvytqSJ28NPk8tuo4Zio8I7515aZm0vCVnZXueSM6AqFhX1rLoTwmgfFeBraKm3vE7zKwWr7s3Q5MRus+pFMGWThfgJT7LHaB3QD+gG5yK3OQqnJxlTz7X3jM8MDfYaZOxNd3gACkFMDZDswnFDUoywNFFfAFzYL8G6ERbdT+7o1yURxAcPqgbG1PelguTlh3oasLwdjT9sfSIzWj2CX/d5E+lJXwGHdRTkJ4ATQrWH0bgh31fpLYnB8i0eSM6aoquQT8gDjicXdZEOQ1WvStytS4Fn96TH0sn5iosjDQ0LYIflwmPPpIvwWWtbnw==; 5:ADfJIbhkhC7rTPBqYl5VWwTK5sKR1kHrgdMnBNxMMb1NTpRWnrFF3kfPZ0rJJa8Z2if75WYW/WNsL9vEi0Rr7+Xk/9Ez7V+aNUe6PILF+0rL5ouyDSd8VfUsyT5HcBh1FhD9s4dUbmERiIGwENcr6MOBIHuMmTiLSu2hGCsRhMo=; 7:mP3VVBSVradYM7j3mIKQFaUF9B40Ws2yvvgFyhXQNjERF86lzCEcqL70iqX1nlLkKVNMmmi9d5QcHB6G7TLzwsBIABmVjjOBr2j0iLaApvWtD1luOijvAbkWlw5YYcDWBNKJAN31qTol8cCAW4v6XHnFU8CTSNvpqCiM845N71hua3CqFz1YVYX4UkFEv39OyRA2pQ+f3N+t9fVMTsD7g7bnSLaMUzH3n52bzHfOaKMENbV45IqqT+unp6xUq4qJ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:YBGk1jMScvgOvbXUdbGhaTJpA0vBfLE52K0SBmDN/2F5Rx83diaU4PRu6mGOk7ySoJgNIr8quKwJY/ILJwcSNUBZm0S3JerCX5J6SQShlbeVrCXwC1uydSXq5+ZFvfN//qOLIh1MmZCEOo2iOd4lslUa8Dh4LL6QcTwCv1z6VnE= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:27:52.8695 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f0952631-e815-4d9d-e66e-08d5f8bece89 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This commits extends existing bpf maps memory charging API to support dynamic charging/uncharging. This is required to account memory used by maps, if all entries are created dynamically after the map initialization. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- include/linux/bpf.h | 2 ++ kernel/bpf/syscall.c | 58 ++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 5b5ad95cf339..5a4a256473c3 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -435,6 +435,8 @@ struct bpf_map * __must_check bpf_map_inc(struct bpf_map *map, bool uref); void bpf_map_put_with_uref(struct bpf_map *map); void bpf_map_put(struct bpf_map *map); int bpf_map_precharge_memlock(u32 pages); +int bpf_map_charge_memlock(struct bpf_map *map, u32 pages); +void bpf_map_uncharge_memlock(struct bpf_map *map, u32 pages); void *bpf_map_area_alloc(size_t size, int numa_node); void bpf_map_area_free(void *base); void bpf_map_init_from_attr(struct bpf_map *map, union bpf_attr *attr); diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index a31a1ba0f8ea..7958252a4d29 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -181,32 +181,60 @@ int bpf_map_precharge_memlock(u32 pages) return 0; } -static int bpf_map_charge_memlock(struct bpf_map *map) +static int bpf_charge_memlock(struct user_struct *user, u32 pages) { - struct user_struct *user = get_current_user(); - unsigned long memlock_limit; + unsigned long memlock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; - memlock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; + if (atomic_long_add_return(pages, &user->locked_vm) > memlock_limit) { + atomic_long_sub(pages, &user->locked_vm); + return -EPERM; + } + return 0; +} - atomic_long_add(map->pages, &user->locked_vm); +static void bpf_uncharge_memlock(struct user_struct *user, u32 pages) +{ + atomic_long_sub(pages, &user->locked_vm); +} + +static int bpf_map_init_memlock(struct bpf_map *map) +{ + struct user_struct *user = get_current_user(); + int ret; - if (atomic_long_read(&user->locked_vm) > memlock_limit) { - atomic_long_sub(map->pages, &user->locked_vm); + ret = bpf_charge_memlock(user, map->pages); + if (ret) { free_uid(user); - return -EPERM; + return ret; } map->user = user; - return 0; + return ret; } -static void bpf_map_uncharge_memlock(struct bpf_map *map) +static void bpf_map_release_memlock(struct bpf_map *map) { struct user_struct *user = map->user; - - atomic_long_sub(map->pages, &user->locked_vm); + bpf_uncharge_memlock(user, map->pages); free_uid(user); } +int bpf_map_charge_memlock(struct bpf_map *map, u32 pages) +{ + int ret; + + ret = bpf_charge_memlock(map->user, pages); + if (ret) + return ret; + map->pages += pages; + return ret; +} + +void bpf_map_uncharge_memlock(struct bpf_map *map, u32 pages) +{ + bpf_uncharge_memlock(map->user, pages); + map->pages -= pages; +} + static int bpf_map_alloc_id(struct bpf_map *map) { int id; @@ -256,7 +284,7 @@ static void bpf_map_free_deferred(struct work_struct *work) { struct bpf_map *map = container_of(work, struct bpf_map, work); - bpf_map_uncharge_memlock(map); + bpf_map_release_memlock(map); security_bpf_map_free(map); /* implementation dependent freeing */ map->ops->map_free(map); @@ -492,7 +520,7 @@ static int map_create(union bpf_attr *attr) if (err) goto free_map_nouncharge; - err = bpf_map_charge_memlock(map); + err = bpf_map_init_memlock(map); if (err) goto free_map_sec; @@ -515,7 +543,7 @@ static int map_create(union bpf_attr *attr) return err; free_map: - bpf_map_uncharge_memlock(map); + bpf_map_release_memlock(map); free_map_sec: security_bpf_map_free(map); free_map_nouncharge: From patchwork Thu Aug 2 21:27:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952970 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="itCAWAc7"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="bnAnW+Ru"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbj23lJz9s4V for ; Fri, 3 Aug 2018 07:29:21 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732374AbeHBXWN (ORCPT ); Thu, 2 Aug 2018 19:22:13 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59144 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727260AbeHBXVY (ORCPT ); Thu, 2 Aug 2018 19:21:24 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUZ012185; Thu, 2 Aug 2018 14:28:05 -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=xDVNSCZsAkPVeZmd9Qg8VSg2K4ImaXA2OktwX6VKhCE=; b=itCAWAc71equ3T1q5DFeSAe1kAPEwtlFRlg/evndUztSimqU+HoMVfvUA2mheiD550/A 3f/YeXX9DejWRqlPyf9VnwyuUe11eYS1idTJUNoJCPGTbzpJUz6lBuMPzDT4Ob41OWaV 8fhWOzy3/UCsnDipIyAb4rfPWXJtY0Ki8/4= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-2 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:05 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:03 -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=xDVNSCZsAkPVeZmd9Qg8VSg2K4ImaXA2OktwX6VKhCE=; b=bnAnW+Ru7cPZSy3bbS5CwLwSAnRmLZFGeVToOUiPEQB6bHkKEpKLFx/cmcDa6Epyll26v/4Iehpb3Y7osmqKMzIRY6cBU0xI2qyZLblIfLQDrNEejuwLvylNzbeJBhallUXJM3rhscuIjaBgFJHgt2hQGz8yaqVAJwg3/eKxOaw= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:27:54 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 02/14] bpf: introduce cgroup storage maps Date: Thu, 2 Aug 2018 14:27:18 -0700 Message-ID: <20180802212730.18579-3-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 03f7840e-33e9-473e-5bc7-08d5f8becf5c 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:NxeGGlAMJ66IumHeEIvxbr78F1aFUmE63q+nFok+d25t5fCnjbmZfpOnJU1BYAKIz8QzouLGtBb11wq98ycUx4bDCYcF7TLrVwo/rRzl2hFJE052KJzbeAlkZ53PdOktQJIYnuXzn0175MGSCCjrYgjGdF6JKL5yh968SAw2VdMMRQr7EHLqZTXZIVfT7nwM25UZ1Lne1tEjvVpOFDH9mGYIzS9UQ2i+O3GYv9bu8DQVGHFP4+LALRSDJ+UT25sr; 25:fUuammQTH8mUQ2+MBo4PT9tqyCgI67mv46m6xUahphn9LMzBe6fbMW3Up2z6APOTfT5GE6PYe3m06lX8c2fPVSGTnYPNUj/buj3hXjHFktYA+5RerD4c2+3++t5JsYl5sm6czsZUygA0zoTvuJyJCvqsedfG30TbTSXQGE242i82Ypg8MWRXD75Z9ZSWC1+NKj4cks7P2kSc+0N0jaZR72ZQY6FcIMOVyY4s443WMGnsZAOAeuEfhRKeYMbg0I7sR1A2/MUyLtLEsiCSxm2KhZIOoM0866r6hTYulZM6LjSLhtIaRR+CcgWW84fCPBWTg4DIuZgqIcfa6M+B+KcXaA==; 31:aSEr9Tq1/ob0EfZ8fQIJNZ2GAiFBj0aTquHv7gdrT8tiArYBu9t8S+GZ6oBt5iWzN7PQLjRSy2DvB+KvtTcMztddNvbp1fllqZ0nsfYDs+Ymt0+IOxtS3zTuFHHXQzT9VKkF17zepkRU23xEnAM1UzLFnzcNhN0Yv7ZKECWPs1tTmssDpX8HRBS/dDy89xsT0ugNcxuUhCxHkAKadRTbW5Z84J7Kwvrut6hpRF1pLZ4= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:gRNPnJK7p9OQvH3oBNuzwzKoPgYv/jmWJmhG0Ns84fod60PLvVn+wnSKGIwH3HgKXx/Ohori9JHoCI7sRpn9uWRtrB/RrRhyu+T3MD0Gzck7p9MGHeQYiOUJ5V0sWxgghD6KBUJJE5XFSoZSU9BL7Xok3v+Z47C2SImMeUCj8WJQmwtzY7yiTouCsmDGHyUanjNDs5vfcilZTDC1gSrjg8/GSOFvqUi3sQeYgHKxj42XQWmOr6s7Ntl46D2gOpUPLuDi5DfX+OZX7tXz9viaWZg2gyi42aMTROMzswfYNz58HSpscUOH4mOAILnGpjTp+iUzGhaMzPNE2A9AHFo6F8Dpt9gGvWzT/WveiSTQxlhvn2SjBmH9ACMEpRdN++QhB2OrWm8bBWEis3/c9NyphvYByI9OBCtjPQR5CqrPgCv9figZDt22sfrEUJMtqjE0VhS1oOcH9ve87OrDf/IyVA0p9WeDwIv+m43OC3P1YfjWf/Oqh4c5kZQzWjNIyr8d; 4:EJcxB3oxj0m5T6i9MFwhqCTCXgkrfxgJgVC2X19HvYo1BfEICSI73lJM6FV6ouE4pkaAUI9nHb6s/zIBBnbEDtGCt3eg3kIw8gNBGXS1gqH+6I8WGOX4Zm2UkvB65QMwgJpcBk/KCzc4xIY/2W4zyMPbE0p5dDkfr3qwBr6ev9b0HSMdx6ESaMJvzrP7dNzUGnT9eSYOCZ22YpoamBxvPl2qesrHr/Q+VVxquuWXtJQJyPqNj2+YbdMb/BTe4VvVMqJh2f0EZ8OboDIjXtofLrVJhgzU9x3VkZFEphNPdF6PHBW9Q827aZI6rMhafwP45dS/1eLCsDqq6RIx/S8oQQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089)(67672495146484); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(575784001)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:XkcvAgoohkj2Bi9CIEEHG+n/s7HVZ7NF+isin9Pj2u1SPY8kDru7KtftN033S+AHbTOWt7uJf8zFCuZ3MI3diAprxTz0oFyZrr/Weyim8LnTeYgbGKafx1gK+hGA4SnTC9MOZ4KjbiqDgYYGIpa4TycPchssxPGMBgrn9AKFmTWlsZamHg8cUm5vQ6aGwpCIQpZGHrofcShdXp821Buogb2ux1QOn1e/uKaWgLqnXHSH704D2P7KlGWvLgwGRakhyRkO4X90A2K/aRVXUHjBQm4tOCb7AscqmzCAGevzOfErMnKulACsJSQ99Eq9W+NculeYI8/KWsU4pcgUWwSkRrZZ1dr9aV7hGa3D7NIcSS7pVrrlc15OVzABJoXKZsei9+yYRbhh5C3AzwLnfjv3BO7swi7ipc47orUJjhDXjUqKs/bHC/HyEsDfepUYiypMCbM5fkj5KLWIQJoxGVBX3nsfjDSmKSdMg224lfIQHJ31Ih2+Iqm59dicNP2YGhQobcj0hPhV4Jq1DTN0Ghh0WvxkiyN6i5V5ZEs5XvHbAmlligJ6VVZc3D2XWaP4AIbG2l+Fbs0Ajr/UdEJlT3Dwkc74dSQgPiInl3BtlU7yF/ibgD5LwE9ieIp2J7pEq8Hd5w7rWAk6n85JwBYWHfGNmq2agDelnO+drZ9eJrYHpX7RL3/gfWVdm0H5dGcB0LruRc/D66mC5bU7gKXyhAo5/BUR3G+8NYkQrqBgfm4yJU2BwopgLCMxbjzBgHxkUAUVvTFR8AXz2baex6PQFZvVdgIskvPHwkYYCp+SkIGBxo9YBSXeRuEEbiTg0eDidtRH2y9aB19u5MYlCLdlA0MU/ew4/iqsUpxjDadqIfNQeWfVDGq6FY9iIOregiRmMf2Jfe2gl3H0uq7ufMpsw14fX749B5c5GK3TqSx7kVZ7IQ4q9P7F0yH+gRpdthXpDYksBY/Vz4tvJseJpHHV4T1EBmEYmtZ+U5pPQPFljR4vznOkiz8v6wS3u+NrQID1NCsbcDfYxVjybd6qpavkczfkzZVkgGgGCs3pl+xulTeDZWRcVoKOEoOm5ga+1Xp42ojZIu9kgoCRK0JoSf1wTTKZBb6DgI9MySftp9B6KojuqhkDy1Z1f/H2ynA/GYXHDfdjCFfqTkrrH6ToE31XpbQtNR0J0Pef1LHaOZhNSTNIPdG/nxeEqM1nLLjtJTPvfzQVEfZSquJ7jO5HCHIvz60YDJeCU+47y8vw3gaSFCB9IXEA36GDGxKamLroXeZv6piLeaQd3HeR0wGFzXh8CfjMJuyTTbsjYWj6OZEByh0SRY4jo4TkJijKFbZ+Y3eNsRL2 X-Microsoft-Antispam-Message-Info: +quzTIwHVNto5NP2sgROskKyY4f3EJjmTWPORRE+KXqy3z6B7F02pOYMEtADezDhqcuhOFVGeJ19pLp0FzZWcIPfI+0xf5yG7gaxiMvnZxPHqyBeu0gw7cSCTpM3A9SmmlfggAjDqzxynzHATqZGd+h64N64i8+Wu+iaC4RjeK/o5Y/Bdn7gnKD//nsYdhrTCQ/cFllWCAz1J2nqhP6vubmYD+ivikWuoxJ5U6N/hSJCyJBPuAMo4eYrYyLaR9WHXW3fLPS35q8PjpZQACRmGIe+/f39l0kAk9T8SBN2gbSBlLGTVCoJVEfNknk6YAP1hTkrQ/VpC3U+MeoHxYsUI76aJE6h1nIfcU5xVwC4Vhk= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:s+d51Z4YNcQ6yiaSSHHnRBbyczZYE273awfeMdzT4VfE9IrfYTubWx3rJy9bJ9dtw6r1iWv8YFz5AMhX31JzVBby6/evuEU6FBGdmvJnT4VMckyXBugPTqLbx7NXXn30kYSbB8tpX1uThSIpKcFjFCv9yz+s5EGpHN0kIGPIK6jdt0lD+zYA/kfF42J/7sLXX+o7UWulmQqOLEsKeGu0aw2B4UFkp6RgeR28a0Uf56e2LQazyZSeWL/VJW2fgtFCgwBIA3LsfrX69SIabSm98Sw3F5K+EABqkaCdJFRaCaI8cTrwCjyyRqdLE6z4iXwckZXIIX/HXri44wvEkvQ9l8PSoyLYMgMA9Am/ogc8YnkQ1jNx8E1i7VvtGjtfdEPwQ+thXLO+0c28ECuhtVNExJpRKf51LJBIPXMkjj/Zz5Fmlxln9+Gpbrml+b949MCXUwFwz3W4MDzI5gAo8w4DVA==; 5:lhslxVJUzR6Kn0sfhmXjdxBsfyQH7UwH3Q9usASzZJV5tLlwkYg2+EmNxZODOajqK5ERLyJSsdbvJ61lczDNjSp4uit6OoHSMW97yu2ivobWkWbIfdBGWMIRJZp5mho0nmulGCKcmqtmM/5+cqkYvffIiC9ZWLc4/CPVRvmnHHQ=; 7:Bauv2wIOrHIf9iNA/pARdVkK8brTIIjloUXqDtXV8p4zbh/+ts8u/bRMCVBHuKUKx8sCtnjhK4E/eUOMFmMlKAKyEBcntxOmK2Kntnm36nY9dB7yEUEzEHt5TIzgE+6nf4xz3A3ap3tQRaKs6+pto6QNqot6iGUjGIdYYxH/f8bVt+CvWoG6WTXDHBNPoHkRB9h3Cl459D/rD11RYoZBEUHVDNj038EFaWNbxGWGkW1CDoN02JQOn+jtjJAAZGaI SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:sAAjiF7tC/wehRW5tdFHtw8lehmaLwTU+v5yWyjEgFZeL9gTLhgZw5lCi+fw8ZQVdaCI0RlMpKqRGEoOIOltB5rJtduLeVwp/OquMtd8gyJkPTI50INHG1BGXrd67FPrPc39emTznO5ZYG6vqaILxZRyPEW0Nj0utZ1NaEBVBIo= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:27:54.2188 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 03f7840e-33e9-473e-5bc7-08d5f8becf5c 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This commit introduces BPF_MAP_TYPE_CGROUP_STORAGE maps: a special type of maps which are implementing the cgroup storage. From the userspace point of view it's almost a generic hash map with the (cgroup inode id, attachment type) pair used as a key. The only difference is that some operations are restricted: 1) a user can't create new entries, 2) a user can't remove existing entries. The lookup from userspace is o(log(n)). Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- include/linux/bpf-cgroup.h | 38 +++++ include/linux/bpf.h | 1 + include/linux/bpf_types.h | 3 + include/uapi/linux/bpf.h | 6 + kernel/bpf/Makefile | 1 + kernel/bpf/local_storage.c | 376 +++++++++++++++++++++++++++++++++++++++++++++ kernel/bpf/syscall.c | 3 + kernel/bpf/verifier.c | 12 ++ 8 files changed, 440 insertions(+) create mode 100644 kernel/bpf/local_storage.c diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h index d50c2f0a655a..7d00d58869ed 100644 --- a/include/linux/bpf-cgroup.h +++ b/include/linux/bpf-cgroup.h @@ -4,19 +4,39 @@ #include #include +#include #include struct sock; struct sockaddr; struct cgroup; struct sk_buff; +struct bpf_map; +struct bpf_prog; struct bpf_sock_ops_kern; +struct bpf_cgroup_storage; #ifdef CONFIG_CGROUP_BPF extern struct static_key_false cgroup_bpf_enabled_key; #define cgroup_bpf_enabled static_branch_unlikely(&cgroup_bpf_enabled_key) +struct bpf_cgroup_storage_map; + +struct bpf_storage_buffer { + struct rcu_head rcu; + char data[0]; +}; + +struct bpf_cgroup_storage { + struct bpf_storage_buffer *buf; + struct bpf_cgroup_storage_map *map; + struct bpf_cgroup_storage_key key; + struct list_head list; + struct rb_node node; + struct rcu_head rcu; +}; + struct bpf_prog_list { struct list_head node; struct bpf_prog *prog; @@ -77,6 +97,15 @@ int __cgroup_bpf_run_filter_sock_ops(struct sock *sk, int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor, short access, enum bpf_attach_type type); +struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog); +void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage); +void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage, + struct cgroup *cgroup, + enum bpf_attach_type type); +void bpf_cgroup_storage_unlink(struct bpf_cgroup_storage *storage); +int bpf_cgroup_storage_assign(struct bpf_prog *prog, struct bpf_map *map); +void bpf_cgroup_storage_release(struct bpf_prog *prog, struct bpf_map *map); + /* Wrappers for __cgroup_bpf_run_filter_skb() guarded by cgroup_bpf_enabled. */ #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk, skb) \ ({ \ @@ -221,6 +250,15 @@ static inline int cgroup_bpf_prog_query(const union bpf_attr *attr, return -EINVAL; } +static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog, + struct bpf_map *map) { return 0; } +static inline void bpf_cgroup_storage_release(struct bpf_prog *prog, + struct bpf_map *map) {} +static inline struct bpf_cgroup_storage *bpf_cgroup_storage_alloc( + struct bpf_prog *prog) { return 0; } +static inline void bpf_cgroup_storage_free( + struct bpf_cgroup_storage *storage) {} + #define cgroup_bpf_enabled (0) #define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (0) #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb) ({ 0; }) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 5a4a256473c3..9d1e4727495e 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -282,6 +282,7 @@ struct bpf_prog_aux { struct bpf_prog *prog; struct user_struct *user; u64 load_time; /* ns since boottime */ + struct bpf_map *cgroup_storage; char name[BPF_OBJ_NAME_LEN]; #ifdef CONFIG_SECURITY void *security; diff --git a/include/linux/bpf_types.h b/include/linux/bpf_types.h index c5700c2d5549..add08be53b6f 100644 --- a/include/linux/bpf_types.h +++ b/include/linux/bpf_types.h @@ -37,6 +37,9 @@ BPF_MAP_TYPE(BPF_MAP_TYPE_PERF_EVENT_ARRAY, perf_event_array_map_ops) #ifdef CONFIG_CGROUPS BPF_MAP_TYPE(BPF_MAP_TYPE_CGROUP_ARRAY, cgroup_array_map_ops) #endif +#ifdef CONFIG_CGROUP_BPF +BPF_MAP_TYPE(BPF_MAP_TYPE_CGROUP_STORAGE, cgroup_storage_map_ops) +#endif BPF_MAP_TYPE(BPF_MAP_TYPE_HASH, htab_map_ops) BPF_MAP_TYPE(BPF_MAP_TYPE_PERCPU_HASH, htab_percpu_map_ops) BPF_MAP_TYPE(BPF_MAP_TYPE_LRU_HASH, htab_lru_map_ops) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 0ebaaf7f3568..b10118ee5afe 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -75,6 +75,11 @@ struct bpf_lpm_trie_key { __u8 data[0]; /* Arbitrary size */ }; +struct bpf_cgroup_storage_key { + __u64 cgroup_inode_id; /* cgroup inode id */ + __u32 attach_type; /* program attach type */ +}; + /* BPF syscall commands, see bpf(2) man-page for details. */ enum bpf_cmd { BPF_MAP_CREATE, @@ -120,6 +125,7 @@ enum bpf_map_type { BPF_MAP_TYPE_CPUMAP, BPF_MAP_TYPE_XSKMAP, BPF_MAP_TYPE_SOCKHASH, + BPF_MAP_TYPE_CGROUP_STORAGE, }; enum bpf_prog_type { diff --git a/kernel/bpf/Makefile b/kernel/bpf/Makefile index f27f5496d6fe..e8906cbad81f 100644 --- a/kernel/bpf/Makefile +++ b/kernel/bpf/Makefile @@ -3,6 +3,7 @@ obj-y := core.o obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o inode.o helpers.o tnum.o obj-$(CONFIG_BPF_SYSCALL) += hashtab.o arraymap.o percpu_freelist.o bpf_lru_list.o lpm_trie.o map_in_map.o +obj-$(CONFIG_BPF_SYSCALL) += local_storage.o obj-$(CONFIG_BPF_SYSCALL) += disasm.o obj-$(CONFIG_BPF_SYSCALL) += btf.o ifeq ($(CONFIG_NET),y) diff --git a/kernel/bpf/local_storage.c b/kernel/bpf/local_storage.c new file mode 100644 index 000000000000..f23d3fdeba23 --- /dev/null +++ b/kernel/bpf/local_storage.c @@ -0,0 +1,376 @@ +//SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_CGROUP_BPF + +#define LOCAL_STORAGE_CREATE_FLAG_MASK \ + (BPF_F_NUMA_NODE | BPF_F_RDONLY | BPF_F_WRONLY) + +struct bpf_cgroup_storage_map { + struct bpf_map map; + + spinlock_t lock; + struct bpf_prog *prog; + struct rb_root root; + struct list_head list; +}; + +static struct bpf_cgroup_storage_map *map_to_storage(struct bpf_map *map) +{ + return container_of(map, struct bpf_cgroup_storage_map, map); +} + +static int bpf_cgroup_storage_key_cmp( + const struct bpf_cgroup_storage_key *key1, + const struct bpf_cgroup_storage_key *key2) +{ + if (key1->cgroup_inode_id < key2->cgroup_inode_id) + return -1; + else if (key1->cgroup_inode_id > key2->cgroup_inode_id) + return 1; + else if (key1->attach_type < key2->attach_type) + return -1; + else if (key1->attach_type > key2->attach_type) + return 1; + return 0; +} + +static struct bpf_cgroup_storage *cgroup_storage_lookup( + struct bpf_cgroup_storage_map *map, struct bpf_cgroup_storage_key *key, + bool locked) +{ + struct rb_root *root = &map->root; + struct rb_node *node; + + if (!locked) + spin_lock_bh(&map->lock); + + node = root->rb_node; + while (node) { + struct bpf_cgroup_storage *storage; + + storage = container_of(node, struct bpf_cgroup_storage, node); + + switch (bpf_cgroup_storage_key_cmp(key, &storage->key)) { + case -1: + node = node->rb_left; + break; + case 1: + node = node->rb_right; + break; + default: + if (!locked) + spin_unlock_bh(&map->lock); + return storage; + } + } + + if (!locked) + spin_unlock_bh(&map->lock); + + return NULL; +} + +static int cgroup_storage_insert(struct bpf_cgroup_storage_map *map, + struct bpf_cgroup_storage *storage) +{ + struct rb_root *root = &map->root; + struct rb_node **new = &(root->rb_node), *parent = NULL; + + while (*new) { + struct bpf_cgroup_storage *this; + + this = container_of(*new, struct bpf_cgroup_storage, node); + + parent = *new; + switch (bpf_cgroup_storage_key_cmp(&storage->key, &this->key)) { + case -1: + new = &((*new)->rb_left); + break; + case 1: + new = &((*new)->rb_right); + break; + default: + return -EEXIST; + } + } + + rb_link_node(&storage->node, parent, new); + rb_insert_color(&storage->node, root); + + return 0; +} + +static void *cgroup_storage_lookup_elem(struct bpf_map *_map, void *_key) +{ + struct bpf_cgroup_storage_map *map = map_to_storage(_map); + struct bpf_cgroup_storage_key *key = _key; + struct bpf_cgroup_storage *storage; + + storage = cgroup_storage_lookup(map, key, false); + if (!storage) + return NULL; + + return &READ_ONCE(storage->buf)->data[0]; +} + +static int cgroup_storage_update_elem(struct bpf_map *map, void *_key, + void *value, u64 flags) +{ + struct bpf_cgroup_storage_key *key = _key; + struct bpf_cgroup_storage *storage; + struct bpf_storage_buffer *new; + + if (flags & BPF_NOEXIST) + return -EINVAL; + + storage = cgroup_storage_lookup((struct bpf_cgroup_storage_map *)map, + key, false); + if (!storage) + return -ENOENT; + + new = kmalloc_node(sizeof(struct bpf_storage_buffer) + + map->value_size, __GFP_ZERO | GFP_USER, + map->numa_node); + if (!new) + return -ENOMEM; + + memcpy(&new->data[0], value, map->value_size); + + new = xchg(&storage->buf, new); + kfree_rcu(new, rcu); + + return 0; +} + +static int cgroup_storage_get_next_key(struct bpf_map *_map, void *_key, + void *_next_key) +{ + struct bpf_cgroup_storage_map *map = map_to_storage(_map); + struct bpf_cgroup_storage_key *key = _key; + struct bpf_cgroup_storage_key *next = _next_key; + struct bpf_cgroup_storage *storage; + + spin_lock_bh(&map->lock); + + if (list_empty(&map->list)) + goto enoent; + + if (key) { + storage = cgroup_storage_lookup(map, key, true); + if (!storage) + goto enoent; + + storage = list_next_entry(storage, list); + if (!storage) + goto enoent; + } else { + storage = list_first_entry(&map->list, + struct bpf_cgroup_storage, list); + } + + spin_unlock_bh(&map->lock); + next->attach_type = storage->key.attach_type; + next->cgroup_inode_id = storage->key.cgroup_inode_id; + return 0; + +enoent: + spin_unlock_bh(&map->lock); + return -ENOENT; +} + +static struct bpf_map *cgroup_storage_map_alloc(union bpf_attr *attr) +{ + int numa_node = bpf_map_attr_numa_node(attr); + struct bpf_cgroup_storage_map *map; + + if (attr->key_size != sizeof(struct bpf_cgroup_storage_key)) + return ERR_PTR(-EINVAL); + + if (attr->value_size > PAGE_SIZE) + return ERR_PTR(-E2BIG); + + if (attr->map_flags & ~LOCAL_STORAGE_CREATE_FLAG_MASK) + /* reserved bits should not be used */ + return ERR_PTR(-EINVAL); + + if (attr->max_entries) + /* max_entries is not used and enforced to be 0 */ + return ERR_PTR(-EINVAL); + + map = kmalloc_node(sizeof(struct bpf_cgroup_storage_map), + __GFP_ZERO | GFP_USER, numa_node); + if (!map) + return ERR_PTR(-ENOMEM); + + map->map.pages = round_up(sizeof(struct bpf_cgroup_storage_map), + PAGE_SIZE) >> PAGE_SHIFT; + + /* copy mandatory map attributes */ + bpf_map_init_from_attr(&map->map, attr); + + spin_lock_init(&map->lock); + map->root = RB_ROOT; + INIT_LIST_HEAD(&map->list); + + return &map->map; +} + +static void cgroup_storage_map_free(struct bpf_map *_map) +{ + struct bpf_cgroup_storage_map *map = map_to_storage(_map); + + WARN_ON(!RB_EMPTY_ROOT(&map->root)); + WARN_ON(!list_empty(&map->list)); + + kfree(map); +} + +static int cgroup_storage_delete_elem(struct bpf_map *map, void *key) +{ + return -EINVAL; +} + +const struct bpf_map_ops cgroup_storage_map_ops = { + .map_alloc = cgroup_storage_map_alloc, + .map_free = cgroup_storage_map_free, + .map_get_next_key = cgroup_storage_get_next_key, + .map_lookup_elem = cgroup_storage_lookup_elem, + .map_update_elem = cgroup_storage_update_elem, + .map_delete_elem = cgroup_storage_delete_elem, +}; + +int bpf_cgroup_storage_assign(struct bpf_prog *prog, struct bpf_map *_map) +{ + struct bpf_cgroup_storage_map *map = map_to_storage(_map); + int ret = -EBUSY; + + spin_lock_bh(&map->lock); + + if (map->prog && map->prog != prog) + goto unlock; + if (prog->aux->cgroup_storage && prog->aux->cgroup_storage != _map) + goto unlock; + + map->prog = prog; + prog->aux->cgroup_storage = _map; + ret = 0; +unlock: + spin_unlock_bh(&map->lock); + + return ret; +} + +void bpf_cgroup_storage_release(struct bpf_prog *prog, struct bpf_map *_map) +{ + struct bpf_cgroup_storage_map *map = map_to_storage(_map); + + spin_lock_bh(&map->lock); + if (map->prog == prog) { + WARN_ON(prog->aux->cgroup_storage != _map); + map->prog = NULL; + prog->aux->cgroup_storage = NULL; + } + spin_unlock_bh(&map->lock); +} + +struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog) +{ + struct bpf_cgroup_storage *storage; + struct bpf_map *map; + u32 pages; + + map = prog->aux->cgroup_storage; + if (!map) + return NULL; + + pages = round_up(sizeof(struct bpf_cgroup_storage) + + sizeof(struct bpf_storage_buffer) + + map->value_size, PAGE_SIZE) >> PAGE_SHIFT; + if (bpf_map_charge_memlock(map, pages)) + return ERR_PTR(-EPERM); + + storage = kmalloc_node(sizeof(struct bpf_cgroup_storage), + __GFP_ZERO | GFP_USER, map->numa_node); + if (!storage) { + bpf_map_uncharge_memlock(map, pages); + return ERR_PTR(-ENOMEM); + } + + storage->buf = kmalloc_node(sizeof(struct bpf_storage_buffer) + + map->value_size, __GFP_ZERO | GFP_USER, + map->numa_node); + if (!storage->buf) { + bpf_map_uncharge_memlock(map, pages); + kfree(storage); + return ERR_PTR(-ENOMEM); + } + + storage->map = (struct bpf_cgroup_storage_map *)map; + + return storage; +} + +void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage) +{ + u32 pages; + struct bpf_map *map; + + if (!storage) + return; + + map = &storage->map->map; + pages = round_up(sizeof(struct bpf_cgroup_storage) + + sizeof(struct bpf_storage_buffer) + + map->value_size, PAGE_SIZE) >> PAGE_SHIFT; + bpf_map_uncharge_memlock(map, pages); + + kfree_rcu(storage->buf, rcu); + kfree_rcu(storage, rcu); +} + +void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage, + struct cgroup *cgroup, + enum bpf_attach_type type) +{ + struct bpf_cgroup_storage_map *map; + + if (!storage) + return; + + storage->key.attach_type = type; + storage->key.cgroup_inode_id = cgroup->kn->id.id; + + map = storage->map; + + spin_lock_bh(&map->lock); + WARN_ON(cgroup_storage_insert(map, storage)); + list_add(&storage->list, &map->list); + spin_unlock_bh(&map->lock); +} + +void bpf_cgroup_storage_unlink(struct bpf_cgroup_storage *storage) +{ + struct bpf_cgroup_storage_map *map; + struct rb_root *root; + + if (!storage) + return; + + map = storage->map; + + spin_lock_bh(&map->lock); + root = &map->root; + rb_erase(&storage->node, root); + + list_del(&storage->list); + spin_unlock_bh(&map->lock); +} + +#endif diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 7958252a4d29..5af4e9e2722d 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -957,6 +957,9 @@ static void free_used_maps(struct bpf_prog_aux *aux) { int i; + if (aux->cgroup_storage) + bpf_cgroup_storage_release(aux->prog, aux->cgroup_storage); + for (i = 0; i < aux->used_map_cnt; i++) bpf_map_put(aux->used_maps[i]); diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index e948303a0ea8..7e75434a9e54 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -5154,6 +5154,14 @@ static int replace_map_fd_with_map_ptr(struct bpf_verifier_env *env) } env->used_maps[env->used_map_cnt++] = map; + if (map->map_type == BPF_MAP_TYPE_CGROUP_STORAGE && + bpf_cgroup_storage_assign(env->prog, map)) { + verbose(env, + "only one cgroup storage is allowed\n"); + fdput(f); + return -EBUSY; + } + fdput(f); next_insn: insn++; @@ -5180,6 +5188,10 @@ static void release_maps(struct bpf_verifier_env *env) { int i; + if (env->prog->aux->cgroup_storage) + bpf_cgroup_storage_release(env->prog, + env->prog->aux->cgroup_storage); + for (i = 0; i < env->used_map_cnt; i++) bpf_map_put(env->used_maps[i]); } From patchwork Thu Aug 2 21:27:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952971 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="ZcXJO9Qr"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="FNV75fxe"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbn3Jgcz9s0R for ; Fri, 3 Aug 2018 07:29:25 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731967AbeHBXVW (ORCPT ); Thu, 2 Aug 2018 19:21:22 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59128 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727260AbeHBXVW (ORCPT ); Thu, 2 Aug 2018 19:21:22 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUb012185; Thu, 2 Aug 2018 14:28:05 -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=DEgBDb3w0Ad57Uu2oWHbluw6pK8Azl2E0c9fEjwFaqY=; b=ZcXJO9QrJXfm1NYlcBr1TdVRLMdMj3A4TiC2DJaoX2jH4bT09lgb2ZOQG/4NE6+FpawA pj47v7CHz2xAAEvOktuse9dbklDnx/gyirbXFh8v/MqwGuQmbkeDGmbBGUH+rN4ISajm 0uDVh1zj/AfQeJmpYMAUv3vH94y3MbaG+10= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-3 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:05 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:03 -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=DEgBDb3w0Ad57Uu2oWHbluw6pK8Azl2E0c9fEjwFaqY=; b=FNV75fxeHi0NQKukCe5zmR2ZCiLnExRiZa5s+GTQCBiYp33G1dzV9Z3r9wPjstXyAZkKnq/V8b5FEJdNQocF1NtOPacP/TmrrdqxUnrGC8npkFa27SXbrOF3y+sgaPWOSsXe3fUXElx5LR1SG8UDv7XTi0MfKmaGIheqPgTd1do= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:27:55 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 03/14] bpf: pass a pointer to a cgroup storage using pcpu variable Date: Thu, 2 Aug 2018 14:27:19 -0700 Message-ID: <20180802212730.18579-4-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e6754e32-432a-435d-8c3b-08d5f8bed014 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:NWCCUxhrrOlf1FG14D3SfOOQxohcEjUlw989rBMJrvRlwbOqAy2tjZDDRekJX08GFNRtR7/ir8VUsZre+2jBpc58yl8OYr1osroHc70SJSvte3Z9VePDRFTDFqSQACbQ1QO4eg5Xxh0o77Kz6lNLtk+JkFKjv+rm2UPBCk1q3yqU9DyOmmYtYCLQPhf32sx943WDdeoQ3emWnc2CifWF7iYYLiw4OXkMxy7ZSjcBEFRodHIK3wdG4uX5+u0xaylR; 25:awynjoiysyfUYcD63lVdPKmOvffEsIhJr69OyMOs1yZpRwArS1r3EyV3mLynb99flvQK6B/oPofbC6UMKjR2F0SnD86j+YvAqZ3fFR41njK0mfauPap+S9EWXrICuNiFc+Kb4XRp6eokCw4lx8qeZAK8v1QWMOYQ+TQnh0h7+2OTyzlJdJpUio05g9uE6EzwBxzQNrR6bmByaFsHl6PtoEEShdOQPCDNGLx8MVccCim7RfMGCLaKYzeh9wJ25heTK1bN7DGxgdPWSLjs/MaS77tsOKRvKzTZQmmCiUSvieAyjencvzjRYBMllx5jVlxVQDybk+CKFQO9Lat3cJqmZQ==; 31:aVoV4BvD41Z9BkSeiA6Hp7plh8u34/lMYBluCPjFSlTF27tdsbCNcP2tSDMGM928uWifiJjaKKyc5JGynBLpeVHRGDinwJ+amDmBJyOL7bcWZMRXJjvf2enO8K0JnpmImV/gFtNeHGz8guTUeKsAim737Xmj69Aps+ppepybqz+tdpOT8EfU4k2b2CANoA7u3XizB5pg8FEzL4D3IZkJZLMTnp8UF8iSSziqVCzm2S8= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:zQHP2N+uSlaCNLB0GPDC3kicEzOqUfUdifKuk99JDHxiDad7v+bBYEzLxHc3qVVmdgK3GLQD1lXNmVUq9UNFXs+QnQ64gcLUsgaizPMkQkEW11jipv6WXr5BO1zqfB9sOc/3MZnXJGi6jvy1/7x1xNGIqBGUCxrgc5YfCddAKJbVmLecCN78K7vEE63lLG1WiDaRn9qKNvXlxDGzU+IuI/0vA2bmodAcuu2pnS6x+gphU9OHZmmmyyb858aQFxltIVY2wNQYgE7gJ+sRi9ZMPYwUZ+2EzIp0pPS9dUq3FU3er+MoZPfjvD8lGyzewDeCn/d9Zow+fRhNh035bOj/wk3MiBTIJ8Da8ldKkUsHftB8M+Q3Z0aibGLYnKH7Qz3ubI0BiYuKVfCN6IMTDXG1UtXueB2TtZlTiUGlg5UFctMhWj0uIBt7uKwcEJAB4hrbCzJ1QNVJmSapZuHCpblVSwazw5plTRu2bcZTuWx9TckL+76T1Ybd/oEv+Uc5uBL4; 4:dP166bmEwr6AYJwaiOyO9/5eGeuQSfypV1RZOhE2DcwKdRl3qLjXaGnerslSHQIU86OWa4e7j7EBplBr9arFsNCsYPEA2FBWtHC7Cg3Lz7bW9gFhPcyU1EbGH51ObE26HVqw9vfx9WLVloQQLeJ6espi0fpiDg0fHUKjymCahlrAybKDMLeSXNIPOf+yjvDGoW8rH8Dmm+tVASBiOrk2SkUdmHbqzTiYGua72LK2p03y47yrpFat7ockcg0kKtQtbZhU2F4WF45whaJd7o9yvTRva3B1c/pluoB6LIGQ/OppPG6lBzXxpLYnP1HQRkeL 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:jVg8/6gHPOMbiRWM5vpEOMVSvTsjypNg2lR9Tw7okLYMizBCpbRSeQ1akPFQxDE38b+9WTFZtfNa+lHqmgV5kmgW33+l/I+dqcWXA1+BXn++7sCAw+U5lzvb1uDvZIZPqT+AvUqk8DwLhyImwsmhFQg7MPwYKZvOxl5fOgIzicbrPvyIVBbaMNse/I7D4Ih3GD8hRIrYWSHYTT9Aej41AJiYijMuEyL1b0+3QiTBl9Nv+n8zgYbUMITeOuMxaGg2EAftC/vrp3V5OhNRT0nQbuN/JeXJ1ICxViWIPs2Hze/6fWBqjd9T3Gw+jPWTyJyKWLlfsqAPDYwQ6OagnBwFEWSviqBuSqGe0MROQJhZIT/wYurbSCMyFOtPTRknASYr36oAX/XxNokhwHdIZ8Nfdnfg2a+czwuDpcifxLy7xxhjvOlQAdYuGhK1RwklbWOSnlCuWxJseo6/ZZKzAa5DDc6JPrkvT9uqYjvWPcNEaHtgdB4AHAE6eaeYV4iycT+KcKsa7tjLfoTAKVh19z9UdJN5CjjtdrcsXEEALF4VksDwMWHrHFTpmHwODwyLASogNzbqG2NQ/N9wWg8Px1HwZHu0yRnbbrwByaXNGnvQ/uXEQTUWfK+1wwEvK/M4XB/IqPwTUq14ilbDRG3j+ktwTNxdoSFNSrZ9VSVuZRMBIljJE/3tI2IADp2sLMpVPrTLODLhzIVU8CZoi4HFRp0wRVPblBayx8WgTu9yTuO9abma+jqSZ5SLxDeLo00gqohdJl+qmL18ohJHsA/hsIa+ab38QsB2YpeP3S+iKuaDqp0a45ZmptkULlPw4TYRoYtZMrEBiCVi+HEfNF2WOALMw7PfK0FN8DC4iQ2w6CYAyvva7DMvEQsfsmsUXgOJblSNxIJmAPscUl5NxfPtzu6CM2TjxaTq6YA02k7bDhbtTIpXo7BLWa2VHQi2BSHYwYUc+UiJjoZzKaryWKB/gUCxl+080x5037L6TvLO9MMD6xVh5/gHlARne06LSZe+AIbKH4qY9PDcB1YwivxmanvoPNPJ/3mFA/zMEumQPjxpDlfZS+AOywQGwtxKC3PiB2y7nb7GxRDho8ix3WpbECdHH9Es5+OWWrQ/rfG76crIxYG9YNKVR2kHMMvrWS4Q8Q6iShhGchHtRB3tTv1AmoaU/MNSqmPB/qesOJ5P5u3yTXjs7yGoFYuIEScvoeUIfgrjmVU7nsqmTi+Q2gDX0eK/ztOOQhwSx06ry/54MKuwUA9HLb2xt0JnqdfDYHMDU6V0WygfjLuPpmzpXPlcx3GK4/11lgV4kEJl+3XtOu2fu3c= X-Microsoft-Antispam-Message-Info: H33KspVwBI/j+daP8dzbqOIRPuNFU5ONvI6fhi5UJXYLKsYo1igdmd1cHUAZt2zbXDWucd8OO2FXraQ1Qrvt5wKYUqobmog1FvzAZ5w0MQAdvVkmISm/+j6OPuiW9kNBCC9440DJm20LS7Fg7ykBnn0ehXuyMRNr4VSN4yaXR2P4JGd1HmJ1Ck2+RRwdZfyViqvUrnALH86HPVunpI6JSoUYMjysLectQ9MFKmQRDGjDkRvalKlEa8BoA3zf0jVmlFuuPNdFZkT+isi52rrUg+RyBYhrBBHBDluf5FQO7lIXqNEFtx5nyn9c9PU0nFCMBh2u4cnr8gr9RlBeICZEk2i/jlDULV4c893S0iFb2tI= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:JcxZbW7cQ9F0x7kpM+TpsmDjWGFoNiEeiXe/YZth9stvrLbFpjkYOkK/vPTLyqck1O+VaqYsNdAc7vapHksdp/TZT+m7kzMmMvD4tYbetEJJ2I6NNddp1HMfpj/gC3IIDWej/bBeS2VSSqdgwKM/ABZLKr934U8XME5EoWl6BBfEAldjkvkUKJAVYs8d8xw/GAQsWdtKQ6Ui/ETIoDarJ9TJeHXdcclby+Z81U5/8ZRpPYFWpd9jncBr3VKhyuYzFL7aaqaLhrdUnacnDOYyioV7d/SO0MwJUefS+CdgD5Nkty9JxHSyvRhze5gzDAbEdsz41ui5TCfdN1dG12W8R34asWLUiErfG9NQ8rGcT3Ci+ZQzxVdGRqBn4XGpki2ZGAwDptq49rzrhR1yg277Pq1ZQRSfBCh7EBrx5juXNmMfA1j6McCAgtFUkiBl5P2z/VCzWVZFzQmdFu/0A92oNQ==; 5:dMQb6cSdOsWyScBMkIPXRu/yw5SbhSXJpMBK5SaymYVGxQU0rQeuSSRvE0i5nvnT0vtqG8fIagp/KXVko9QH+shdeViJSEXlC9XlcS8i0DB2jJuWkFO2tpW/r+xwMUor7L7TeTB+aIViC6GJAU+yOYPbDbC57glFdmjuaKSIbI8=; 7:JOCOqWZ9otq64Jie4wb7hrA5kR3RK4B9DynlRXaadgQ/vwk1yVFrTF9zgSluW9SoryFqkSIISM758lTCUbgZep/OHM9lsZtQ+YJcDJucyU5sMsCJwKrR8VossV0wPAIa2mqt7Duku9TeShj91HUZREO+ZPXjLAMLlsaVBU1aWovJ488AS2TrW8Awe00z8Wu6GHxI/lB2MD8kh9Sf3BS1Bc8G+G13PoudSdGc/+81Xauos2T1Gp6+BQOcv570uU6Z SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:2OW3CZCplFI91a2cwBzDgVmS3KIIg5QFn3Ffh8fsLbV9xlLO8S3gifBWB8qKyegY5tfPRG7JeOLh4NUo5vP0D10ufiA8emUMBkT9WOtt/r36e9mpa2pzSEZM6cDY+24YQFOgb7WR1MyR+fMbmmEaaHZ4iVWnkdrStmhvgFL4krM= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:27:55.3878 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e6754e32-432a-435d-8c3b-08d5f8bed014 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This commit introduces the bpf_cgroup_storage_set() helper, which will be used to pass a pointer to a cgroup storage to the bpf helper. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- include/linux/bpf-cgroup.h | 15 +++++++++++++++ kernel/bpf/local_storage.c | 2 ++ 2 files changed, 17 insertions(+) diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h index 7d00d58869ed..9a144ddbbc8f 100644 --- a/include/linux/bpf-cgroup.h +++ b/include/linux/bpf-cgroup.h @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -21,6 +22,8 @@ struct bpf_cgroup_storage; extern struct static_key_false cgroup_bpf_enabled_key; #define cgroup_bpf_enabled static_branch_unlikely(&cgroup_bpf_enabled_key) +DECLARE_PER_CPU(void*, bpf_cgroup_storage); + struct bpf_cgroup_storage_map; struct bpf_storage_buffer { @@ -97,6 +100,17 @@ int __cgroup_bpf_run_filter_sock_ops(struct sock *sk, int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor, short access, enum bpf_attach_type type); +static inline void bpf_cgroup_storage_set(struct bpf_cgroup_storage *storage) +{ + struct bpf_storage_buffer *buf; + + if (!storage) + return; + + buf = READ_ONCE(storage->buf); + this_cpu_write(bpf_cgroup_storage, &buf->data[0]); +} + struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog); void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage); void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage, @@ -250,6 +264,7 @@ static inline int cgroup_bpf_prog_query(const union bpf_attr *attr, return -EINVAL; } +static inline void bpf_cgroup_storage_set(struct bpf_cgroup_storage *storage) {} static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog, struct bpf_map *map) { return 0; } static inline void bpf_cgroup_storage_release(struct bpf_prog *prog, diff --git a/kernel/bpf/local_storage.c b/kernel/bpf/local_storage.c index f23d3fdeba23..fc4e37f68f2a 100644 --- a/kernel/bpf/local_storage.c +++ b/kernel/bpf/local_storage.c @@ -7,6 +7,8 @@ #include #include +DEFINE_PER_CPU(void*, bpf_cgroup_storage); + #ifdef CONFIG_CGROUP_BPF #define LOCAL_STORAGE_CREATE_FLAG_MASK \ From patchwork Thu Aug 2 21:27:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952969 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="AezSuOPi"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="N41cNR/l"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbX6m4Vz9s0R for ; Fri, 3 Aug 2018 07:29:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732169AbeHBXVZ (ORCPT ); Thu, 2 Aug 2018 19:21:25 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59138 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727262AbeHBXVY (ORCPT ); Thu, 2 Aug 2018 19:21:24 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUc012185; Thu, 2 Aug 2018 14:28:06 -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=KYnSp7NsKyMzyHdhSDtQhVvHlpJLTQwyiFaE9Hw63ek=; b=AezSuOPiAJL8HZgIKNFSc8q5VYUCaj4qLQXdSG+w1u7Bfuh8Z0Ut2lj8fTKYj1dem2P5 w4QBUp2xw6sN7Txftd/k/956+hp3qgWb/ny1aECdAAQ/aq7XvL1qoJ7xfAaWu/o1s4C4 Df/rwi8OXVhfae0rMsswPRS6DZjmg+64lI8= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-4 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:06 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:03 -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=KYnSp7NsKyMzyHdhSDtQhVvHlpJLTQwyiFaE9Hw63ek=; b=N41cNR/lLPK+zjIk+MDda33gExC7HGpZZmo2oO5G0ZgGkozRXmZB6ixi6rUWOeMAfyfoguU+DI2ZxhOG/DtdoSdSvwuT2otUnDZG5odijXquMuLYihWAPsQV1w66a37zJu38PbQRqhaJavQkoaRSb/KghA1PHm8h6tJfcM7oKSw= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:27:56 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 04/14] bpf: allocate cgroup storage entries on attaching bpf programs Date: Thu, 2 Aug 2018 14:27:20 -0700 Message-ID: <20180802212730.18579-5-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 78ad50e3-8507-4df4-b505-08d5f8bed0d0 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:TsOu3QOMRTYOqlPxazl8yrdryU98L75+ZwS+CsjXa4sKv92aGWkJKQXak4WDKCExHpgcXyMmcPKahHtXsJvNpOs8lsJQVWL7JbSnHdC/tpk7umh0Lqo8rsb1xzBGP48smZ8O/fFjatCaOa1jFfWPSbrXEC14OhXpDPsreY9k4nv+3GSEZeCebI7h7l07NmhqfhlLPwl+LqQXXDcCN2qRCAHSTjfMVnAmXkQY7DtIchY5vwFP1gp7uAF5wHFTjxJK; 25:5Y7wGV1yuouf9aV2x74I+fqwHRUW0kRPjq8yK/64xKdQ+0YqBwgUQ2B3RWkYcjz1q6cSgye3WOtIHJN/NkzvrLFKDSxo+Llyswx8wFKuQq+y/toyA9hPTtTQH4N6arKclDel/FTUC8V07TXdd84nHd4tBJpt/my1faCUnFzpBcmYSkRYDEK1Pex4cdZEwoLuYXDy2Mt3yRqvKoCEA8zPAiZ1EaBtUeS6plIbXI1/WmIN8Eg+MZkJjyAqaX2Y7Y2vr+GGfJQEP551iEDvUBLU7+NbB5TbxMKThYWZIGb5Y08EBdX/XfU3ZfSxwVGKOXXW+6g7wjD1/w8DtAvvo+MYYQ==; 31:ZvdIiEUhiyYjsdh86rJu/UNk5Ga31zd1jMINmGhq4buhMt2XSBuYvhMi1gC6doc5ttuBiOaf1RaQhQH8UR5BOx0AJvacBGM6NPiwGshRpxm7vR1JZxl4jsoY8TLm+4pKHJvLBaDW+GdSNFmZMUhArw/EfKDS8FpXaYEn0gOPheOHqI0D7c4lPacadSrrCSrPjvRkRpQKXXT+RjA8n3DAu4qSnJUB4F31qBeggfTAWQY= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:bGPdWd5/oF/clUNgfRVm7B+S45lsEfnFgUUoSyhkwP6cBmOOiFi2Zvoqy5ruQiDohItjZmoUeaWTyvTRyVLnxTFRuk9EfF6ec+PG4kbGkloLYaZoxl0h/JqzTYF+/rJvz9qGgPO6GHSPvEIi/o8Den4k7/Wl9G2it9tdsYkh4xBN3iMPKetZtAa8RJNGLA+ihVBuEd2t+glq1wGlXzIX/la96lMqVVgtAMRsveSD462GnuCHe7uHgqGzByFd4lWcR1HO4qk1d4jAKM0LDv9nZLNjdmCLlthHfQolOTKr/2v2NHt+krQgca3ZGSJSpXEE4Tvj4qeE2gEHV811JGYblc+UK5QPCZAtu3c3nSUFTxLszN1MnIHGpvsvup4qIz7geT/7KM3hPwRQX8reIfMGoPlzUN0+mo6agRP2/tYIqjiPHAGXSEcB11yCrhne9yk2fQua6AT824y3mNc25cA7k1g4KLuPstx+UiBW0LN84vd0fiUuNSdlDB/WaiAUC9d8; 4:LmZBpegTq2CrBCpZ83Hnh/KhgI9ZkldrCTwUIxOvdOcZzjYPBpQMEtUPL6RLEtkd4q7CratexgKylp/JsoYtRpvoXjGGGMR9Qkau2PZq3dpbnrrr+NZGtGY8FMsu3d5iZyi70vOVi0yYuuVd6wJcFQM9N1FL8kykAQ4FaPBVbhPnzJs0uEy68gkqgPeCs7ubIB12rO+Dmb6jrKDaxLKNNvRCN9O8DSXA8zCxXLdkjsjlC9IwcY9QummYMd75pWB6svG3SeraQIbZAov1caIcFHAbrKlzRSqKqKlyv/0VoWb0FvXel/V6C/hmLzg4EPug 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(575784001)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:IZ3FenyxjkyK+I4NdfJikPfkZ52JOYlV2nfsyxnC9INl6rM+PLpLGbD0K7C183wAiaJxT1OTuWb3Z0Me9PQ4CbLBf4LaRd8Jsv7tSrfgjEpinHqf/mIzxAWzyDRjmPpDJf+1OJ/napyc0LsnRyNHYATgfSLCQez8MDn/UlT0CZMNJg5IeOa7AZlpXzJPkDU9JffEHlzimKvZnSfYN3RKmR1TZ9S1i/iAhUvG8gqAHUAq0QDwiHiBT4qPyM/dAIrJxQ53TgdhiXQ4SewD6MZ2aEuGq0f7/DGjVGKAJil7ogRh2A/FIGk0JBX8TvghDjQqUBrOtCEnRvZhI+XIxMViseR51pA6ignZgdAQpjLl/cGAnN92R8repqDrDsuqZIenIVfY2uubQSKEW6/ZxJPjDmBZvTaoOU69enRZjdjulvs5qYoNa5tTSMj2ueuaPnFXQxTNe+mmqU8KdwCNDHd14zm0vh22tIKb6n56XGbp67tPuZizKjdtVSdyedCvzLm2DGY/voaZBZQ0zW0MdrCpL33Mto8yNd7N8c8nwbYXtwd2HNbTh1OxLd01VuA/yQVlUlo6dDwuAyQBca8RKJuYveKHTHXwDEm53kKY0nE/NHCblwmFQO6NXpMaN0LXG0tQ4dpuTV3afktF2S4hjszmQNb6hLJlHFiDnabezXzF/JoEPM/3rrdsmZD05Vu8FcchjLtIxzazLdOpJfBGOdl2/GV5mYaBw3bHBRW/Ce7e4WnNodRcy4BG6yUE0yCiWrN5Yhwadp3VrxlnfkZh1D9I20JF42aSM9uhu3RKfZ6MLcrEkWTYNm3lzgYMVEqIJPnoxlX6BBLLd8YVeeoV/jJ4nEr1ZaqsojPh5q7zYpILColzbsAUt+TA0QZXax15g5LM2LNmAi7A95rVtpHziJIjeNtUXoH/COtEofPzoNT/dy5wxb+VL2mOalFboM7M4TmSLM7OSFQKb5uhwsmSCsMjPoAk5xfN/1qECp4BWH0kiqSOsazS3vsly25ZML5wWGwVmemIMqgXlipPnXVj+3xgM37Ol103TmstyGZvYezrOhLeSyI1SXJHMFs19YjtR5J1TBqNOZ2rZ/UWc8NzbZnwHWeETwy/Ott38ScHbMaH2FV19fhjY60o02vG832te0658fuCpcVZWjbtE1g3CAETvGC/VxIswBSG3bC5pT+zwy3bwOPsZN7p0T0PBiGzPW+cntjVIexEkSD0bWnEiGNMRju7gOyc+SCcf/0qx4aMTN+snoEj9nbIQLoAwrrkNwd8XJV3KKN7XGHdXfj1o3lT5M4d4ZQRUJbjpxeknlY48GjDF5g2gZ7iXUV/PBtdHo7s X-Microsoft-Antispam-Message-Info: pwo9ervwg0We/TVhIC2PaOzZA8Oj4GU7vXNczWlqYKkRl8LndwzmcGPKtWwGst9fr3SR7/qUPJOxap4+1s9JdgYiRKYui5qXKx7u7+0iEai5w45R50pjKJov/SzsyJRoBFZA+jZ8Pd4GhxGnpjcVecSXUNwD/5zdYLmZZhjLT2NLSwuDgLn13jzfi3DpWVquIIKy5pj6+fYRCPSZD7+A4ORXGq5mXt+L1sLilfBqeYidgNVIdLDdckp2oMcyxY78hoEPV56b0AhMMrb+qO/xJi2Nqh60zjuL2lrQZAmW5pEKkpbGfAfCmQ3ZhWnp/vNrxdFXp5UAtBL6NfSkKwjoqxY8t0oHicJUnSKIuRWlBrI= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:WBv4ErcDx0i4f2rqEogpS1uWwX6Y17Q8MmHBn97egovq1EtO/DSxmqSayj9XsqYzPhsy5XxKPFLf0l4aJx31vi2ubE8SXGQu5WwRKSNe8cv/s/UU3BTQZqwQiWzmL4NaOW1ypH/yOZmPt4dMNFpwD0E2hjKjTOYnqE8kB44Sfl4oQQeVn5tTp9Xr9wi1hbcPkwGWdEWKJtC8vNYsrv6bVXf5gOSlftDkSk3n25PgMGnkFRyddHH4nZYWCf1pmHqRRf04X3F2ydZj4/hdjig1CyV0Sv8+/sA1/IwaIsDPL6CfzuGleJtPOlj6Z8XXeH5QkBeJVOM9hQY0FFIxLCGnWjPIGrs7RuCU2I3ERDq/dQd0GFOkk/AFKMnpl4QBSfCDWP1IamsvXF5dWRC/2XnvbkKTr2eoMSthG35Ok4oTLa8PD0iyq9i5G4S2DqJxwAFU5jR/Tv/j78DRjDT2T6dFZQ==; 5:LwWdRokxS9QnSoR+pGvu8NM+BB4ywoHIkiy3g8v/uz4Ecgl7zcCjYJk7bd02ptREKsfqqg/2XxR+RwAlGhuusxtPj02MDGLC17LlATQT42ogIp1/y3ic0dGyLBHDOCIaZUl3mY9HG2R2hvkt1ufn8f2fv8NQF3hvMXlQ4JYsQhc=; 7:vh/mnJJCvtCwkqz0s2532YZj8CsLmWwRrZvSvo5OiWjBzu/NQgLyigw2VWqDaeiMviHxRA1O1n90HN9HgLyqgABSI6WZ8Of4/GuZAImYzceilpBSQswb1K9/+sq3kpqLdF3XJ+wy13K6g5ihk53OibsKuRkix0e4UmZxGCU/hxpmKaWcIUHrIjwz+lz9SsJu5MLeQlwKffK0fSpid1j5Lo/hil9RVpicgls8o5u58PYozvoPW0PvcuoSdMIFkVvW SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:6MeSANxeF6F08YbUn60wqAoQ+/8ACb36M6xtVKmSCxCYk01wd8p1EA4t9x/6nMpAFkbTCz8H1U04VGYe+85aiojW068XHHK9HxebBp/PUzf01XMFtmBPWygezJS56RZ8B5nUYsXbjx/tleh5cenC1IhPLBY2hmaAC0MmkMWSW3s= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:27:56.6480 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 78ad50e3-8507-4df4-b505-08d5f8bed0d0 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If a bpf program is using cgroup local storage, allocate a bpf_cgroup_storage structure automatically on attaching the program to a cgroup and save the pointer into the corresponding bpf_prog_list entry. Analogically, release the cgroup local storage on detaching of the bpf program. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- include/linux/bpf-cgroup.h | 1 + kernel/bpf/cgroup.c | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h index 9a144ddbbc8f..f91b0f8ff3a9 100644 --- a/include/linux/bpf-cgroup.h +++ b/include/linux/bpf-cgroup.h @@ -43,6 +43,7 @@ struct bpf_cgroup_storage { struct bpf_prog_list { struct list_head node; struct bpf_prog *prog; + struct bpf_cgroup_storage *storage; }; struct bpf_prog_array; diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index badabb0b435c..935274c86bfe 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c @@ -34,6 +34,8 @@ void cgroup_bpf_put(struct cgroup *cgrp) list_for_each_entry_safe(pl, tmp, progs, node) { list_del(&pl->node); bpf_prog_put(pl->prog); + bpf_cgroup_storage_unlink(pl->storage); + bpf_cgroup_storage_free(pl->storage); kfree(pl); static_branch_dec(&cgroup_bpf_enabled_key); } @@ -188,6 +190,7 @@ int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog, { struct list_head *progs = &cgrp->bpf.progs[type]; struct bpf_prog *old_prog = NULL; + struct bpf_cgroup_storage *storage, *old_storage = NULL; struct cgroup_subsys_state *css; struct bpf_prog_list *pl; bool pl_was_allocated; @@ -210,31 +213,47 @@ int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog, if (prog_list_length(progs) >= BPF_CGROUP_MAX_PROGS) return -E2BIG; + storage = bpf_cgroup_storage_alloc(prog); + if (IS_ERR(storage)) + return -ENOMEM; + if (flags & BPF_F_ALLOW_MULTI) { - list_for_each_entry(pl, progs, node) - if (pl->prog == prog) + list_for_each_entry(pl, progs, node) { + if (pl->prog == prog) { /* disallow attaching the same prog twice */ + bpf_cgroup_storage_free(storage); return -EINVAL; + } + } pl = kmalloc(sizeof(*pl), GFP_KERNEL); - if (!pl) + if (!pl) { + bpf_cgroup_storage_free(storage); return -ENOMEM; + } + pl_was_allocated = true; pl->prog = prog; + pl->storage = storage; list_add_tail(&pl->node, progs); } else { if (list_empty(progs)) { pl = kmalloc(sizeof(*pl), GFP_KERNEL); - if (!pl) + if (!pl) { + bpf_cgroup_storage_free(storage); return -ENOMEM; + } pl_was_allocated = true; list_add_tail(&pl->node, progs); } else { pl = list_first_entry(progs, typeof(*pl), node); old_prog = pl->prog; + old_storage = pl->storage; + bpf_cgroup_storage_unlink(old_storage); pl_was_allocated = false; } pl->prog = prog; + pl->storage = storage; } cgrp->bpf.flags[type] = flags; @@ -257,10 +276,13 @@ int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog, } static_branch_inc(&cgroup_bpf_enabled_key); + if (old_storage) + bpf_cgroup_storage_free(old_storage); if (old_prog) { bpf_prog_put(old_prog); static_branch_dec(&cgroup_bpf_enabled_key); } + bpf_cgroup_storage_link(storage, cgrp, type); return 0; cleanup: @@ -276,6 +298,9 @@ int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog, /* and cleanup the prog list */ pl->prog = old_prog; + bpf_cgroup_storage_free(pl->storage); + pl->storage = old_storage; + bpf_cgroup_storage_link(old_storage, cgrp, type); if (pl_was_allocated) { list_del(&pl->node); kfree(pl); @@ -356,6 +381,8 @@ int __cgroup_bpf_detach(struct cgroup *cgrp, struct bpf_prog *prog, /* now can actually delete it from this cgroup list */ list_del(&pl->node); + bpf_cgroup_storage_unlink(pl->storage); + bpf_cgroup_storage_free(pl->storage); kfree(pl); if (list_empty(progs)) /* last program was detached, reset flags to zero */ From patchwork Thu Aug 2 21:27:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952968 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="Q2Aepiv0"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="So8tzMwx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbM18gkz9s0R for ; Fri, 3 Aug 2018 07:29:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732365AbeHBXV6 (ORCPT ); Thu, 2 Aug 2018 19:21:58 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59156 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732033AbeHBXV0 (ORCPT ); Thu, 2 Aug 2018 19:21:26 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUe012185; Thu, 2 Aug 2018 14:28:07 -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=G36NWQ4d7yccF4eIsCkNlqW0mu4uqv5ySe5S+f6doAs=; b=Q2Aepiv0b972JQQN870/GfWoOo2v3nwxcgCnP329rmSVVI8AajYtUiLgbhdT/gaIznf9 6ahnzz81WaEYT7PHShw5p9/yJnIw5qdTkDPUGsxesrUEDaSyn+LFUNyv2Dd6CVPwEAdq 7wG4PQT2xE1VYOVEPh5EMDvuyHuK7XpYgkw= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-6 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:07 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:03 -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=G36NWQ4d7yccF4eIsCkNlqW0mu4uqv5ySe5S+f6doAs=; b=So8tzMwxzkxhgscVi7PUEV4Ox27JcC++AMBWyBdNad/M6DFAIQtTycW+KcXMo1XOaFkqdzxl6s22ERw3PUwlPF5n/W+Y+tPFVG/FOsfnfzSwymVrEEPA+0uTbisE/M1sVswxqc6yEQ63619b8q0fets1IjcUC1KDsXlsTpwWK9g= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:27:57 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 05/14] bpf: extend bpf_prog_array to store pointers to the cgroup storage Date: Thu, 2 Aug 2018 14:27:21 -0700 Message-ID: <20180802212730.18579-6-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a63d4e0d-c51c-41e1-8b27-08d5f8bed199 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:8egvWGkBH5LryoloywcStfFl4QEnBLiUyKTaEC2KbrejPyjwFAuMDMgLWRf0A6T/OdYIwMW6CJuSURd4H/RR3ZFKBph44l1LYXFKkLgWjjjMCj9foLpvYq1uq57UoqI24ZrOdydYYYhdTkjgc2LfVrU5XQlF8jB+Bmse3kbHh8LANp/IzNRmxSQA3eYoiBicchRcWt76D4uPIGvALzt6S7pJHTaJ5aF6m7/wAPTBmYanTSrkiSOjiX1JV9ilRGFq; 25:yFDGreduOGu5l4Rtw3l4f0HOXhNHmHZRcZC6yRLJbBBJAzBm6H1ct5n4YsBR4m1DobqVIQxXKRpOIm4RlDs1dWDg004Y1qvSE5eWWjNsxWKRSzR8uwpnkG3uqq6Ieyj7i15fDNr9ExEPRAKRs/S9/4LpMTx3d4OrPmpV5VLzlzsVVfV/EtOyBG+Qv/HOb3UDOaNZ3UObz4Xld2PP/vPGP9rQxAbqhykLFSxKd63kSuZU2FFZ7qyjQbm09dUoDUeey3a5UEC9gkihe7WpkS31Uklqt2ey5ycDcXeDITKp6xqxy5r/4j+mxNNxIr93le4X36N1SYGLny8sgqhMD26E3g==; 31:blO01auZjsFyquMDAzNzVimqt1Au2Z811bKUxHk6GaNmjSvqueE0RecwzmuQyaaJBLEzKULwzQcGBeJF9hHT76UoNVHpmvArrKHHpDSvpIKvQ8DkYWJGqDXOn9yvXGNnuucgBU6UYL7YSrGI3bDYNdzPbA017K3gWzZh1X8W4oRF9CH8xVD62pKgwrBdryDPlsA4AbqxDrUnJUmhj822MyRhpVIyYS1z/+X//nx8DmE= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:hlhovaWQmb4fi3eRjXEVpuUIz4+9hFGOsy5Z7jx6zkHsc7UPBHrOm/dXLtKsaIgkAwIeP73jUMzfYmA2imBLZcauWuuoBtVS4ukQysM0XFU0TLe/cw6rzmSdcWLKg1zfKEEEO2tx9y68NP8LtkiBxjlbCVyZsJBAYSFgR1kjOm0IzKRri3alB44eRry1tK8zK0TWfSc/WD9AJuIKa++qz3ARItgjCwKpVkvZYmOVYNSbEE2/0XKlgSLjkfKmZqX8nKvGA60PHB1u/Byp9zx0537b91cnJDxmayvV12wUQoiBQYhrVBT9xlhGypaNY2/IU4A2WZZ2c66jbGpCzQyJ8tEEPU/dln95SmbbjkHNVTA+k0yn4os3/PWoc+6ewKHRSmlbYICgOY/bRtYoA4TERuTcTKHUxBfWVGlkZLTZ9v/QqY/8ZoF91Pfgj6kDGNPjDvtrfelTfA9fpJahQPH5EV71l21Ipk/VoB+dqJasKqsCspGMQgEfy9rjeW1EWS4y; 4:BtA4A2m/UlBVughq0G+JF07ZXt0pCzSW5Y62PkF8gDazMtFCMmQWYbtJiDVuOjV9z0ni3JzJKRFCDrwWqqvPdUAEypTQBhCMaHge+kl68WQHE6xCrN7AnpC0AJF3j6WGZsO8qABjEVNOzhzTfIop7goVymnxPZg8qqDdD6WrZK2SzmpPTvyPeT0DT6k9N0dSc69D5MdE7o2z6QwRes7dxstWeaNtcN+9704NA5XRZ6hiooax5TFltB0rc5eL4Ds0DZc+oy4PTzyympA1EGeViF+1XuFzmnbDBNA7+Cdo3ED06hDOnSxt7g3/5I+zpj63 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:yI1vaNKExIRD9Ag8hF4Uvwi5IcuIZlL3a3zUpfr4r6cXbo09gJ0UhL021Pn6vhEnsm4Gi+rjdQ6FlXSrvfOEVnXuh3LLvAko/s8eOf+ONoMnkHqkE8XpE2V1lhiWindqKBAgjsvMqIY/T1mTy/0GHu1cd/ZvXCs7xSTIU4iz35t/q63JR85FwZYoT65qylUOlJIqma3vLmIRHal9iSp/SAVGciBLZYByGqfZC72yq7k2iVJBPYjF6kW8g2Num0AATHLJGjbVIYbsiBFUaGhnrLBr+JlZUkIvNCFRDsu0g/6Faw4WQts443VYJleEpX2BW6iSTyITTgsS811/Nl51FM2BPmxdvFuAS+JSboii10aamGFNLrlrImGipX4iigWNVcvQU9u6sLsVHK5S/kVapVjE+i7mA+BWT0AVsdsSEwsgYxW8dPug+CpnQf0jZ+SrObxoCFUdJi8kiR0xVk77+QoC6wWUcs01/py5D86coSQXp6r6yo5aMNgUGjr3j0oVL6XoWe0vuCgOkYUaWQ6jct03GVTCd6lhHiOe6BLM9EY7NiZTTYTQHLrVNqt0zO5uRATol+QGFMKACqiD3KckC32sbZao2lVwDRjJMWwWjyXW/aO21hb2fiBcZzL7fTEnGK4piSdWaW2W2msKH9zeYQABRUTvvvEyqxvAzA9soX9HNuUHvHxafrvehm/xBe5z5Dj1+EpoRvzhHPWsuEQM7cci+VS+vYD12ltCWbyAPgGD6GH/VqKURin+WlWZ8HSsorI7TKmK8zSSGZcXGheKgC8WzUqL6toyay9+IctBmuofvffAym4pb5VUmpytnRI1zDu6z4sm2XiNTEgmcOo8rJwTSSfNZLqnQJ45sYok2rSTnLUkFpbvoBppPez3JtHH7xZsRgGAXZF5fgv9IieI/jwcIAUfSqYQYZGBZTgdGsY0x3eJPZvThTQcoCx3z/OyyIDTkpuCvfRvh6Q1IMxLOMBbfZOvoyLnEoe70DNL14Xo2BtXVWflDoTJ3X/+s+wzl4YQj9MFc5K3rtsil78mMD+9mGgFeUNiuGFhwGn3Bb8kB0TPUMYGB20oIG/6LYf5vlaLwBLAUV4YGC19lvLHMRGIoGJhsBRG78DSJkc4cmTxj8XxtGf+lVFZ78tqPneNcf3wfZzrfNSrupoUn1DiWv5zEM2FyvEa4ywYtIbBQEPV8tPHY6w9+jzI4OXgkHfJ9uUHslwyGVbc3r+/yrkJV3fOULhgjgrMl3Hf9npCIJLDcR213AK9h/VXCrxPSWhUc0IinhJakRzW74D9PVv/O5alsuLret1Lf5ID35rl35M= X-Microsoft-Antispam-Message-Info: rk0HkMQJbUi9JcYa+kE3jeXcfMtqukD9zaBZ0D79D7NSIbvhmcXZtcy/1EufjyDd1baVJNitj9Vzf+0msCWqvhK6btyDXxpWe6unnrjXVjPO8HCv2/gcdQCbaCP7vM3ngroqkGSysnE/jBG6v7AQ8B9NUvWBAQ5r3QbkowvKBFupEKAXpdB035T0LNSUiYIn/jcB3YHKuzBbGBbUHxSp8gArvFnTG1yHCSGlNB1M+4INcsacSKfQXTPrXPCGMkz+aS6yMFgP/lxA4tLF8VRThljCIR1GtIn+d1OuDm7aFfGL2ysXrRCJbGhyMGX1Z1tNK/mm2uWX0PaBk3zUq9BuSl1j3+uCIyd3z6gCurAzhBU= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:jYwiuUDHYQCCIPUHQMLpprz91FO0rGOtf2CBxtB+rnYsIY0xNjrjEYQlElzwu8Q8khUn9lv/l82Mk154y50Lzsl1kSnUf1BcB2hkq2ChRQp86njYOcVv4vxO8fSEtEP6tDYTrVTiiHEhbfekDSqlyQ6gTGMaB1EICysiBKUOFP/ey3uuCzlCjeRoCbIRL6IY7VGdylVjTymElGf9xT5/SfZvKTtt53A8IiYDwMDZ7UYPNB7c291v0PKjy+fgmsQ60dCqvMKvK5D+QTHGuK3X/BHFJE422vcic5QL/jBlWeVVAnDdwSOmAaRkARy5JUmM7Z+BANFfX7MpbpGRg+gdg0iBt+fWuss4quaM8++05QBGA4S4DDuv9yXIa5UXuUPQwYQi64eU6aV3PVKxI/5fRvsEpa3nosAWMPIrPC6HRUcMvSrzAiMTJ58m7n9TS2/mMYe8sl/bJr8euw95jqKUTg==; 5:/1XozYsTK0r6SW4Jm/CSexPpb6J1rgh0FzidXGZ3/HNeQDE1w8/3t76ABIgIGTN8qy/15FA+nDfDwpjFswsGOWa9k56TjFLSHrlPeQQmNhPZevUsyB2Tn2waEPZNuKi/NeMo5YKmSdnu5UdN9b90xN0ro2kAqbwoRgt+X/Qxs14=; 7:Tkmmhp5czXdAS8IrqbzKyVemT4ssGPHdVT6sU2RFO60+GphtsLeBOB13aT6IM8t3y1MoxLhU+s6jbqpSiGgPJZyosX3pmWpLYYJ30rg0XO9PMfzy5XSuDA/JXhGxXdT1kNHlj9PUGAp/8poa3qiNhR0nSDpe6hiWtkU7oxbQy3W8exAMpDo4b8lYHWJq8KphfBoaqp0vivzWEVcu4wqXfAtzV/nHthul6ls8symqDiz7+ITd0oUEmmrglLnv1kMi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:gx7L1QS9G6alcrt14UJ0iaiX1jDdPr9V/ZDH5EsGusurpkGl2WBMjokXKocWQc5g5uRHDXXJFYYtag9ho8J/4fmRisgmXb0F+Tf80en+WMcdjsGiaA1ZVQYl9uIHNTb6DmUorozQ+DqyNdGGaBqsKSNDrzF2F1eLTeo89S08Ltc= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:27:57.9792 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a63d4e0d-c51c-41e1-8b27-08d5f8bed199 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch converts bpf_prog_array from an array of prog pointers to the array of struct bpf_prog_array_item elements. This allows to save a cgroup storage pointer for each bpf program efficiently attached to a cgroup. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- drivers/media/rc/bpf-lirc.c | 10 +++--- include/linux/bpf.h | 19 ++++++++---- kernel/bpf/cgroup.c | 21 +++++++------ kernel/bpf/core.c | 76 +++++++++++++++++++++++---------------------- 4 files changed, 70 insertions(+), 56 deletions(-) diff --git a/drivers/media/rc/bpf-lirc.c b/drivers/media/rc/bpf-lirc.c index fcfab6635f9c..8c26df9b96c1 100644 --- a/drivers/media/rc/bpf-lirc.c +++ b/drivers/media/rc/bpf-lirc.c @@ -195,14 +195,16 @@ void lirc_bpf_run(struct rc_dev *rcdev, u32 sample) */ void lirc_bpf_free(struct rc_dev *rcdev) { - struct bpf_prog **progs; + struct bpf_prog_array_item *item; if (!rcdev->raw->progs) return; - progs = rcu_dereference(rcdev->raw->progs)->progs; - while (*progs) - bpf_prog_put(*progs++); + item = rcu_dereference(rcdev->raw->progs)->items; + while (item->prog) { + bpf_prog_put(item->prog); + item++; + } bpf_prog_array_free(rcdev->raw->progs); } diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 9d1e4727495e..16be67888c30 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -349,9 +349,14 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, * The 'struct bpf_prog_array *' should only be replaced with xchg() * since other cpus are walking the array of pointers in parallel. */ +struct bpf_prog_array_item { + struct bpf_prog *prog; + struct bpf_cgroup_storage *cgroup_storage; +}; + struct bpf_prog_array { struct rcu_head rcu; - struct bpf_prog *progs[0]; + struct bpf_prog_array_item items[0]; }; struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags); @@ -372,7 +377,8 @@ int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array, #define __BPF_PROG_RUN_ARRAY(array, ctx, func, check_non_null) \ ({ \ - struct bpf_prog **_prog, *__prog; \ + struct bpf_prog_array_item *_item; \ + struct bpf_prog *_prog; \ struct bpf_prog_array *_array; \ u32 _ret = 1; \ preempt_disable(); \ @@ -380,10 +386,11 @@ int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array, _array = rcu_dereference(array); \ if (unlikely(check_non_null && !_array))\ goto _out; \ - _prog = _array->progs; \ - while ((__prog = READ_ONCE(*_prog))) { \ - _ret &= func(__prog, ctx); \ - _prog++; \ + _item = &_array->items[0]; \ + while ((_prog = READ_ONCE(_item->prog))) { \ + bpf_cgroup_storage_set(_item->cgroup_storage); \ + _ret &= func(_prog, ctx); \ + _item++; \ } \ _out: \ rcu_read_unlock(); \ diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index 935274c86bfe..ddfa6cc13e57 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c @@ -117,15 +117,18 @@ static int compute_effective_progs(struct cgroup *cgrp, cnt = 0; p = cgrp; do { - if (cnt == 0 || (p->bpf.flags[type] & BPF_F_ALLOW_MULTI)) - list_for_each_entry(pl, - &p->bpf.progs[type], node) { - if (!pl->prog) - continue; - progs->progs[cnt++] = pl->prog; - } - p = cgroup_parent(p); - } while (p); + if (cnt > 0 && !(p->bpf.flags[type] & BPF_F_ALLOW_MULTI)) + continue; + + list_for_each_entry(pl, &p->bpf.progs[type], node) { + if (!pl->prog) + continue; + + progs->items[cnt].prog = pl->prog; + progs->items[cnt].cgroup_storage = pl->storage; + cnt++; + } + } while ((p = cgroup_parent(p))); rcu_assign_pointer(*array, progs); return 0; diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 253aa8e79c7b..9abcf25ebf9f 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -1542,7 +1542,8 @@ struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags) { if (prog_cnt) return kzalloc(sizeof(struct bpf_prog_array) + - sizeof(struct bpf_prog *) * (prog_cnt + 1), + sizeof(struct bpf_prog_array_item) * + (prog_cnt + 1), flags); return &empty_prog_array.hdr; @@ -1556,43 +1557,45 @@ void bpf_prog_array_free(struct bpf_prog_array __rcu *progs) kfree_rcu(progs, rcu); } -int bpf_prog_array_length(struct bpf_prog_array __rcu *progs) +int bpf_prog_array_length(struct bpf_prog_array __rcu *array) { - struct bpf_prog **prog; + struct bpf_prog_array_item *item; u32 cnt = 0; rcu_read_lock(); - prog = rcu_dereference(progs)->progs; - for (; *prog; prog++) - if (*prog != &dummy_bpf_prog.prog) + item = rcu_dereference(array)->items; + for (; item->prog; item++) + if (item->prog != &dummy_bpf_prog.prog) cnt++; rcu_read_unlock(); return cnt; } -static bool bpf_prog_array_copy_core(struct bpf_prog **prog, + +static bool bpf_prog_array_copy_core(struct bpf_prog_array __rcu *array, u32 *prog_ids, u32 request_cnt) { + struct bpf_prog_array_item *item; int i = 0; - for (; *prog; prog++) { - if (*prog == &dummy_bpf_prog.prog) + item = rcu_dereference(array)->items; + for (; item->prog; item++) { + if (item->prog == &dummy_bpf_prog.prog) continue; - prog_ids[i] = (*prog)->aux->id; + prog_ids[i] = item->prog->aux->id; if (++i == request_cnt) { - prog++; + item++; break; } } - return !!(*prog); + return !!(item->prog); } -int bpf_prog_array_copy_to_user(struct bpf_prog_array __rcu *progs, +int bpf_prog_array_copy_to_user(struct bpf_prog_array __rcu *array, __u32 __user *prog_ids, u32 cnt) { - struct bpf_prog **prog; unsigned long err = 0; bool nospc; u32 *ids; @@ -1611,8 +1614,7 @@ int bpf_prog_array_copy_to_user(struct bpf_prog_array __rcu *progs, if (!ids) return -ENOMEM; rcu_read_lock(); - prog = rcu_dereference(progs)->progs; - nospc = bpf_prog_array_copy_core(prog, ids, cnt); + nospc = bpf_prog_array_copy_core(array, ids, cnt); rcu_read_unlock(); err = copy_to_user(prog_ids, ids, cnt * sizeof(u32)); kfree(ids); @@ -1623,14 +1625,14 @@ int bpf_prog_array_copy_to_user(struct bpf_prog_array __rcu *progs, return 0; } -void bpf_prog_array_delete_safe(struct bpf_prog_array __rcu *progs, +void bpf_prog_array_delete_safe(struct bpf_prog_array __rcu *array, struct bpf_prog *old_prog) { - struct bpf_prog **prog = progs->progs; + struct bpf_prog_array_item *item = array->items; - for (; *prog; prog++) - if (*prog == old_prog) { - WRITE_ONCE(*prog, &dummy_bpf_prog.prog); + for (; item->prog; item++) + if (item->prog == old_prog) { + WRITE_ONCE(item->prog, &dummy_bpf_prog.prog); break; } } @@ -1641,7 +1643,7 @@ int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array, struct bpf_prog_array **new_array) { int new_prog_cnt, carry_prog_cnt = 0; - struct bpf_prog **existing_prog; + struct bpf_prog_array_item *existing; struct bpf_prog_array *array; bool found_exclude = false; int new_prog_idx = 0; @@ -1650,15 +1652,15 @@ int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array, * the new array. */ if (old_array) { - existing_prog = old_array->progs; - for (; *existing_prog; existing_prog++) { - if (*existing_prog == exclude_prog) { + existing = old_array->items; + for (; existing->prog; existing++) { + if (existing->prog == exclude_prog) { found_exclude = true; continue; } - if (*existing_prog != &dummy_bpf_prog.prog) + if (existing->prog != &dummy_bpf_prog.prog) carry_prog_cnt++; - if (*existing_prog == include_prog) + if (existing->prog == include_prog) return -EEXIST; } } @@ -1684,15 +1686,17 @@ int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array, /* Fill in the new prog array */ if (carry_prog_cnt) { - existing_prog = old_array->progs; - for (; *existing_prog; existing_prog++) - if (*existing_prog != exclude_prog && - *existing_prog != &dummy_bpf_prog.prog) - array->progs[new_prog_idx++] = *existing_prog; + existing = old_array->items; + for (; existing->prog; existing++) + if (existing->prog != exclude_prog && + existing->prog != &dummy_bpf_prog.prog) { + array->items[new_prog_idx++].prog = + existing->prog; + } } if (include_prog) - array->progs[new_prog_idx++] = include_prog; - array->progs[new_prog_idx] = NULL; + array->items[new_prog_idx++].prog = include_prog; + array->items[new_prog_idx].prog = NULL; *new_array = array; return 0; } @@ -1701,7 +1705,6 @@ int bpf_prog_array_copy_info(struct bpf_prog_array __rcu *array, u32 *prog_ids, u32 request_cnt, u32 *prog_cnt) { - struct bpf_prog **prog; u32 cnt = 0; if (array) @@ -1714,8 +1717,7 @@ int bpf_prog_array_copy_info(struct bpf_prog_array __rcu *array, return 0; /* this function is called under trace/bpf_trace.c: bpf_event_mutex */ - prog = rcu_dereference_check(array, 1)->progs; - return bpf_prog_array_copy_core(prog, prog_ids, request_cnt) ? -ENOSPC + return bpf_prog_array_copy_core(array, prog_ids, request_cnt) ? -ENOSPC : 0; } From patchwork Thu Aug 2 21:27:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952967 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="GNnbjhcm"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="Kw0U5Rxa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbG60Ffz9s0R for ; Fri, 3 Aug 2018 07:28:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732230AbeHBXV0 (ORCPT ); Thu, 2 Aug 2018 19:21:26 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59162 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732116AbeHBXV0 (ORCPT ); Thu, 2 Aug 2018 19:21:26 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUf012185; Thu, 2 Aug 2018 14:28:07 -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=2f2oZ5nTFhXCCxmD98z07ydS7myVbDZ2bdmu5+ktmlM=; b=GNnbjhcmT+v8UeY2Kny7RJDr6nYm+4TovMCnyxujA46pK5kK7QS29T7ELDiuAUvb2QN1 VpluBOiPOomQ+bi4Tfjrp9QlhcpkNyE2egsz+DLy4gytm4IRP+YRnViAd1ZaRvllaH+H f5Idg5PXJCANWPoLXaLhvHmrpnJZ7RproIk= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-7 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:07 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:04 -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=2f2oZ5nTFhXCCxmD98z07ydS7myVbDZ2bdmu5+ktmlM=; b=Kw0U5RxaNPqaqQhMTSSiudcrhsfMkinBShFvT4HbEHKFr98s49L01X4SqX1vJkMX5c4Z7q8OkhzRSTH8GYrDuYS52mcTq56N8mgh9kTFqcmh9+VDDWz/6Kzu28DjhImqm4UKb1CcCLbkmaGeiUEJnWcQLcd0dx8V8tWaGYxQhic= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:27:59 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 06/14] bpf/verifier: introduce BPF_PTR_TO_MAP_VALUE Date: Thu, 2 Aug 2018 14:27:22 -0700 Message-ID: <20180802212730.18579-7-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a96e1209-e30f-4420-75c9-08d5f8bed242 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:CwYIRbp+kyEDKZEO/BAgVDORvTrGh/Hs4GP31GsWgk0a24bkrJfWvvCuqfLlRzSXgyWd5uhNTOxrN8f/a3yphDLe5+F0ck8sRhkyrTXV8yuvCehwEBVIRy7yr43tkokJMplScTafx5PwOtV+UIYNS/HZeu920K5CDAFrYQB7jxDCQLW+XCwNh3n9SPhgIHdCukWbhVlnmIuPN9GfeN6Krm3LCZ9/Xj39vzLl4UJVHzvI6QCTcVIR4L7W5SrYmY9/; 25:04pQUIAvAhdfbMVDDtTvnVXadcYxp10yioslnzXOV7f4fCLzt9Kju4MCf6dvX/ZIsuzULkpaHY+GFMQOW3/Aj6/G15vP9HDxtkpTTd3U0OcOsco5p+KpCY5kMmX4vlKbT/ToBi+8o8ePgA+Rv6GiX9gZ7p2zZ5rT10PeJR2XlUaZiKqBNFTDrByvFQKz9hytMgH4oZkXLWDnPTS2y2vfzzdZGlLR3XLMZSfSNbFTHZL++9AT2FdBF3dYv9ntTKh5wpCSzS0iYy8zBCl5WH60H7o16VbR2iGbfjr3bq3e2uGticY17X15eaKyPwkqZyTLBT0mCJlqza1ldBRAPFAtkw==; 31:OBltxzHTr6XJQ2nS5ciZJkkxq8B5GwCPYxaN7F2Iu0yeORf9+LqQcLbH+kuJ3OGqVFfnivBUGo/ETuuP7rCuVKODmOIy/pv2MgU7CyBCJBhloUhhi0MQdUwVDQxvKE8yrjSMwjxDUF60ONrVhxrGYABMzQswbEDJsNk0AbrixzOpnhh1BBaHi3ZL/OsTURPNef9whxKukDzAovvji15xHdzSDwPlZrPkCj3tC/UXU6E= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:vi/i+pSwsLW758vwAS9HAetP2ACOLrGKhlO3x+hAXKcmtxwDio7nqV5cyAocAfZika/yynToUwra4xLna809B3CHRYsjAbau0Gq2mdP/94mmr5gkc6sw3GJRmGvZCeUdlXLKOD6qhbIGupM6cQ+ANsr9ghR5a68Mp76qiqNkwmD50e3d+jJ1/9+y7iXwlQYZbJwqMdeJ1P7ZdpXLQ5CIcWZ+aLYtFXFvKCS9zgu5Rx+AyGMD2GiHS87IQYAblyRolIe6VbBHhk1wvlrL3RXITEAkFDD1tfAoSGDRnNDiiZf2OylsbP1hcvKJxSWNwpA0nhXre/kuXUOySOjzPv6sjraqMGswNy9eZLiH9ePSkoSMBoFHaAE5yhxXR/VM8pcb4lX3LW1C9kkRZt0kKuuAfVA7QABzqDYbSmx9q58qUPYwSaO2K/dVtz0m+DDRxlXUztez9L7i3dQEps5+j+LMnQqDkAfrl0R3chflWuoDRQmybSP868YRdSC53IOmj7bt; 4:iFp4TDpNWhuGDbqP1t4u6MYIhUy0HHnzsjNPbERz2Z9EUnJRPJK35aJfJv+ZpqwGowQS79vsmG95kAQq6It3epcXde+6338Tqu8D6P2XFDFppXrWz/TXopaTfgil4IFLfNY2pvfjMMQNmdN79SAQ0CRE5U92reEV6sTLhzWt/Mr31Mi7VcuOwMPMmC1I+a9WAwE8U/OFwzsb9mpbWf5umABQXPjlgrBnBZRvmrZ27DV/BelbI+FxJbbTbhm7MdNEWAub7FBQDbmWYFX4fs0Er8h9rKnPrI6Y7LPCRAqP+Hh0Mlq/bvnOvYcu7fmQtAJB 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:pO3yXLksHKO8Kk/vTRq1t7wVBSPrVyp+nS0AV8XY2SR173Ll0wLKiUgfyOE7nWlcl58huYXI7bLod7FD0MBn0njA2FXkfFd8Gypaxw+BKOqpP60nRqChsR0w3lolL6Ciqy/vIdsmL65GR/VjcGLVTcmf6kyZnV9/GpenQoJGDjup7CTCWn2qESNUpF/muEIYvd3aPKjwv/oQX6zkPK9WOi3d1YnbDFATB2gNfKy9w/GE8L12mgJAZsx7pyOgRs0L/R7Ca1Ps8kgZQ7EPXtydumlJqkT81HUV9AcN7KK+VERWPX9T7FELhXn6uVip+ETMF8/4rh4ujK0eSARHcgrYDbnfGKZo1NjIDBZFSGqeddazIXiYeNaotR/joTdUbL5hK61VH9igB9yZe6L8mp9AJK9rfHjT8dwLU/kCWCHuFUztjpAYc5Ytt6R8XF7ru/3pTCihsu8LUNRZ9iPXihZdSS85HC7fK0u0O/ID+ZVp/OioEgvHe0ngSw4tjmXPl1MQvQssw6FXaKx5bsfJDmoKYjRZMaKiT234AsdNFkYjhwfcOjldLcJK+Ng9S9pdjSAmiQ14VysDapABoaCmbLdXDYD6vcAWpiV1Bax4eBRHe+yratK7D5hdZZR5mrVKik1aZqbs8qf/ba2OZHqGw4+XzR7AsC5Eud+qu6ahAPpQujfQsv7ArOkooGfRKQdcjtZ2AyXZlkRr+zwHmtWpcZeIRLBxfIoK4Q/IcPD5NNF83qsvCKkb3Lkg8R3DOsbJCQytUYj5dK+rgfxkS3ml/3aZNtXkQ9xWSMu+YWnl6VhL7o9mrhlDS+UwV3xWNJ8Pt0A6GFbZpzfJL7bD+EkG600zRKlwP05/DWhsbyZGCYHL4xBhdnfDt3Sase/YzIDdQ8knYE5PbVKMLSm+T7sT2wEDhR20w/SPBBmSiLrWfEUbb1ppb5jUAdfgS2ZubWkroJuWTTJOmVhxkUKIN2yZfzcJPaC7MdnxtgdhEcGqTJk2jcjAVAZl50I4zFoh0fYI+Qq+cCtXvOOphiW2tGxDzAaoq+tSVGh+aq6g1yKlrsCWnHGDmYj2GcrDs4uR8BV45BDXLqwXbKlVcWCFK1o+ssBnDE5RTyt8SoLaRqOSwF6v6wYtkItb4p+q5vEl4N/buj1/f6JC8mSJCS+IxOp13+gLyKuIlfOn2m+toJbHl7JTJdyLnDvPzsr7l2P/UxnNjTK/G7sLPw2Yo0Dr4Uh4McN10kB1Vb3qMgCtolqOAib/S1//cT+UVDc/8CFvj8apGlT/3ythiQsxbo21SmV+/haO/A== X-Microsoft-Antispam-Message-Info: TwEdQ/X7UgyDgdRbta8wO+Mb8S8EqSiahs6dQQhDqHqbF/8SOlB/2tK833XVnRhjer/sgaqCVzn1XwOTohRF3omSRfbfxW+hpx9JG/7WLBMFaSHGdbq/zRpkKoCf/mMSF7L/olS8bVpI5Ri1DeOyXFMC34W5IHXV0fGqQLFIVf587ygz0Z5h6kaxrIJBaU8DBHb564x6XAwomYn3UtrQh9kVgpYm/jq2fsfBihFlSxpi0xy7HYFJyNky74/YuqBJeIRmS9Ue927kni82KgVnLV1tVeFWHrXab1e6e0JqgP77gG5y+Jc2YQjBke8Nv0+GXbHrP2INdYZ3JBdjkTgHw7yLVCx5/KqYn5ivTRofj4U= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:CMfKwx/97BaTXEHuzv+3jEcXQVU89k5SfOqzWeyi6lmaBgteeXp5kUX9iUu7vpTeoZa2IDgSKwj2H4xl8UKj+vCyQo43bXa7jV1e7/aHDRdm/keMpexTIeY1ksjG+peymhebUYyGgDTF4i9iZhdvpGrVwkdsh8b3K24b62LycCqpPY3f+h6mfAjT4vCkoHv++wcNIjCQsxFC0td8jbCckxww4AOv2dQdfBX2ATHIn9Mv3jjLS4XP2L5NczmNAmGqS5Ab4Q0MyQCAp/a5XyTxIhK8yScnIeSSdYiQcVGphK+1aTMwdf0dr9UXZ9HOzQRTNczU0I+QH/784TQvWj+GsFJc9pgZeyuDcI5XeMD/gy/AMCmqP55q/vKUHe3Lv9bMHie4Sngi/+EHuElUgx71SplCs7/LgJcxbRzmNfVASGPZPGqvhIyGkhByJjmxlyhDkPAUawPVnovvN3PNRqwKiw==; 5:2BmrzMKPkPggoiPPI0znOPCi6MT2ntWQUZ52kJUjok2b6GMIPDzChEwznUW6/4m6ryf1oAkkQx+QGzfRUJgXIM47GztkDp5kb7FkWmhZkCnU8vsZ5IwoFJLt6mU3lP6d2ZRX5Fa3XWyRX2vqkxYyILne3tzZ5/giGnTRvCGLPC8=; 7:gfVzyKPLktxLu1IZqaQTUO0uqDAfZEPicAG6G0+fQnZZjRSID+e8EUzfqCYmpwnb4g9Dd7dNHw06IfxMSKe7x7PhmR8WzZWjU3Z0pLIskTS+EqFwnP/JZsOb1/JlOWQjisJMArI+Phsuy7lUAb1AE248HC1rl6o1NFk9D7QnCC5E8RCrNQgPJ0p+/ziFFihTZKQQ8haWE764I7JWQO3yhfajAvU8y8iWLRzBBmrUNP18k/yzzonta608Ho9Yy/6k SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:7Bs5+Jnj+4IBet4eqfHVcOVvZ/jfbeyglShbXm3w4Deb0/xXKHVcVieWhuWbHDUJOLiriikWUDR8XWbtgEEJea7A3JHJUlodbm7L9S73K4bAm7/2gne5aovDBUapGs305UyG1SfnS8gNmBLimVNtclq8M8rXC4wBBjTLaXNDB6o= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:27:59.0842 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a96e1209-e30f-4420-75c9-08d5f8bed242 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org BPF_MAP_TYPE_CGROUP_STORAGE maps are special in a way that the access from the bpf program side is lookup-free. That means the result is guaranteed to be a valid pointer to the cgroup storage; no NULL-check is required. This patch introduces BPF_PTR_TO_MAP_VALUE return type, which is required to cause the verifier accept programs, which are not checking the map value pointer for being NULL. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- include/linux/bpf.h | 1 + kernel/bpf/verifier.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 16be67888c30..ca4ac2a39def 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -155,6 +155,7 @@ enum bpf_arg_type { enum bpf_return_type { RET_INTEGER, /* function returns integer */ RET_VOID, /* function doesn't return anything */ + RET_PTR_TO_MAP_VALUE, /* returns a pointer to map elem value */ RET_PTR_TO_MAP_VALUE_OR_NULL, /* returns a pointer to map elem value or NULL */ }; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 7e75434a9e54..1ede16c8bb40 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2545,8 +2545,12 @@ static int check_helper_call(struct bpf_verifier_env *env, int func_id, int insn mark_reg_unknown(env, regs, BPF_REG_0); } else if (fn->ret_type == RET_VOID) { regs[BPF_REG_0].type = NOT_INIT; - } else if (fn->ret_type == RET_PTR_TO_MAP_VALUE_OR_NULL) { - regs[BPF_REG_0].type = PTR_TO_MAP_VALUE_OR_NULL; + } else if (fn->ret_type == RET_PTR_TO_MAP_VALUE_OR_NULL || + fn->ret_type == RET_PTR_TO_MAP_VALUE) { + if (fn->ret_type == RET_PTR_TO_MAP_VALUE) + regs[BPF_REG_0].type = PTR_TO_MAP_VALUE; + else + regs[BPF_REG_0].type = PTR_TO_MAP_VALUE_OR_NULL; /* There is no offset yet applied, variable or fixed */ mark_reg_known_zero(env, regs, BPF_REG_0); regs[BPF_REG_0].off = 0; From patchwork Thu Aug 2 21:27:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952965 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="rqb2Cs3l"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="UpOdc8Yf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNb10p8Rz9s4V for ; Fri, 3 Aug 2018 07:28:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732272AbeHBXV2 (ORCPT ); Thu, 2 Aug 2018 19:21:28 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59164 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727262AbeHBXV0 (ORCPT ); Thu, 2 Aug 2018 19:21:26 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUh012185; Thu, 2 Aug 2018 14:28:08 -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=qGtDowD9XKbzM8Jae4SYFfVcCSuFG5sG+sEXv0fEVv0=; b=rqb2Cs3lBB/vrmEwhHH0iChW97zYL17o2ZRlHtemdglQtcm+4szPSEXNEK9DF0TP+OV5 krFSRcvSb2ieds8LaIYbqWHHq2wHxTCCJ9mUwJRpA8tSe9Vdx7gXVjV9u6F1yZiDUznl +1SmBrcxq8KDe2lHD0fhLJsZX5Yo0bbloao= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-8 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:08 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:04 -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=qGtDowD9XKbzM8Jae4SYFfVcCSuFG5sG+sEXv0fEVv0=; b=UpOdc8YfSeIZfPN0i1KJdIqir2EU1BSeR1IT3NAJUNFCIUVgMWvOHMA6IE3MSuNOGormupgvxasSaSmiGW5dNEavhZz1/gRSto4my/MQuox2AMGdLtjJQwGky1yI/mrIFd79+BhJmT3TRroMlcbvpyFYisVymfHjaQcs5/cKt1o= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:00 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 07/14] bpf: don't allow create maps of cgroup local storages Date: Thu, 2 Aug 2018 14:27:23 -0700 Message-ID: <20180802212730.18579-8-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a85a6187-2645-4c2b-0715-08d5f8bed2f1 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:vspuHGY0842SjXLonZpaAbNkrNA29jNyU+ryHD0ehqq6NGzjRl/9PJO+aZ1bhsfDEMuA0P2FwrkqbUrylFP/05yJ/ifm5D+T9gK4CuhgY8ruC/FW/n1Xx//0hjQF48YvxoG/+d3nNmkwpFXv0UuXnclxIuh8pxltg3EZtzDlJsPolJLyzLNi2DXB/KQSgp0mKYHvCc7qc4Ib1RNwxUxYuyebPm8y2XccB+kCDSPTUYTPaHj+qoCp/G3zmcjBp80b; 25:Ft8P9cIYUAA/IzjvwIiOpwOyhs0Q5WuDloGqwhzVOW2qWL6AUt8OVZ4Q6WBlSVRBSN67a+4SOeeKiQPpx+LRyLsHwubFPxV1Kcv/gKO0bEWCmWvThZGhwKaL0/vIBQOfFnkYBzCGR+k8BgtiP7wLQbhSr0uAXFO4g4dmQTjVWzM2gwTxGlqNue/QzChC+gG0Bc/aMmSF/S38f0Xv7Of7CPb+o2C/ySGo8atkef3LgDOBnWs1vhdjvfTqHqV+g2bj6XYU1LMB8blcpJilQQp62L7GD2h/NCEVuoHE1nyjEK0SJqhQjjSNPVuQOQNextxDk7fsRWWxWvdSsw4GsJe4JA==; 31:S1gRHop4SZV1UAE9szemqCdWDOORFAt6rx6cjyO2tiDEi68/IMOONDPGsqFXfgao0TyZ/gYk+oRjiyDXXc62LYJ4yq50YEN2MFJNuT2iFdzf2DpbD5aL6T/WjzGoqGB0wf1H6wrGFTEjaWwFJCciBwFOEBqLgzt9ErJt/ERwjaJ71N983IKHbuQa69pEl/8mkXpoaM0L4x0DdRKac+vdDrlbI0gdhSg7+bPD/jt3bqU= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:T7oduVqbx5lMO0EtqCdv84ykRAmRKkq7MnSM7YF2uyyWL3RA4Ap1Wirs4pfYuA/KWIEjK1KWyKNAkA5uallCOD1pDQauoA9K6lRAv2o5xURKBXpu8FVRIEzuemaSy8T9K10GkFYz3hd0pcQb4sNosKiw7alybQZqPczQNoCuwVTuDlj0ogsenV2nyzPsfF/ns4idyTt6+3ktj9/H4brKutT9e1KaOQ9dClgoISuPt/KJYN9FlNrzDY8TeJauW1eVwaUM9hkcIXY5gjHZ9QQw0iDbgZ/lSQ9NBljD8bxwY545mtXdn6l0HjtIFX2AHpKaSzkax5I5rKPQ+dJTPvtp/pB4DsHHXxfG3gN7TsTTry93K0z56ddXb8Y81KUd9+Mjz/whyz62U72hBGiexXjM5nmQ9Lo/CNYCLU7A5nxaDsENTUoSA7QuUbg3pKthb9gzOdtr/tHFZqu+746MxXAqEn3ikzNQlAXfSgeK7AnBY8HV2/90j3NntY3rHFL2Mp6r; 4:RVO4SVr/q0xLnOwUNnIsJHlSvXqFHEC244F4moknXvNFuW2kTx7NClGQOlzBS6BqQYPehB5xRBq7yyfdZ/Oc+BuCp8QAkoFs7HP1yHzt7PQZwSf44XuLhKNF8YlBMuE7I4ChLa+WPJsW0hI2vt7wCiSFqBpCTLAi+3DMbfdLI6q/nW2YNO8k64cHfvpEfQCOD52YSDwkyg4NdDK99k+UWFwkdY5KUgf8TaBmPnjmERRUsRc5E5d3Ld2N5bYB83KU5LUm8OWgtQr0TD2M6vatsCjNp3tG8d0UL2G+2igyXZuRTp14iwouLfSypqpwVUKU 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:KrXFQaTPnvAa7bKtSEjXfprcjE4xYgqxLjuwnBBAJofClB7RFDnKf+PCyxbCz767nuavchtLD1R2874y85YhrcYhVQeDin24ybidVl5Mr34g20vETlaT5Ox3CTMId2qKlrhAV4CeFAaFvf3yuL4eG29dSEYv3iRwoYMQAQ7atwR/b/cp5Y5Oxoy1jdTki+loE1NBHAf/rbvbjmnR1CEjcFEjYmR6vHDGGhKGCEXZCY1O9x+9urJneVgUGcxh11wGM9eEYD3j8iRaN6cG21kVlRgaNzT8PVixO55BOR2MWYBUZvt386ngvfJsX5d0j9RDg6jhTxQH3OdL8BxwH8/Y/1wcJxe0wLw5jz2yiwhlnKIn8WLSiMZcQFeuZsQHj6CHGo6PEeoqNESEepICD0YJgv3OgvZbQnbeDqQ9gpe3mksP26NhJjp4n0FOv4aH4Z30M8tpA7kMDKTWGLszTEyXKVItwAtlHG3SEvZojetVV0d6hLZEINoUV1y94sMZo7mOkQwKM1thv4ID4aQIgbS1CBsNtuIbdhJfmdgoTzwIEE1OXd398aqWUnypyx91ZyQPw8enq+4n05PuKAp5rFZitVItzhIpbLSRWd436NOPhyXkVFTE2vlLgK3/F4hlqTlcC95AeuXnXrR8MqViiSnIcr+B5E/NHRsZgVvfYe3Wom1LADbG1QJPnU+OG7db4gKwx6NGfZVdaac1Kl8AZC7v2Qbl0IwXRW004kAxNGuLa5i98dmGt6YObk3/PHTvvAbR7kX4CqzPXIUE1S3+NuYgkdXLa0XqCINXAM4jDRbko2UUpMAIqSQni5MOFggBR/ejfoq9YHzGrwx+FUrpPupB1AgS3/ekCdpYrRGocDRgXcxlYFx6DZQC7NM5L7iB+3VKAjFxLpCJH1nOyDYVqll+OgRKy4FJ0SH0uADZFjbGU4+cqC1MuwUpj6LtwlMq+lWKoUhnv+1O8dWzIRLYQNqs0/gZTukbu2Gb7rIRisS3XXqM0nqSf52Obo+u7Ds1Zrnta/JP1t+53RDocvIxQ0DuGphAtng2AB/m22orUiezJ4CsfMje4kpSZo99oqqgSCEDv5hQIlqPSzkFIPzWWF7EfbUP7GYRWUCZO5WJfAbCLNyaacbcOZqzkWn50VTrBO8YLMvYLWCYByPtSIDQZcRE7xoDIp6dGgrAYUDqgoO1cW/jxPJyUqd7vAaFmVdDRSoFXJMwrfHtt4wKnhfjAqLZY+cyqzfpoAMOvtKhKgNdO7n+kYvXCL7XPd0h+Vy6GYA0dGJODZRNCBuhIW4xwNGkmw== X-Microsoft-Antispam-Message-Info: oVjxH2Hlc0zGnDpEI5C+Qy6bNB0uFgYAiD0urlu9F2ZDM5ZNYa4QCEjqPutDURVVxkPVTbCmVHsbniibj0eCc0mbmJlXYqS6adESBzwApcn3Au7VJ/MVBpwxJEf6ZcmgGZMIKl6XYIm5xNYKVrh3X/pzlvkX3rzh0KH0ufQkbJSlh6w4rHXib2h/skuzdorV0OpCtJO380lUagASxmDQuCTyJjjGWYYS2mHLzNzB/DXwGpDLZxpANnNO7Xp2tl04OB2wfZyTkhw+53x60rZgCzjxyAyMcOCfFrusgATkN8Xr14KaHYUAQnvoTpRzpYBDOV3pBVMhjTmU/CW3iIx13whRpEkdhDOfgvA5Sh7pGiE= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:8gS8ce0mTEqEmhJJHttolae6Zpsoh77wrWDM4vjarfp6VmafJ0n8xmBFwTFWN8qdJIflme+VzefpL6k21NX2U4tzR7vyggbWYUW1qLLIaq9hye5KejOzDP0PUp7IHCzPFQwnU4hxJnev+96bib8b/JJRfml7CIQlEtqoMoE3TKgtIeHFvECDB27kmPTttQ2EtzQ6r4/shg6B7J3i6UUpwN8ZZk26PAG+yPlC56FyZ7BoNhsmYXvLOQRfxeaQ0vRsJog/1/6pc8tLinG3RCdMxD23mf+5oCiXxrN8geiq+7In/FV0SbiOXE3CLOdS9v+F7QlKDeqsqECRb5rVr52EYnjyZP2LawHfdFoPiOGHj4So9gly1kisJzYPR59EaTxOtPDhX3j6GY+UVA/xHt8AbtQsvyHmBk8T3HhT9TCidYIdEfJLo/ZPU8skN2sDm/4iQSyVyxgvpaCxMY66SUCqWA==; 5:YNstZiax4nh+qoPk+0YcnPuocOOgCB9Iy58uNCR9H2BojO2j1Zsf8GYv+uqqg61npZ0laF5xN45nbyb4EGfeRzfwFl5S71LShE0HZfAa/0KlYJkl3z151Fb/O5z0FQfHnuEOghnP4Hs8Fo7st2RJ9v5540G8igacLVnqaiAaroU=; 7:ygOWIANcgHWHO37K28DfVpunP8krnTzmL748N4hDlgrOFKiYK2NpBGAAH6iOO4z7iFnZ/rebZ2qR68ZDM+fOZy9J2Qr6jmRG/DVJHn8qPJOc4T3+xN4wM5TxC2qBhaEBe8pbViBZe9WUKDIBzOimlDBfzT1yNn+hPuQveEUOi3egIDCWmtfLS5WgkR5bWejRWGMoV+X70QKPpb6Xz1fME1uQGB1WB5yG9ykr4CEQyClq7a27lwubKXpqCkN05Qnn SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:tPWDH+77d8wc0y00e80S9BotVGo9xBr6lQ8oovjG8/c7GNQm9mWI+tnTe8XKlwHSZXf7JJ7wxXyfUeWYjyMwEv2QbG6LZY5xd/0y8UsUaGtTQA9aiUcr9Y5TyTN9WujACuvLHaQUNdZKSADRhkM47jE9AMYSe4Jpakd/fcJVFtA= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:00.2392 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a85a6187-2645-4c2b-0715-08d5f8bed2f1 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org As there is one-to-one relation between a bpf program and cgroup local storage map, there is no sense in creating a map of cgroup local storage maps. Forbid it explicitly to avoid possible side effects. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- kernel/bpf/map_in_map.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/bpf/map_in_map.c b/kernel/bpf/map_in_map.c index 1da574612bea..3bfbf4464416 100644 --- a/kernel/bpf/map_in_map.c +++ b/kernel/bpf/map_in_map.c @@ -23,7 +23,8 @@ struct bpf_map *bpf_map_meta_alloc(int inner_map_ufd) * is a runtime binding. Doing static check alone * in the verifier is not enough. */ - if (inner_map->map_type == BPF_MAP_TYPE_PROG_ARRAY) { + if (inner_map->map_type == BPF_MAP_TYPE_PROG_ARRAY || + inner_map->map_type == BPF_MAP_TYPE_CGROUP_STORAGE) { fdput(f); return ERR_PTR(-ENOTSUPP); } From patchwork Thu Aug 2 21:27:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952966 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="YzbupWVD"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="V8uuVres"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNbB70XSz9s0R for ; Fri, 3 Aug 2018 07:28:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732325AbeHBXVo (ORCPT ); Thu, 2 Aug 2018 19:21:44 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59168 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732190AbeHBXV1 (ORCPT ); Thu, 2 Aug 2018 19:21:27 -0400 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LROUj012185; Thu, 2 Aug 2018 14:28:08 -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=HkjTY9917jaa5vJngEByKtiskZT7PS+Gpyf3N6mx0yI=; b=YzbupWVD5sxuQoh7q4flRllpIVGv2iRPlc2MgGIoEhXHxLyG0JVJS1KhraOz8oX0Jv1q vdsXQpfNaERPo9JZGVZGhlp3Ka9FpgkTPbnTvHv9dTjHxmwWaqMkGWLkR0L0GWKgdjMM d2VH3Df/zLaWCbu9X/Mnz7AwiiKm49INiyU= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2km6jy8nt5-9 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:08 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.20) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:05 -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=HkjTY9917jaa5vJngEByKtiskZT7PS+Gpyf3N6mx0yI=; b=V8uuVressughEmM6cW/amrYclGkcWcAKCKaBmZLb043HpmBU8bo4GXhXBOvUQwQlIOjnlitSMWS0JIcwW+mZ/Xrjwkxp0D0wlWsH0AFpKPGsdLXKAiqxC4OCuYc2DJM/y+2qdF2hq595bfjTNPJ0tfxWdJnBiqSkNG0Ax/TU0Ug= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:01 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 08/14] bpf: introduce the bpf_get_local_storage() helper function Date: Thu, 2 Aug 2018 14:27:24 -0700 Message-ID: <20180802212730.18579-9-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: af3314d3-63fe-4e52-aaf3-08d5f8bed395 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:gexw/ak/C60HvcKBium6x4nlGKAAK6VHXFQp3rrGE/il8Db488Tv9SpjeyJjPt2Gaeiyh6O4fVRDYDct+UHX91GbHDUrc/jtesLRt1FPkhO1NmuqgGjVUlkdebD32bpfbJ9pPN3LkHimz9wj8pTdu5OrR8XoPX3kMIaFVHXuywN7jdpxVNLF6sbloOJDdBNSMCQxz7nW1pcyLVHYfXWFc9M0Xo7TvK99L099Rx37sxonW53qZtm4/C3yd9ug6Sv/; 25:/7PKNn/fX9Prm+5usYkrAPSj1rT9f+nnz/8RihurdSt+u2tEnLiS+9us2bldHUsMCVuyI4ukzEvBlx5KZF6tEDeA8J+HKW2MDHCyXnZKyXMpsOWsJgcFjRgmrPPJohUqBzttKlpHnFcqnbZ/2wRfmk3AtXO/L5NIP+PwBrgI1WF23ImkgUM5ylcWnOnuOAXIUweG23cwEkOZUmUNcGitcQtabwvcFe61z43UMMlFN0PkNvpXgAxBHq24oG2dBbzoAecNJz6i5Umb4dvgycmtPSBB1BiQ/iGlTi8GzaNhLfnDd/0vFQrbCHniOhH1tNO/oSUg51ycPz5VL5H7x5Wo0A==; 31:GjMFAcjPSSn9IdhKMmGCbpg/Mt3fTXz559IjpOS/GEA9EN4OlIALB+z01SZwrCT7qpwxnbiwtTbmY4AX67RcOXHQRirlo/kaOR7SCJVItuWMcSzyWqonqZpdhYX7p+f1dRueJAdPBw9y1akhH1vgld/nKqaPafFvQS0+1AbhDFa4p54sa+sXwaoOffNQ4Rh4B2BsYViSMMYu4oxY9dpi+RdIOwUKd+IiFFDAqyk5wl4= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:OkcjnixXSqtw5cMKLumrW/s6n+WoqRSFTIcpRJ+V6OVlE6KoFPvgJqQoBeEu7h+WnvLpVTSKrcoiWX87ALyyp0SneTgZd2yFfSD1Jl3DycEWN0s6WvUfNdVeq4FSB8cOtiLMjBOCOiag/fMFQk4xveDOtGu0ehcUatA5AnukG+lCtnrni8pVt3M5JaBu/15YIBfyvOBJk6nHzTiaOu9Wh23xNlSEjsQgr8aD73VylqosrfAXLHyMvXnLa27269EFbh63S9HzU/XnU/sOUy/H4YWch6l0Wg2tlEy5vk8Xi6JXh+SNJP1BqEl66ZTknlJhWZ2DSS+KyYSyalynKcU+TDC5+l+FDMqJKwkCAXOXnaWlV/OPbYGzVaLDyP64NC99tLp5aLE8qmS5YE9qgIVEdG3HftpYuhNLPuOftvG9cqN6gigb13pudAvQPYnT0Oq8kdDDmtjnHHIBNYcNy4WlIOoO3DMU7r7ztqokFv2P57t8GWdDP1rAoqQyaxEAsYzU; 4:/U/wEDMVFAMQAXGafDXL2pRybS5lwpwJqs6JPTPrsjCTydzazELVGBzdotYZ8/RIWNYgbWh7R8+WdI9sGIVt00PjYlywclpgqbAPgFmYPI2ZzJi1Sh+khs0fN0LhJniwsamDrdScRHCGhxLTOyUPazlwsAD11nZwcUrubdJAMJJXnnbVPjK5JSGsWiOuDXofFv5+/mkZdlxGaVP//4oCffXnRKGWjy5/5kO75G7csaZpJNJwHJSjaLwF4zgXOGEaqXvkIK0IvKxI4TJ9k/4AgwmOEIPEMA9E6pv30Sh3zZ6/ve5uK1/+YZ6774aUX9H6ENvhy+WBOhf4uLHRR0sbKfMzULc+eKM/iKVNPO1z+xQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(131327999870524)(67672495146484); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:LTW3dam3hvizhUjKDP4IgutAneov0fb94uNDjtzN4us1dfQdcskCxCsmYd3hoACbz+N4cC5KrEyTlL5proMB6wzZezRsk37AKglH6JLIrHZfpoV8xldvO8jahVmVxmH32X7naX2tu2MYUDpejtv9TUSQR5t4Cl6L65eVmk6hWKcQQ3Cm6tiJ8RI/k2dIWcKy5qqrODP5EVqE1ZQCFiYUQgBWJJr8OxGrEVquL4vvZ5dlr3lUsInSaefPFWhRG7x/0s5QZ0S8cOLisqnKf1ZVMHQ2J7WDGyZTsA2i7CHKgSC3L0k49lrVJUDvqssoEgLMqX6qgsXIYxMAkz0rYpNY1JUvNuDZGcRjKojso9u00nHepVCTg2JfNqivyV7j3XvWA6Ekc3U8Zww7QbhIq55JGPvvuIWjgDEeqsN+8B2i1PxEOWikoOpImFMj7QBEu/kw6LCH9LCmZ1dPjq3T/1nP87NJ4zXggpJYfQjWc3DDFh/JhWkfcEhKE7LPScbViOY0ptJLh5UyLEHAIapO8LFDv1WpCpXLyrq1fQnrE8yEHxQih1UfhdflnzwHoIa2gcXXTC9C975QnzGm5kviZ+W9NcZmDujd8NGnJH8QE9OsWWimLE+CkQHBAu4ytCIPfPGLUO62UpG6EFvsBHDCnE8HB03SJPvyeQEm7hagUAhFZl9F5GFpebp04KkMdK71zoBffoD31MRYVcdlWOdIuR0zzQ4imxjfvQLyJud46yR4/p6T/mBNSV/K28cGv7Ve9N0VWknpRKZ+kwl8UMta9WAs652NNJuU6tRAMnNXeXh7VncaVfVaOAnbg9hCR2uTkzn7KpKUACjqUlMQcZulS77shaBiFF4d88f3PgFcM9Tc9/0bfIuRtQi3qrAJw2iy7zk3ohYNtDLoMCw5lbImMfk8wHMo94hAGMMW0ld3irvinIsykymgmTYfeonKGkKl4efXbuOJ40kNqOK8EptQPFGeyF12cWx5nfrZvodTsA0omzv7iO266PKhcEwdoem/MD4d4t8LqUq9myXYPKsYRaiV8JIUJuCMqiP9abmX+Ke3u99do5KpxpL6Dn57kXe5hIBCWA3ODlF/Xw2C9POpBjszeOYERFIpT96hLlz7ZarKR99vpp+ZBA5ITlzcMi0F0ZRcrJlquwhlgYQz0G389bg48bd2e3it6gMJKwt+0b+NK3xm3mJWizc8HhOMwHQBrw5KaAXBt+KugjV5XKSHQaeDmmo16qwtKtZdrT6nRb/GS0XXeytC9sPR50l9ZEqs6YdAxYbQfx/8CRjK+jghvwat9A== X-Microsoft-Antispam-Message-Info: J898rNSVi8kSUtmaOQvoTrMCY7xGRwEkFhLZ7fHuI7wwj/LE2uajjKgYICzzSE+cWnHJ71EQBq2rGWMWKALmaQfL3Bd1V0CnkUHONOAJ0G4rqucQ1HMjAKPRsakhnElEd9n4jKEyZDMns12ZWSVVMPR8EzU7SYDGNtR6l++5/z0qz/SHgou7kZnWEUvQDUwQvyUo4d2dOeqgEgmBaXJqOI8CBBElazD/8g4/olafqz1nSYAMKKMS6g295jteCw0uc1hlst+1w8O1BS8KAdYUyXC1LOVUEuxt+Hd1pfsCXdK34nuA/+fjZPglx7XJlKEz3j8foeOQHT6K1Z461iQmgOzzpVwecsjIjmlJOGlaEUA= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:qjDYFcIZ2AnNQepGNAy7LuziTS6GnA6DkA4QI95pTN0LfysXpS2I03zJei6drBJB5ezHt4372Qcumz1lCzkEbIfnhghJBCFE9esdpv1HLjrMygDTqUQxqdkIzBD5YbXzu3AKqyLvn2XFss14Bc5WX8OjI1oCKr5yD+uwagsrwbxc2Upj7/Tb45kcOJpUQUMWiF4cjwQwXid13OoCqpVfFfbkzWgABioqMcxzPN60OGGzFfGBK/Kuo00XUisQr+HQacUAjxvlolKhqjX+x0Nm7VPjC2Zdq8xAyxMOvqpVRUGnFlsmTrH+f7fYXvAomdFXSEuXEXi+0Dp2e6Uu7EgCAVraWgcdujd/xXouL9QygyVkMNS2fexhaZ/cvTYfYunl41YFj3hoPlX0AHg4OWSnKZQuLG17qssFWiCVEZHN8X+GDCLSssSEErQA49gH63yYjvrZnvn/DaATSKOtPBQr6w==; 5:0/MbLhktja9vY7/qPzmkwLC/pTSCU1cx99fdqK5ZHpfmrxjpDRO/4Y47qeZzKMwRnM6X1O2hSMD3QiOzoUeIbb9siuMKmJgkK/fjXQDrWkUbre8UJPQX0THqQaFE3qQk86hsvMnL9j6S5NMkoLWxcmk6oE+cSZGO1Ni23sQZW84=; 7:kSb1yOVPIgjU5F6Ng5TIHzNlW7sS7ZZVrfYL5L5x7SNulvyY1Kp64qmT7WF3JIugms4DGposmJDYsPxkBBKnqGg+J6b0PbfZrBmnbKg/DjrhCmHxuDs2zvW99l2BnTkZxM/ofB0LMq4JcqC4r5yApjjhVvn9FXTeS7rOKzuFFULD58A1w4L1+KebMzBUduedEimeERVlZOnGThOtQae5mWnc2YlfNc3clqB+9zcq+/3W622wBPR4vug3fy8UC682 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:WUiPd2OyqnGK1rMeSMPtzK78nV0E5IkiW1kZqPLuOFIZ7uro2nKgLN8Hi1HO4NUWjn5lkjtoj+BohE7f8QyD2GZltTxiAhMoF6QG+L+dGNrH83ZiiWO3YymI/FGO2M9H9j21JrH1EUUaE1YdVdSVjrEvXru6u+ZFqd9xs3Zolx4= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:01.3092 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: af3314d3-63fe-4e52-aaf3-08d5f8bed395 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The bpf_get_local_storage() helper function is used to get a pointer to the bpf local storage from a bpf program. It takes a pointer to a storage map and flags as arguments. Right now it accepts only cgroup storage maps, and flags argument has to be 0. Further it can be extended to support other types of local storage: e.g. thread local storage etc. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- include/linux/bpf.h | 2 ++ include/uapi/linux/bpf.h | 21 ++++++++++++++++++++- kernel/bpf/cgroup.c | 2 ++ kernel/bpf/core.c | 1 + kernel/bpf/helpers.c | 20 ++++++++++++++++++++ kernel/bpf/verifier.c | 18 ++++++++++++++++++ net/core/filter.c | 23 ++++++++++++++++++++++- 7 files changed, 85 insertions(+), 2 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index ca4ac2a39def..cd8790d2c6ed 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -788,6 +788,8 @@ extern const struct bpf_func_proto bpf_sock_map_update_proto; extern const struct bpf_func_proto bpf_sock_hash_update_proto; extern const struct bpf_func_proto bpf_get_current_cgroup_id_proto; +extern const struct bpf_func_proto bpf_get_local_storage_proto; + /* Shared helpers among cBPF and eBPF. */ void bpf_user_rnd_init_once(void); u64 bpf_user_rnd_u32(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5); diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index b10118ee5afe..dd5758dc35d3 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -2095,6 +2095,24 @@ union bpf_attr { * Return * A 64-bit integer containing the current cgroup id based * on the cgroup within which the current task is running. + * + * void* get_local_storage(void *map, u64 flags) + * Description + * Get the pointer to the local storage area. + * The type and the size of the local storage is defined + * by the *map* argument. + * The *flags* meaning is specific for each map type, + * and has to be 0 for cgroup local storage. + * + * Depending on the bpf program type, a local storage area + * can be shared between multiple instances of the bpf program, + * running simultaneously. + * + * A user should care about the synchronization by himself. + * For example, by using the BPF_STX_XADD instruction to alter + * the shared data. + * Return + * Pointer to the local storage area. */ #define __BPF_FUNC_MAPPER(FN) \ FN(unspec), \ @@ -2177,7 +2195,8 @@ union bpf_attr { FN(rc_repeat), \ FN(rc_keydown), \ FN(skb_cgroup_id), \ - FN(get_current_cgroup_id), + FN(get_current_cgroup_id), \ + FN(get_local_storage), /* integer value in 'imm' field of BPF_CALL instruction selects which helper * function eBPF program intends to call diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index ddfa6cc13e57..0a4fe5a7dc91 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c @@ -684,6 +684,8 @@ cgroup_dev_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) return &bpf_map_delete_elem_proto; case BPF_FUNC_get_current_uid_gid: return &bpf_get_current_uid_gid_proto; + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; case BPF_FUNC_trace_printk: if (capable(CAP_SYS_ADMIN)) return bpf_get_trace_printk_proto(); diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 9abcf25ebf9f..4d09e610777f 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -1795,6 +1795,7 @@ const struct bpf_func_proto bpf_get_current_comm_proto __weak; const struct bpf_func_proto bpf_sock_map_update_proto __weak; const struct bpf_func_proto bpf_sock_hash_update_proto __weak; const struct bpf_func_proto bpf_get_current_cgroup_id_proto __weak; +const struct bpf_func_proto bpf_get_local_storage_proto __weak; const struct bpf_func_proto * __weak bpf_get_trace_printk_proto(void) { diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index 73065e2d23c2..1991466b8327 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -193,4 +193,24 @@ const struct bpf_func_proto bpf_get_current_cgroup_id_proto = { .gpl_only = false, .ret_type = RET_INTEGER, }; + +DECLARE_PER_CPU(void*, bpf_cgroup_storage); + +BPF_CALL_2(bpf_get_local_storage, struct bpf_map *, map, u64, flags) +{ + /* map and flags arguments are not used now, + * but provide an ability to extend the API + * for other types of local storages. + * verifier checks that their values are correct. + */ + return (unsigned long) this_cpu_read(bpf_cgroup_storage); +} + +const struct bpf_func_proto bpf_get_local_storage_proto = { + .func = bpf_get_local_storage, + .gpl_only = false, + .ret_type = RET_PTR_TO_MAP_VALUE, + .arg1_type = ARG_CONST_MAP_PTR, + .arg2_type = ARG_ANYTHING, +}; #endif diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 1ede16c8bb40..587468a9c37d 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2127,6 +2127,10 @@ static int check_map_func_compatibility(struct bpf_verifier_env *env, func_id != BPF_FUNC_current_task_under_cgroup) goto error; break; + case BPF_MAP_TYPE_CGROUP_STORAGE: + if (func_id != BPF_FUNC_get_local_storage) + goto error; + break; /* devmap returns a pointer to a live net_device ifindex that we cannot * allow to be modified from bpf side. So do not allow lookup elements * for now. @@ -2209,6 +2213,10 @@ static int check_map_func_compatibility(struct bpf_verifier_env *env, if (map->map_type != BPF_MAP_TYPE_SOCKHASH) goto error; break; + case BPF_FUNC_get_local_storage: + if (map->map_type != BPF_MAP_TYPE_CGROUP_STORAGE) + goto error; + break; default: break; } @@ -2533,6 +2541,16 @@ static int check_helper_call(struct bpf_verifier_env *env, int func_id, int insn } regs = cur_regs(env); + + /* check that flags argument in get_local_storage(map, flags) is 0, + * this is required because get_local_storage() can't return an error. + */ + if (func_id == BPF_FUNC_get_local_storage && + !register_is_null(®s[BPF_REG_2])) { + verbose(env, "get_local_storage() doesn't support non-zero flags\n"); + return -EINVAL; + } + /* reset caller saved regs */ for (i = 0; i < CALLER_SAVED_REGS; i++) { mark_reg_not_init(env, regs, caller_saved[i]); diff --git a/net/core/filter.c b/net/core/filter.c index 9bb9a4488e25..9f73aae2f089 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4820,6 +4820,8 @@ sock_filter_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) */ case BPF_FUNC_get_current_uid_gid: return &bpf_get_current_uid_gid_proto; + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; default: return bpf_base_func_proto(func_id); } @@ -4844,6 +4846,8 @@ sock_addr_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) } case BPF_FUNC_get_socket_cookie: return &bpf_get_socket_cookie_sock_addr_proto; + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; default: return bpf_base_func_proto(func_id); } @@ -4866,6 +4870,17 @@ sk_filter_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) } } +static const struct bpf_func_proto * +cg_skb_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) +{ + switch (func_id) { + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; + default: + return sk_filter_func_proto(func_id, prog); + } +} + static const struct bpf_func_proto * tc_cls_act_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) { @@ -4988,6 +5003,8 @@ sock_ops_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) return &bpf_sock_hash_update_proto; case BPF_FUNC_get_socket_cookie: return &bpf_get_socket_cookie_sock_ops_proto; + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; default: return bpf_base_func_proto(func_id); } @@ -5007,6 +5024,8 @@ sk_msg_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) return &bpf_msg_cork_bytes_proto; case BPF_FUNC_msg_pull_data: return &bpf_msg_pull_data_proto; + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; default: return bpf_base_func_proto(func_id); } @@ -5034,6 +5053,8 @@ sk_skb_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) return &bpf_sk_redirect_map_proto; case BPF_FUNC_sk_redirect_hash: return &bpf_sk_redirect_hash_proto; + case BPF_FUNC_get_local_storage: + return &bpf_get_local_storage_proto; default: return bpf_base_func_proto(func_id); } @@ -6838,7 +6859,7 @@ const struct bpf_prog_ops xdp_prog_ops = { }; const struct bpf_verifier_ops cg_skb_verifier_ops = { - .get_func_proto = sk_filter_func_proto, + .get_func_proto = cg_skb_func_proto, .is_valid_access = sk_filter_is_valid_access, .convert_ctx_access = bpf_convert_ctx_access, }; From patchwork Thu Aug 2 21:27:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952964 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="P85GP3su"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="PT8Rbxis"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNZz1Mq4z9s4V for ; Fri, 3 Aug 2018 07:28:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732295AbeHBXVc (ORCPT ); Thu, 2 Aug 2018 19:21:32 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:46214 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727262AbeHBXVc (ORCPT ); Thu, 2 Aug 2018 19:21:32 -0400 Received: from pps.filterd (m0001303.ppops.net [127.0.0.1]) by m0001303.ppops.net (8.16.0.22/8.16.0.22) with SMTP id w72LS1n4030187; Thu, 2 Aug 2018 14:28:14 -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=CEOKcUFZGpGhEHi3JMHvbEOG9CE3U4TfGlKXBGbmyJI=; b=P85GP3suLpQymKdxuJTFBHRdU8FzPYcwAcjpwgXV8+Wvti2Z8Q30UbFFQwCxd1ELLYel JKO+7b2N7wbOQAAaoOX2IMMTRzV8qsJLVapHuYdEWRUAzhVGL3YkkUMdZ7/TYh2o2z0i RgqbIVf0oo4X+BahtHSpEpFiRj5xeun7zSA= Received: from maileast.thefacebook.com ([199.201.65.23]) by m0001303.ppops.net with ESMTP id 2km6kmrnd9-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:28:14 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.183.28) by o365-in.thefacebook.com (192.168.177.32) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 17:28:13 -0400 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=CEOKcUFZGpGhEHi3JMHvbEOG9CE3U4TfGlKXBGbmyJI=; b=PT8RbxiscZRFiphxPOlQtEbH5nHwigD1lZm9jqv1uf/PyNcCJDm8ZHmfpKnCKJKyjz3Mz8zjZe18L9tnOuhTGBIU67xM4SYcfMonxWbMSX60L9ph3liKyLxetaTgc9ltkfbL4RcXfxlKPnOTopjCfztY46TUG0riuwKrVAVZmWw= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:02 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 09/14] bpf: sync bpf.h to tools/ Date: Thu, 2 Aug 2018 14:27:25 -0700 Message-ID: <20180802212730.18579-10-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d7aa949d-1038-4ae2-bda1-08d5f8bed487 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:R0jd+9/VZaCwCjbLNHYFnL7+xwNC/YG9i9Vf7dDP1sM4qdwHkQGN95flFvs9NroOhKk2F2rtKab5xrb+g1fdKhbCOaHLq9sEByOHA0ND0EKyvUeTXOMUPkAbBIFpMmfLpthsrTV54M1ai1f7mZ2HAWqPjpNRkw3N0sjJ5iTZFtRCfSFJO52DGVoRrqlgvlD+FV4RULYv30FMwm+RqpyCuFGNjDgh4HbVf2ZSRCBoJufdriRfb/RjyCNy9DpRKrhh; 25:chqNJ1FahZpFzab+4M3UhK4tXrXCxdsnOh3BbK0XVYbBWEIgjlR0qnHv1YAeyuIIPtL2E3dL980ODVv0enpISfRCvareNUY+XNOQ8wyn/eE9edtGU3oJLJH94KQqMfLFZzCB/SEpWUyUMIMqpqjgYj0vteEk32bzWy8Xi2gwEYYLYoqz5XfdaP3wK1hwsGRyNEtGTPbNsZJ5DSJIt6oClCROSL5f+g4yH+ti1cPMeMDjHVgSWZbLN/6IhUHdtGd+3dKgmuELN3UiTDSROKzp5kEnHiv7aqU1se1GXdk/Oinstcy5tiajur68Psal7brm1NNIhnbHkhZ5jlrtuMQCfA==; 31:8QvPi2fVK/5WW7RL1s9WY/1L42DkKlD7x1ABmaviDzsWpsnQBnB0BSQRve1MgMRgvZnF9c1I6W7Ipj7Uo0jPztHp2A1JquX4hN8fFAQ+1dCNrP0zIFrav7NQ8brXTsRwXuamd9u9eoTou0hqXsZGzP64Q25YG1Lur/dBOn97Yq/CiqExTrK53Ru+HsqwvoAmL+OzfvL/e2BgMAiUOpCJUexeHU9D9dl3BQ0TYM+n1C4= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:iQ12iKRUvGVCEr9Vl+j7aU+O/Q6fzdjawkVXosqgfZVa4AFn+Zv1/6D87EC9HLlsGwJwSb7aGp89U3Jrd94ZC0YptYywEKnK+1gWik2AauBn4rBRQGdCTH0/l3qK5CPuPRq2zhx7auAoqs5gCmMyVHOJAz9K05oLugroRxIux+oVLnW3L/1LLkjJ0QQhYITTbl4XmVHfTi2CTzfSpL/pPUaiiQ+Iid+bSEg9iTtJiWyz6YHCNr8UVBtEVSjm8odMHbn/RdajjCeH/B9/ecV9IV2+qVYwphY6Pla66+1ynrpiWZwSPGhwtzRUwv02eLRrObyGHGV5elmuydqBtq1ZbmpjUi14RCS13IUSWyGT4dNEHuEV1VJgVERVaTdN7REibcXMM2HpZrtZEr1VqDvvzsks3rA2je5upiCK0sTrZxDmInCYcx5Q+Stj7nSFx27uPNg7EZdAV+9APdJCyrFrp8arozG7b1TEWNYiCDdlUhHLSLQWglRq5EqaRcidQ03l; 4:ZfUVoGJEbbjr5uAr/Y5alg37KXf7CWTsz/bIurzQ8fncN0swz+UrjNvb1L998j6DNiOF8y9gq/s3l63U3HNzKHIMW6It6zjgt2NaNyIr3LHQ16RByaqrHo8lKOsBZyuFxPxN2iIro26AxbExUUdCI+MkANaFEza6MnskCLJNrSkS9pa2DfoWsjLjue37xkoWRjfKXZBD2jupyJm5bwQXUnnTtrZumBzPQDsCfQBJBkau2Q2R1fJRDF/hSgCmZLaIdSZU9Lgs3F4lmtoXO1FbQJB3YwidNPGGlAR37vWXeoUPO4yPNaMPEhwz1cZEimFo 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:+s5XojPv2f+uB2SD7ylGSqzHBVwgqfOMpyVvAjXZ0zYVI1whyRHYsLY4E8rFpjGfFJDYurECoC+M6D3jGHkvifu4AW/lKU0kg5GeVWW7aVrI56ud/NQ30ExGNkC47osADPnBdMJ9gXcshmHcsMzaSX6VTSdOk2WHXhGKx1dKhCyAdgdRBhUt+SjpCAG/2hiiPZD2KxRw7Hm8JNwk5CNMOg4c51j2wLAHR48E4fyDMO7rFDotiWI9SzCSqSllOPfC+PziFP7gUWwRiqDcRTEvCNFAbGlfHGTNyC80d4g0WxDMWSMjroRzPva7yxVZK7QQ07AmtdoAI4b/5iTa07pLfVsv+0Ggvd8+XG7t+Nf4HA0Gy4cTUVk8Ajm1ahhz3D81qGoZEDHvbiKSbbl7K2YnU30CaG5at+FDz7h2mgztfK8pGXizY4C4YsmCLKxfbfHKVmvMxH6DCLIeW2LZf5pQKDzPktTxpkgMM912n1uIjtMYd9go/mpRlljw8nn/apUiU6mSQH5HozRxj3Rn8LU4pZ5iKNHBKVJh522qVQcscLCCc7i3UBuEGYkxbUw2gLofiF2RXN2t4fpeSCEJCbbS5OJtkckJHcbKeHdzeC5Vjn72jLvAIMN+rtYNC+U86JtV2Sm9ntKym/Z/AuUGGfsd8SSi2Wx4msZXuP1gWKY4PdYB4GpmKOh63ntH212n4VouO8yTS1Y1AWlUHjjVEES7EJLHc8x7HKsHAk5lMhYtqxeCZvBNMERn4bcgLZ6hwmuxjOoaruEKAoeLw/ab0IFpgIhDHHOLfl6cuvqfgGfBM71sSWDJhHV3Ekvodf2sG/WZbsY7smABL/TPEGbS/jSYQgTJ9jnBXe/WIRBU6ywDg3oot8kx3092MYweDb9JTWkFx1FPb6J54AgOEElA7dWuXtZ6iU1LuLJfqN9MFrISAQi34raYhOvJcUfuEaKcTBh502RaosA9ltF3RvDys7mK5RTrrEOSxL/POrOnz+8w+07MvBULujFnWaQSEEx+6L+Gh1zxlawfsq7o/qOZ+SVYFbl5xp4CZg5xiDazMvf1CuAFVhAGWxeB80qasGcGKLrUI8Sntgc6oc8S+1c8TxjBtuQxpDyfdK1RIayGnsuconjpO0lXckDd2DoCYxwYaGOfJZC+LLRr4Eu6dFVtIuIYhCb3VCJUcUMbpd7FFr+zGLo2jq8f3gynXc0/ONOSKkZ6sydEx0PAsJTdjUj+F2xSj3fX+TC9C6ZYDu4VtFc3gmSSks5PICndIbVPfqXzXVDn2uXDQQwk5RRdkty/GfMAPa6FbtonTbncfhS0Lz9sJek= X-Microsoft-Antispam-Message-Info: a1rbNaEWA9IJlPxhHbvKmNOBiMC5umldq2IkeV1ap1DShL8rtNHmvwvPwQ8d0I3FCz0jTjw1XFBbK7FvQpGgBfYZWYfLxPmHFACl3OCA9HfAy58prYxRfIicYpE71pAuzn3/KH/oQBDBc8rch9AE9XoPM53cW7cvStPbvcHi9zADpbcTs7snoperagiil7UQ7dinRgIGsbpcYNC+7g16WoYrCRU+XzPEmzEyE4OmpTaZduuxSKG2qQnbQR2D1DCp0sjSWZ5ceRg34FQ6tmhAW0+4NANP6rGXS2sm7EQPLNnjM3UV/WfySvLgyWiyR5tiXCUsKLWZexCuGEgF75ZlMXB2LenwM8hqpjmpV+OEwEE= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:jqfHdJf/u5PgX9bc7v2Qs4XtO77jb9aVPhnU7dzfNcGrcTs0O7AXrmRiCe/U/NYgH0M36VZPpANLBT8d9aGhuHJB3h62Dx5CRksXij0/QK69SXNRp1MCYYs6CI0y5WPMvcC0XXyPU7TZ5RJz/Mn2yhLbdmIY4c6uaV1J5afUmxCXdEETiUl+iXCRqZwbeKi4/N7ksrM7R+m1sn2a+8pklXYbpwOrADnT18o3DD/1/El6K0DaU6PIiDhyRToXsL3s5KHADWqliBBJuFmCmZNTXT1ZrvIz5ioDAscrqCtiva42XWd5kgg/idQhaCCNCEmrBQTv0OVepTjBTFtWySE6FdEUJOUQPBEjdEa6AR5J5Yl8KcY3MY7nYmMNMbilpYYIowC+GKi9G32sS9KJHDV6F6pzzz/A5izL9uiqB1xU4Ygkn09k7+IG+9qVIMFHy1g4cD+Db2pcIYcVKTttZfd1ow==; 5:d5NPrkxSAGV6cR54VZHWK0/XlV9jNJ3wss7FQIr/POJXP+j3VjiskuwnXLFaYmHBe1yjJTFauvu1tt/XGzZC/pMuT8MRY+JAF33fRiO+3aYO/4mt/9DuPBWR0pr2Y6Onm3zWGdc1xeiJi6kYpVA58XwLfM+8qLFcXIS12rIiR3A=; 7:lkKu0osbiirYLiWSPMor2u8fpLIW30Ta5mP8FO2Q2U5UfZumKtK65MtPhwEJnpVuour30QhY4ThJKKwWifS3qBVmV+q7GkKWSvKTWB3S98sOj9qrIbTxl9tgAYlswdYIvrHA/+rDBTQ3DzgvsU7neTPZr3hRlKMXmuDG/AZfTlqJubjV+/SvNuClIOuyvPorRX5sLfA6V5jZ/vN73+tP8zzY+iaz1Q7sgpaBm7rPUIPAmcKzwwqxojaSEp6Ejas8 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:slCkYtXxBpkuCx+QO7xIzDzmaDiR9ASHe4/E0BY+HYvTJFM/ne1ms75sCcz+JkqBDcoxE6hdFrQm55JHxaj6Cx7OTIIbVNBZjNYNxhsHJQ2OXLHirBWusT6083UZsMN4VH7plrch6qSrouraGHRrMgRNXQ3YqurN72jWqqsFOpI= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:02.4252 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d7aa949d-1038-4ae2-bda1-08d5f8bed487 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Sync cgroup storage related changes: 1) new BPF_MAP_TYPE_CGROUP_STORAGE map type 2) struct bpf_cgroup_sotrage_key definition 3) get_local_storage() helper Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- tools/include/uapi/linux/bpf.h | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 0ebaaf7f3568..dd5758dc35d3 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -75,6 +75,11 @@ struct bpf_lpm_trie_key { __u8 data[0]; /* Arbitrary size */ }; +struct bpf_cgroup_storage_key { + __u64 cgroup_inode_id; /* cgroup inode id */ + __u32 attach_type; /* program attach type */ +}; + /* BPF syscall commands, see bpf(2) man-page for details. */ enum bpf_cmd { BPF_MAP_CREATE, @@ -120,6 +125,7 @@ enum bpf_map_type { BPF_MAP_TYPE_CPUMAP, BPF_MAP_TYPE_XSKMAP, BPF_MAP_TYPE_SOCKHASH, + BPF_MAP_TYPE_CGROUP_STORAGE, }; enum bpf_prog_type { @@ -2089,6 +2095,24 @@ union bpf_attr { * Return * A 64-bit integer containing the current cgroup id based * on the cgroup within which the current task is running. + * + * void* get_local_storage(void *map, u64 flags) + * Description + * Get the pointer to the local storage area. + * The type and the size of the local storage is defined + * by the *map* argument. + * The *flags* meaning is specific for each map type, + * and has to be 0 for cgroup local storage. + * + * Depending on the bpf program type, a local storage area + * can be shared between multiple instances of the bpf program, + * running simultaneously. + * + * A user should care about the synchronization by himself. + * For example, by using the BPF_STX_XADD instruction to alter + * the shared data. + * Return + * Pointer to the local storage area. */ #define __BPF_FUNC_MAPPER(FN) \ FN(unspec), \ @@ -2171,7 +2195,8 @@ union bpf_attr { FN(rc_repeat), \ FN(rc_keydown), \ FN(skb_cgroup_id), \ - FN(get_current_cgroup_id), + FN(get_current_cgroup_id), \ + FN(get_local_storage), /* integer value in 'imm' field of BPF_CALL instruction selects which helper * function eBPF program intends to call From patchwork Thu Aug 2 21:27:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952974 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="Z5xSYtV6"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="cIINB7hO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNcS1NVFz9s4V for ; Fri, 3 Aug 2018 07:30:00 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732451AbeHBXWz (ORCPT ); Thu, 2 Aug 2018 19:22:55 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:49824 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732253AbeHBXWy (ORCPT ); Thu, 2 Aug 2018 19:22:54 -0400 Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LSxYf015349; Thu, 2 Aug 2018 14:29:35 -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=R6SL8MWP0Mf6kG/U0G20BLxim8z8t80VeHH9u/nOJrs=; b=Z5xSYtV6lZefyKFWNTpG7sj5iRkHTH2hLeagUGWOvCYXpNn+sGeWwqws6EIzprn6pKGB Xp0mM66ig167wNx/L9vvBT6RYZu1QzZGwb8q66ID/mRbGRJ86bO9+WjxoLOUx4c9U7zk 6gwzu/zODsujp6JxnviGR0gBdgCICGHOpck= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2km91w0510-8 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:29:35 -0700 Received: from PRN-CHUB02.TheFacebook.com (2620:10d:c081:35::11) by PRN-CHUB15.TheFacebook.com (2620:10d:c081:35::27) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:29:30 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.12) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:13 -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=R6SL8MWP0Mf6kG/U0G20BLxim8z8t80VeHH9u/nOJrs=; b=cIINB7hOqMQGUOIiOhKLWgD8mhNy9CD3GOW7aeYt26Adh5ziS3rM9BAR3K7z6pvenzcCns0bDXEiILtzHr9cDhbu2/Jmgv1BN/1qeFUTTrZGgmfE8mY54c9j/ydNde/rj7iweOTxkimPa6NvhD6WjKvOf8p8H++lwo7fsZ7DyW0= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:04 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 10/14] bpftool: add support for CGROUP_STORAGE maps Date: Thu, 2 Aug 2018 14:27:26 -0700 Message-ID: <20180802212730.18579-11-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2151fd71-a430-4cda-d406-08d5f8bed5a1 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:kTwK87Cb8qV/6Dolmg409row4+HmOSX4jzbvJe8Er+t4RlM1uzvm4I+7DbPjonIalWjYkI3P/cTgVEabhpkBvL0F9unznAzqrBUsjttAs20YONpHUkIuvW+kjDCib7D9AvDFLYsHNwhd1wo1+kfYef0ISWZJrb10lpOVbDQcJC+45wXsVIIu5e9MFVU/Jc0+v1J3Wj9mgUgnqzxEL3Hbi8JCSjvxEfybd0L4RORAyTDmGymwaA0WBzrqp0905NPu; 25:+Rfb5dIlcJ6G3QLMkAjovUU8qdCBszMXMkGxXJFX/u4BLJBTq7GSOm5oEVBSNMw7fzytyBwinhtebbyYt3fPCoiwGIQ8RvTDQbmHvSEKevk9yW+fJ3nuXo84LuDu9NoZheTk5YjaH7IMkkOiQV+sekyopJUX43fCuszZyzb/0oNF9wJqKJ3F70c1RrOndiLrhyxq9rAPHd96Da0ZEOV9MGyCEQ9gB3sFyX3/QXv65RIaoDLSuNUJWtsiI5hCvFYYvwlQne531/adyqWRlg6HxGhBVaqcm2AnkUPK1o7DDsnC3iT1LNIO+eLp5+7aPjV/iy0auVCmm/nyHSJMJDQPvQ==; 31:wxxzm8+wEJ4jPLIW7OFJMic+wp0XLbBWZhWom9M2OJVG/SOQ6+Huc52FtblEac3lAYg1RT0Ahn07iriN94D9vuslbiFVFA1Zl2L1mfRHEukXG6NeHZJowloEcNmPinLMt4/fuYuI+Vjb8UtqOdFkgYN/G4IoUYWyyb6MzxH5+0IV6XWYYRH/Ke7lca5efU7zzZSUdsXfs3adCZQCAm73TVAWmjHWCYc+nGS2TH2sxcQ= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:JxPAvu6YutjZswuegrixf2ueIvoP60uuqj2nyOpQ1rLfT2c/0s6Sn+oP41IamtJ/qqFpnt/4uZ/O3ZfgF9SxBR8MsdY9YuU49QRXL0rID+Lb/tW3W4mTA41RXKcuvWWepVBqNo5jeHvrACfbOYmi4t01dRAEFIcs2Pp8N8IQjGb3l9N2wlhH1HrzY4D97kZOZRmQspyL0bFwMktyL2+LbG2h8P7yMgbFMV6SR6RVJLHNdXxUyEbQ8eh34pa5EBloHZ02GV1smlNGxeFa7BaNsMEezuxJySV3TNxiGJ3eT5yrfuW+Y93Idy7iiA/cdMWg3w/6ALlTsE2Z8g0x9lqQn3KOAeRQo+6lSMdAA/HH9MqAqVYPYVgk412KmtIfbHHkrOwy/zFTlx/cxZ+HY8OXYyerJEsDyDTzX6uYF+OTkqkqEumRrHflKN8EiIh6w9wSpOPhQZr/kCCjecZugFcXzKKejlJR6z39qYQ2m80Sqv7kR73kwXrSpwuem2ci3Kj1; 4:pjz43BLZgwn88co5C2Uhy8x+fNSHRdVRmsjIfqlv52H/rog1KqYHnPD3enfQNXwyy60+E06h4SYQBUaq9bXj9xyYL9wmgO3a9IEcXqlPNE72cwQPpdLUyvli06dXrTLCVf1G725Ehe1b3I1fWHxKjpQfV3xqx86l1NXxCb4WYoATDRPXS2hgTtNkb74vydB4M8Ha/43f5jSSVQ0mwpsl6FcXR2Xu5y5qMZdA9OIse6eMWR+dN43qIfmP2ZA9clEkwKZT1WieYZ7bDSUi2wm5vGhEZ9TMXklDKqrR8qV3I1b9e4WmmtLVhU4PS2hDQraE 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:IdKGnQEcAIaO3Spa0F/7PvPi0hOrf/hSA5It9zlbChCXFMWhp0QprEZw3xZ83vMb5mBj5ucMqwzW5mbKz5RssmLxEgdQCXDwqc0kPVZpXNfvxjESZoFZeReCcCm1TLIPCLJUWkOXIL9eZ25YD6meiae0T5g/AHyRlt27Lc1QKlqsLiy7CJJCzu2P5UISB3qCvjloIWjWBWGKbpNZ95NG8raJ8PLjzLqWevZttoSP2FgN5DkZfqQNH7guUTRJ969lFZ4PIy2qOpwjq42h2VYujFtU3KWK1qPJI/Lp4MWDAnx0/9N2nbpcGq3ze2qpvCzF+0KLq8aZ99BS3WJ3GoLRZMMIKQmYXVVkIADL7NdekHWIwJ03RL0Eu9doIQAImcuQyvYV3+Swjll26q91UfhNSnoISno4Jr1eLHr9sNPWJJ/+gitgHqwzC2eSJ/wYmvU8MZOpwDZ2eLkrVBNLF3t/xSwdnyw+e+Gn6C0r11sN5pmzstupce6++Bwbam2C7QFUc70NOBVZDeu/IuDo/SXinCman/SdZuuUWQCLO+CfREILH5fnZnZKnEIcmktKcXvNGNvxMaM4EclVMyo14GqU9NEErURe0nmhi6Bx9K/LugsRk2UGF4Lxkhgz995aQWSF0LD8REDHyriN89/XlDxYZSBFdQru+DgFzY62saKwXG97kpXdeiYTnyOjzyiF3+4+lxEwNHhfz6F4U+G0eAFSVDW00rpp0oUKv8tUramlFVI5+l8rz4aFwAIk0W19lnzLriNR96exq9sP/rwK7DLNz8et7Q1TKBAX/CZ1K4hL04pyu2RO/IgT5h9Q/9F6xG8OOWqztVX7sFh6Dsyuj2rOrZagCg95rJJV+ArSP/szM8ZhAnqaO50kfOw6edkpROJxp11DNSo39afffyc0TPQVL8xJeJLgCT4p2IB6kBMcGckjEChdaqo+ePgtf0R4yT71r++4yJdm8RUsN8MI2/uTFo6dqLPwXpawuF1w/d6iLEO4ADMkvS2dcVV2BIbgLSDWQ/4daxcwgTWVywGxZMVdqUr6JeaUF1IvuRUBSA53LbDjLWiJwhACQbC5Vl7qfTV/TnHPumsF9BNITBtr8YHhLv5tSkcw/tNjz1Y+Gv5FUIsz0382FYPyDAkLR2AyoRrHEUpORmNcqO55+C6layau9KbzKkZ97t3lTUJPfAH8zsgUo6XWYVWMXStikP4wRIQIq1G21KE8tbzxEyUY1K2BMHqIU+Atz+Pr7yIeFNtEDCrPutevacNWX3irQc1lhdUPqNfV3zoVkwLlAFSEoJEXhw== X-Microsoft-Antispam-Message-Info: +Y7hYCX53c5XW3rO5n1/pfnndZ2rQAKIB90su2SySCcltAa1DWIGzACj1mgWsOoFSxdUpUW41goJ18w5wLOoYgthdZ0yMPPT+qzRR6DBwfe/CzKcTvT34Zl4RyA7PXDBzUH6H8Aiksx7QLdctjxPl2ov7+0RLCznt9voCkJrWcz1TJwgEx+ANRa+mEP2UA6YxmLLXtsaFF2KHp1FsyVbbTValgEwuKElMUzMA4PmkCIjByiO2oME57AwCprX3zx6koHCmxpo6V4NGjgBSimwTU3I8KQVLVujHG12UqfbZxq+ZVlLk+157CiLFj1WNcBI+yunfUiJ+hFHXAJ147fsdrUb+yv/mX+P92C4xIh8AUE= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:CG1nuCU1sA7FppKjcl+ywXgPLJT142hfTNhoTCeGFrWptDEMsiJqj3M7vcQJbJkDtDCTIpTHRUDZSTa/Yth8dPIoffPsMLKWM/UBg/p/PGjYuLU3EmBltQSLoYd6fG+FPcl1DzNKychX/li+t3Ik4KZ4Sibll0wUdTvkya8l3N/xWp+Du6uqW3ieEen5wJSXI62ZE7gYdf4kPrMn1fU2e4WW1AksaV3zR+G3HqLbCax6bZyfGgAi+fUnDTWIBT3AIr2+Oxk6RYq4tAYflz3dbvtgPccDAYWSOhkonSil61UF+dzHXxgU1jtKCYDb0WcdjMNVtiiJj+H5GVB1zuaXXpI/zQrvr2Pu2mAfZlq55Np8Wron1n8mrsccIIEto8lfS/bApPh6S42bQJIbO/Io8kUqhgi2JVKT3oukSlEgFgrilA69bLEt8FF4rRHnpf3D8uUgmlPlNrilTec0G05i1Q==; 5:s3AC4Fa0AMIksyO9XR0762oleIeaccJ/5LC6AoklvxI6s6gGaJvjh+Pog2s8baq4ZLwVSXGraHJLGFnpPn518N+NVLRnOFJh8fpNc3Xo/VI8Zw6JE5pzAXW9WEM350AEaFlY0iqTIq7mqtasU3Hz89l6mpQQlcZuy4Gqz3HCcGQ=; 7:cOtJVSh4sIwcZ/cawnJYu+8xjVtLcfLrzbTS6QBTVBtsBQglBocaldLxHkgnz55HJiHvndEMvGmfak4ZXNs3G4FboSMCU7UzTkcfzeS7Rsiyo2uSnrTsDAHpSkb/fdvbDazwcQDRUhkP866MAidGYxfxliqZ6Bmr+V2HHOZ5mTs2csHHB+Yy70Yy8WjoDWUFVwcZOEIcExGfWuhfAnL9/h3IqcwBqBE1Myal7rRUhQqn8y4kw9r/7hd6UynH3z52 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:q70M4RITfzAQ/KebbmI8lyqGXPnH1c9e2ohfQilnC/YktHUMoB7FGSbZi3uE5+ULVz2ef24O+2tkEmNP3IXAuCnkV9nvaKDigTsIRZdXydhDrrypsQghhnsbanuVQKitDtEFVagKYqsPpKmtU3SOKD3PXOTc7yt0MxxcQqt/y+A= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:04.3160 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2151fd71-a430-4cda-d406-08d5f8bed5a1 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add BPF_MAP_TYPE_CGROUP_STORAGE maps to the list of maps types which bpftool recognizes. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Jakub Kicinski Acked-by: Martin KaFai Lau --- tools/bpf/bpftool/map.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c index 0ee3ba479d87..2dd1f8d9cc2d 100644 --- a/tools/bpf/bpftool/map.c +++ b/tools/bpf/bpftool/map.c @@ -68,6 +68,7 @@ static const char * const map_type_name[] = { [BPF_MAP_TYPE_SOCKMAP] = "sockmap", [BPF_MAP_TYPE_CPUMAP] = "cpumap", [BPF_MAP_TYPE_SOCKHASH] = "sockhash", + [BPF_MAP_TYPE_CGROUP_STORAGE] = "cgroup_storage", }; static bool map_is_per_cpu(__u32 type) From patchwork Thu Aug 2 21:27:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952973 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="ebt4d599"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="QamMpgLY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNcQ5cgqz9s0R for ; Fri, 3 Aug 2018 07:29:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732441AbeHBXWy (ORCPT ); Thu, 2 Aug 2018 19:22:54 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:49814 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727002AbeHBXWx (ORCPT ); Thu, 2 Aug 2018 19:22:53 -0400 Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LSxYg015349; Thu, 2 Aug 2018 14:29:36 -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=sgGXbrdugL6eMOukXWx9gxCL3wfTYLV5Rg7NE3kE1z0=; b=ebt4d59920SBKqe6jFkklMJ4b7k/E1lioPfKrVTrk2IY8MwANY0UMT/OfnDBFWtj6tcV K7zllhHa2uYY8XS5KZsJ5lzsTswiyvafz+XrzfyWTbsyh0q/3/4Iz4E2pzL+qu2lcntb a7O03o96FZjsVKgiCoiZ46rcQcbwWQif6t0= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2km91w0510-9 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:29:35 -0700 Received: from PRN-CHUB02.TheFacebook.com (2620:10d:c081:35::11) by PRN-CHUB15.TheFacebook.com (2620:10d:c081:35::27) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:29:30 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.12) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:14 -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=sgGXbrdugL6eMOukXWx9gxCL3wfTYLV5Rg7NE3kE1z0=; b=QamMpgLY1fnQ8TbEeOlmUtY34mFeumymUHqc9L/eKLJaBtWKjRLLVfuzICZoMimS4GTAXMrsONEEPG9gkgeEvMAXWumB5/Byv68RPZkE42eUD/QpGKm9a2Jc2Q8HA9iZ6eNkB0aTErHWMRPA4p3Jfpn59dFaafEDxOmjhxmN96w= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:05 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 11/14] bpf/test_run: support cgroup local storage Date: Thu, 2 Aug 2018 14:27:27 -0700 Message-ID: <20180802212730.18579-12-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5194fd2c-69b3-458d-d409-08d5f8bed649 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:W1rYLl8X8yYZ5MiNDThU3ku0M7eLkSH2P37GRaohfy5OG6O4IOsBI52DaFGEhw3RDkmjmZI0J4SyIwJ1lKpCn2tG90kQNfiJ5d+ixZEXF+EcbdzxSdo9r0NhED0kV4DvemQZpYxsIMNFiOOC2FEEv6zDBFKutkWSNbrAgddNWFot9jaZPXfkLXBmrOmQRnJcsyrRMlYxTRLM3P9auUfnNfvuj4MxyH6bkWvaB8pn3pdMWxfR8BV15cwky23LAnM3; 25:2GoGLnlJCfMP0xI7YTc6KBbLiZfc3IKsSUhoalXNKlsEo/CJFnqpGryx50Si8/RzF7BLgNBNj2k56ClB6rLKleJyDZAjxTPtW6JqLrUSlb3s7vSmPEgqG+B3XIhJXsC+YkKF7gmZzKaInlFxOjxFbtr65ohPnUELxyZ7+NBB37H76jPHCIEGZ2FqB5W76LZDMO4KBBkWwvMGkIaCUzY/qFkMFt+X+ZxA6h3KRW5GAKMKBpHTuH+9jTAHL4NS+oVB4E9WAWQLiMtk+KuPdcfs5rhg3zEyjwrkm3eMmKbkd082dGNn4utXsnbvKxSJaEIxQP4x0opSCDSokGBqnlSG/Q==; 31:pbMsEMv+2Ms2vZ7JW+ynklRDHyXQgSt9xmDQk2L1IJmt+w70RfRhzaNFk2/5KhmK/JR+IJzE59UlUnBi2+P+7RUUdtb/RQ7d6vl2FDCN0Ztdd2uT5MYoCsHL1aJXLNlYEXAR5uM7vPFYxRLPDMp1KV+2GADpa5NXezXDWI6YA3zX7Dpb05ZDvX1MHtUy8Wtel1KPyHHFJed3lX6ND71ktolKCXxIpaVtAoXq3OLMbq0= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:7Yr2mVTd0i9m+1mHYhEpl6C8TJ/RBXDqVwNbs4Qp/yKYRgOFkxJ8eMpwlAEjtl9FP4Kx3A1OCxWTcGtthx/dzvea4AxfGSle2yYNFiAVxhEzXfTbpI7Ihdq9yGOvngrCZthLAdSY81r1sR09cWxzGyqrNOY1kEgj0ETjxmeRUkGbNE/4VltAUTDWZYLda9tJRHPoXg/RbIamLRvNRRpxyZrGW0XMh1wkBkj20GE35iD2GWGIgr/a/gLyF3oGYJZRKNuzLDm8IKMvvcP6xjaiD0E7/ptSvDT8LA+WUhuICntcBD68mWpP2J1a5WtoXorWdmpKZrfDQCJ2BbUU1aEAOFoBog9KV+HIYPjRo9cHRKXhYtTm8hMH0FTzOF0L6zWLC2AnGRlzC4+dgRa3oAnML1sf4BJ+EP8hD4i2CkSgp9NoShonKZsc2It3yL1ROhMdTSxGz1xiCTfSqgrm2UqOq7gLhHpu2seE4pj1RsaT99N2l7jSo8KhUrKokRgesOpU; 4:k8ocBboPWicrYP7lcfJAkSVIlir/0qUGuctIoP+uMHppgBKb9y7qApch+JlR2y0U568qsVAhDLSa0x6Vr51KSqW9lI3GAV5ZQbb/9Xry8Mx64UjKhJC8wwMq4xUpAil2GS7hloQPEhBydqfEWD/hJsB+d4dMY7I9lih89550FfeMQYfdGNpQw/FuOaZRA759oNLE0QpyDfNWA/1jIKQTfkecsTeWdAEVYy00sPbHPqDK9vIV/DTa4DG6l4c2Cq4xe/8/1rxMjZ4kpKxEOOXS8c6wH7avAGzrf2P1q9WFXZeNOAQ9Tuibnf9hAW2egQC8 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:yLq94gcmrW23B04ZLvMkEAKLX8AgzJ7zE12S77iQ8mhP1M418fIe0MHrIZytp9jIt/NE/DKN40ARkK+Df9S/i+qRG0rgHg7lHT00+/LzJm4sNst9qrq5DpSrrySyyJh6iQBIzjoLzM9z8oATxXtBvj2UzkDrpJnzzE0QAePvTSqpzc1mCfihTA48xzEj/CXsrOdwhCejqNtqWAUysho4YgeAcaZu1BJo41hLeMTxo4fAZaSKqp9rMdo6JZ5mGeLvm22dbKgWBe+llCeT5pUZljsZL8jHRQqLGpewEoZ0hCFxFnzGcgo1BUX27QgCqSJ3AdUD6Y/QngVdGpqK6x8KxaUyEDEUHAu3RWCQx/AMiR9QTdcfpee7f1kD79+KBME9g/h1rkEgOJReIfqOtRDiOF8NDM6acBEUC8QtNu2s8vMXawez0ilV5WKAZA9j+d+NbYNsP1I0EkKc0VKjeHhPg/O79E67LsbtMBQipEKDWtFEPCS+FwaeyYROa9j5X+vuuT1uUszGYEIDPAnrcB/jHMvphc3COUeREI7/PgQnvDgtysge6ATESdCdwZc6U3EeyyLIhei5924OUEVS1xpx34vkZ3qPkMRt+BQUp2YSj/ppylzwn22z7n6gYbCll3P741bP9xgBtiXO0L2bayOlJ9HvUj4daXAd+K4rkavVYuAvmG7wIRt4UgYFc5zpFCxu7XFQAFVgsciMD1moTZRZ/wMYGUUvGXjYpNYov+eEFcjLxlrU7LSCuUY1DsDpjZOr0Kj4rmhMJxBy87Sy4QaMzi34cP/SbuN9Ru1x00U4WPV4NChPKrKZ6HQyKtKUZ3QFanDalJ80mDonvXRgXdYeqUc9BOKABRocjGZN++mgxoNuKxYzS3bevEjB34QladXw7ztbb/LYPVh4Cuabdl0x+iK6/DNMlfcQV6tXh0WD6EDEgQtKwCwmidGY+OScotLNRVSCnNuKbJL5+/x7R1essp+JIVdNrGUFmHhT9GF8rZYACFejLqiPSBBtt4Z9a4JaKwlPJ9NlukgsyvNTwcSK9CGYRe7iggkf8r8pOlFuKs2WPfChmqZ7VYJi6LDn6bjmCco/Gj8EJfM/BkLbZrGF5mx5jI1rUV2W/DnwNDHx7xQynoF2c2piPRbd6c9t4NpaAS2EfL0damzCGVEoIAUi18pR9a7uXifUx78TpTz4aZgIjIozZMmB2cEyf01J0BxAP96bsaUEr78HHp0SHa+O9vg4u8iACTLRg/v963Adn4iaYhjAUDQtVdGFlzEjy01mMYQQpQhVZmfKKhhVv58Q2Hhf6n6oz5YAfAp9tsm39JE= X-Microsoft-Antispam-Message-Info: sn9y6gKfdkZE5iiXaBBQcIxN7s5PLNI3LxUMePDHOReQgmDQFBB3DQ5IvT4Tmqva1049ikk0CqkaG+QXFfgUXhbduTxTHCObtlhQJC4FlYgbXtsgNpd/mjQcUDSVbbZ+59bvcL3k3j5qIaV8p61XkRLv0+fPovYxwylA9mHQwcMJBOQba7T+JbOO2VxoPw8BqQvv0+aAYGhMkNiuqgFMvOAcM/AXN67+gM6SMha09/lSoWvacmil+F+520Urar8/g6V9/rBHXAakygGHkRN8WQ4zeFIzJ1rJXEgkT1vW3+sNdZY+Jo/mB/4nFYa25MkP8He94bxteqKP9AOF7DsY/it8AE7/CxA6lO8ZAmvvG10= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:qrI7hCZdYDTtcpypU7zzXw7Exk+1XhGe+h2JCaG6r5YfTzg9yvYplFEaUmRdH3714YxlFQqmL1XLjQIvCEFpSreoMtDmQuwxwKxIzTFBevvyiXOPJOpMeIid2Jyujz9Y/27jOLbB08OT8rQWOd7EMkqN5fnivvA9wRMUd6Ydj/dpZEcMpgAUUuphtwEQFO1B9noJOn0sR08AJLGXoHxC/HKyTh+KpV6m3vPLcx3c2sMknDBVkUERnpguxj7EtqTfnNoAhdEjiVq8SaxTttXgjTHoewF159Q3jwpZHtDVNqS14lPTDWJg4brNPI8/65H3w8M+ziUR9tPK4frsQvBWgveO0WvEO5Qxs6WHuxFQIs9MpUwQE/+h5bCHGRsOTS2B7pqJmPg1m8/iZV82/hmvg4eDmr46BXO2DOeJG7sBwNX394dojINoWCdWUI5PU1WnqpS9Z6lYELCoOiunnAV4FQ==; 5:AL0u/Y8xqRaNo7yt1MWVR+paGe5E5T/GsSXzo7ERjWFvX7U+YTfh05Wl4shoeLQwWj4KqcWXihqH26XDCKAzZxmmD1ZEU5VFI2vpqB1ybMtkyHOfXoFdCJmgtfBsUJWRS3UVe7SUShd1AoTuAFpGfRpPEYW56cMjoYG9BRbN4fs=; 7:X32bhX51nlY6KMlszuo5f/I9MUOPSw5Wj3oxSoKL8To5axS044rWUVtokbUn4tp+yvtU1ubpQFF582PPVo9JrpbF0zj/WZd17RkEPasqgiik44IOIWRkyDfzm1C08tGQpEBZX3byAkm4Oj4xey3pNwClwNEnuJpF59LQ8aEVSFhOSE7j4fcC6XEpwJ2YnwmRMxs53OZJh3CNKefg8LoJEE8p8cQtXE92gtMx1zGJELaw8Iiqwmza6NVBOj4rvKLZ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:zJth/R9y7wBnj3eoKs29oJLzDfuZeCDzlinq8Dc55d6XEOHKCvVXTUN1Z+oYq7ZkgRGhBEOicV5AtGUkaEoX1TLvxyONkXbJhzEqEtRc1v7rqXWr3vYUZ2m8H3DY1Y3rqKTv42p8wPQMeigMtKfQhG9z70uY6o+fjo5cYqqaG1U= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:05.8844 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5194fd2c-69b3-458d-d409-08d5f8bed649 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Allocate a temporary cgroup storage to use for bpf program test runs. Because the test program is not actually attached to a cgroup, the storage is allocated manually just for the execution of the bpf program. If the program is executed multiple times, the storage is not zeroed on each run, emulating multiple runs of the program, attached to a real cgroup. Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- net/bpf/test_run.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 22a78eedf4b1..f4078830ea50 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -11,12 +11,14 @@ #include #include -static __always_inline u32 bpf_test_run_one(struct bpf_prog *prog, void *ctx) +static __always_inline u32 bpf_test_run_one(struct bpf_prog *prog, void *ctx, + struct bpf_cgroup_storage *storage) { u32 ret; preempt_disable(); rcu_read_lock(); + bpf_cgroup_storage_set(storage); ret = BPF_PROG_RUN(prog, ctx); rcu_read_unlock(); preempt_enable(); @@ -26,14 +28,19 @@ static __always_inline u32 bpf_test_run_one(struct bpf_prog *prog, void *ctx) static u32 bpf_test_run(struct bpf_prog *prog, void *ctx, u32 repeat, u32 *time) { + struct bpf_cgroup_storage *storage = NULL; u64 time_start, time_spent = 0; u32 ret = 0, i; + storage = bpf_cgroup_storage_alloc(prog); + if (IS_ERR(storage)) + return PTR_ERR(storage); + if (!repeat) repeat = 1; time_start = ktime_get_ns(); for (i = 0; i < repeat; i++) { - ret = bpf_test_run_one(prog, ctx); + ret = bpf_test_run_one(prog, ctx, storage); if (need_resched()) { if (signal_pending(current)) break; @@ -46,6 +53,8 @@ static u32 bpf_test_run(struct bpf_prog *prog, void *ctx, u32 repeat, u32 *time) do_div(time_spent, repeat); *time = time_spent > U32_MAX ? U32_MAX : (u32)time_spent; + bpf_cgroup_storage_free(storage); + return ret; } From patchwork Thu Aug 2 21:27:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952977 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="m61BFBQV"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="iU51iqOu"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNd95l4gz9s0R for ; Fri, 3 Aug 2018 07:30:37 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731600AbeHBXWt (ORCPT ); Thu, 2 Aug 2018 19:22:49 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:49774 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727002AbeHBXWs (ORCPT ); Thu, 2 Aug 2018 19:22:48 -0400 Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LSxYh015349; Thu, 2 Aug 2018 14:29:36 -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=m61BFBQVB2DaB4dSI9jsUxD775Vu+EJSvjcKrHWzo4yTtIKl7vb8BefEfQ7tYphQAvlh jKMUwU2ck7N48c0BUPbwfhVWnxILj2PC0Fn8JJKxSj4RKI9s5stPV8tgYIA02WA4b+7n Kiertn2CxFs/GThzlvUy2guDw2NGA+YNYZQ= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2km91w0510-10 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:29:36 -0700 Received: from PRN-CHUB02.TheFacebook.com (2620:10d:c081:35::11) by PRN-CHUB15.TheFacebook.com (2620:10d:c081:35::27) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:29:30 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.12) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:14 -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=iU51iqOuTLilXt1kZHEx2W4wcYyh6iKh/S5d/lQF6gLXARtAy9HF5O6PdU3DUKYzkx9n8tuEvcdmsqZzc+6w4oGFUl3ILhU7lQTuY++RpZqgKMAiaXDiWwYkJ9ml8HuES3O7rX9rDUKcfPhGEcc04T5fTF0TyQPGSm3rWO8f1gk= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:07 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 12/14] selftests/bpf: add verifier cgroup storage tests Date: Thu, 2 Aug 2018 14:27:28 -0700 Message-ID: <20180802212730.18579-13-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e31f8250-d003-4bf1-6161-08d5f8bed6fa 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:N4tvHuUpMPZyDqzRSD1Fj+LyUzvAUqULhIebu81uJ3G4+eOrENw3UUqpvckjI1sx51e98u1LePA7qrEe70/DfdN8oH0YsWfNCUWrFdQQzGzvQVLJX7oMV61gZPE5wENkBmRZ6pXX0g4vARgi50W9xWPQreZPyYw0ZTD2r1xyOI4/I44iPGa2ip4ZFzwwtzAPTlKKB9Qb5vSJFxW1qcoGigExi7x3WuIN5ZWrOLBeYjNw6fmsJa6quIyKZcorl+YD; 25:00om851nFSL/1T8CtLnkiM9QSSCrNhqwURlobt5jvRiNo3UrMSr4sibDYWvyOEq9mpT1AS5sdXBIy6O//Nhj3tcNOoKVGvc31fnR/jW1jBf3K91iqrqkAkaCmFtlDkjyIXQjuFdjhuYpcpHojDB/Mj1x8jMaJnov7EoMEB5k4GLYCbNa40z9B0HNNGw+JmdGmCTuOE7Mr9Z+q52T18xvSaKMfJiLWCSxkuVHwoaeUPYihjUTEt/kBhh4F6hc+UFSZkMk5cRGebOF6/KHyBLpZ7esFcugf5zJ00VsMvtbPvYo/KFX5U6bLqbVTs/ocPyB4wJ8EWUHbw9BaMSxFQWoDw==; 31:LwerMmxDXumG/ZiSIffMCYN3XrPYaniFjdKbQSLitKnLSB7SxQ4JdGVLaP2FRX1a7xXDLHoF0GYy0aSoBD+JtqZQBOMXDAQcl4GkrBYVTXJ11PBlJU+ktW2zjJE28JsdrFrIuklb9E8uF9btglhKaM2Rkdu+yE+tPfl7f9VtsKYHzrRiRkoqShEEf8BH4ew5lRYTOGBVb+yr51CgZyEFUhiRjRyaQqsR458R6seZgUU= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:kzT3AFr5m/wR5CPs+9lc3d7uKBWglAo2Fth5SOQcRGrnumt8hbXTNUAXqQJ+HyeZAHTwxfKsrD58VNqyBfghK51iozN9ZS14Weyd9VQL7R8qW4qKulHwk42LZQXmrW8i1/gKoXQUSslKpyFbWfuy/EPa5uJPkCQBNHw8mOsyYjSbg7oo0DM+X54uvYURUQi/2UjECS98nAhAvMESbHwfC0O95bHcDewTAq3hY3EptppZBbkrekf0KGGYK81M7BvM6mHYUknD05ZHgVjnfRsGIQfEIDRIq8T+3n31Xr8f3DzgsZ0vRJZ7icp7jO43rKx2BRoKmgTo+aBrjvgQosWF82l11EBDbN6eJ0N3a8bCoWnguk+PODYJZbBpoRKYIlI3Wmi+ZzLX3jaqLZVjUnKkjbvEYUpjRIkt0Cr+k2PA6RG58e5qbMeNJnBLp0WkzXNwDoPFP2hKnuXbh+JETjbtSWzqeFI3zSua4xB2Wi5IU/+E1AcKgzgAjui+gVw1WIRE; 4:b3zA/6S7fx/17mL5KJCcv0f5UkG0lvCKz2+/Ia0Aq89wmFxCyeYP/C+9pzGGdtVxzOiLEd37sLMBzYSKC2asFHHdj4vM5Vmcn7YAva0YyKjQVketB0A5NgElKef5dSMfJL4j9f8HdNSWwUwiSOy+PDxdBqQXSWFoSaKk2DRi8oWXDm8IxmtkFKes5ZtoPHgKv3iy/lHtbtrsUC+otdMTdmHLcFPAaBoq5XffJKY+yZQH1GXGe4lFvlSSO0GHMlF64OQw1hrKRkOYE7Lq3BFBFcWr1RJNhZAA5mRILuFW41FhHigKGXJODsmUpRdBbZlG 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:jGQ8jUmfyWtjaDWD7v/+5z9+q00gIB2Ks1eyQGR3FYGLvMhnXfr3DoebU4w3jrJimKA2Tt05E2oNB2KOgY7NbTVGYNHzrDKMDA2FkMLVdEJ6cIaXvYb+RJiPXAyCENjdFoyeUj/ndnM4xEXCcBh7+9qA1Ma0be0cZS/BPpoB2VPYxN3moqU0FUsfg8NbNUSSLFBv2Wx6c5defVgjUosEhBNzPG/wqAn/zCAu8C+5hu10giNg00PHpZgxJ7qddIlDpXm0mbgCbDM6sKWQBrU7/w6CdCfIF8WiDLyLVq+3dtDzJEg2Xs4+OylGS/74sQs/kqy7yEnrTQcHYhXZW6OOOfneSu40+rLrYsrFUP6RdCzvkD/RzONKSCHE1buOTvhPdgjiAuxjElfSd4pyXHk+gcSZmNm12GtHQABLXkmjvgUsTs3BoXTiEvUL56FS/l/t3Q7JcHY43MxhxKCTlaEmgZiMBPAkb/T2Cf4txnFibWvBY+XBCui6apjMSwh3BzMVsIfS5X3QcnudWx5wRUOtyW+mTMIE3Ws/W8aRXKBtHmTOgt5lFD0hfjoLwMfAbK75YBO3oKCZWvL5euG8Ih9qImZ0441HxqcOkgri9gBuowRGhsjBuIBhOCv8cJb6FSV2kSMo35Mm1W7VvP/VAUJU5PNq7/TcBmDU3P6pvMPmHEJa6KgL3Lcn41pMNHhxF6K4wvss4mqr7l8V8qGphtTXuAwGPr/cdG83SPd63y6Z/EjN+RGZOb8T/BOsqqW+UkjeLFh9GwfdQlwDL/L58bn9vwv64BBfrcoUi/cad8X4XG2ed0NpeFc0GXycdeMU+3uTYFOKTDQsRwQ6+PtZPRCi2l9K5NqV4Y/PAp1XA/pVJpwzjIcGmPgdGlV7iixoAEdfjvyNNiDwEy+Mb/4XMS+LXQ0FriuBFjpj1owj1GpQ1kAzGjcuPlE+5hb7fFQM4RK7O63659yr9Wc6KBHVoFd+GpJZtcajw0rkK3TQwy+1151E0R0Opxx20WCea3H6WM1yLjmyqqLAQUF4QmPbGMZnUvnrzMjGhON66cVAqQKikZYiXOuS9WPLe47X9Dl7o9NG9zcan7i4L+z8AOyRwpfokp6m7TQgBF+GLIMpU6ZZRXmCr8SGFL8vLbqOuFmwrSrPhR2QkPEUnjCDy2/feHfFChrIwTjiRd/mBjB6JHWpk49cVg+65/exu6o+RIcfE84wdtEwgH/PA3XfpudZURFWzCpe2IkPXWCHL9PEiVemPjCbmpbV/Dn4IMIrGQFEsBaSbmFxpnGaB4SeK5tE7ot4YA== X-Microsoft-Antispam-Message-Info: 7Dh9kLAz5Ya1Ah6HP9UbEIXDgnfFQYXb+TcdnGRY+KQNOzw+MBPNehLMnSnVjYkJY22UD8uPyyDWrsvQv28C/j0MDJr3qlPSqHsiClPVfIRiDixTjhSiQtHyFRZzaJ4vRHY8OJbYaehXGIjejDS1YplbPMY3nxYeCVcf+ymWcVSzzWak0shBDKi8HviK+o9ztrM0e+otj1M0LcjX1RlhaQDay0P+rKMTtcQ8f2CkfSFh2Bh96BKfUxI3yQQimmd3gAUiretC7NyA5XuBPCVa9nBnOb/Ao+xIJGQrfU2CeqEeF5QZha8fsgmyGyhSfGB55i7qLsHY4/IWTeWtzuEoKNKq8Q5XUUJjDm3vZkQLj9E= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:uPZkcAflnHkOpQ9M9Ym0clKuYon34tM+W0TCjTLE3y5O+cKx2ZkCMEZg4fRwSVXLrRPIh7XLFRq2J+PrIVitv0pEhoCBrxSuBIbC5xz6gxkDpCx2U2Y0xo6BzC6oNvjNmiw+u8PfZBfs/6La6XTQArygulym9C/ygkBVjivZLB1uQJjvINneVK3E2bozvFIIXB+ZSnZJFntMa4sTOO7KtvU11u23xMFez6UTigCb5JuYgtnKbcZD83bHy6Kk6tx+rKrgMhXWKqQb9T3iF7GZ7ZmMvHya724Yv7UaYPYMahXOSAVo2Wg3MvNxYKF/OZ7D4aGBIHcvBeNNCHWk7FoGnc5KlGKJuwMQgSmS9hwuhn6hoktrtDWq7p4eBhnG05TtvbWQHfNJH2thn+ypPo2jyaQBNQuigx9zyiEfwm9MshZP9rjDcfOaZcpS7ngoL36cH2Z9RLCWy7cix+TEVxjQYg==; 5:KrXLbFPQJSubQhlD+3jPa0icERq2qRfRjPBUgoas/6iZbzoNeyNEbXVhDp07xaOc3rdViDuQGpfBLZg5eCGpF8SUgkI0lnA96VbrH4dscrKazs6aSchiQYyL9yH1Oyd0iNqWYr4t0bTbCudrorCLi4xhvZ7VubO6P/jnSggoSuE=; 7:ud+9XCH/snC2IO4n/cz2gIC4Vw5bJ7WfhnRETQp7C53R9VWff0USxQ0d+cNczqelS0aJPXPPEgj9WmSqOZFuZjGjnqKePWyG6IHZQYuDw0shoW4fiQ8gL+dvT6K6JY1Ymfdvr8E+s7tZCrG1Ytx2mi+FmqfbD1+1nPtglHmsp/TA8FBFpJN14KXDEaORZv7LAkeENQi0uIUx6FQ2YCrD3nKmDdqEtSF6VbU77m/sFRMSA8QhtyaniCF5UKAV4Teu SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:TAWTnFJmio8bNyLl0DkdwTZVBwD5Rv+1+9rSC7JrnVsqEKsTCf+EanCzdmTgVa4m95+1B+jlNFLshrfimJ/1xDZlPawoPlKwuiTQRAe0zSMOfbpVgVrHA+gK+yVcBH90nDN7k/5FbDiqCRSbM8ojNDxnuYDNbFqfa2BGXD+1+pA= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:07.0314 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e31f8250-d003-4bf1-6161-08d5f8bed6fa 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@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, From patchwork Thu Aug 2 21:27:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952975 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="Rt1W0o5d"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="jK9ek7Rm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNcY5mb8z9s4V for ; Fri, 3 Aug 2018 07:30:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732469AbeHBXWz (ORCPT ); Thu, 2 Aug 2018 19:22:55 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:49822 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731995AbeHBXWy (ORCPT ); Thu, 2 Aug 2018 19:22:54 -0400 Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LSxYi015349; Thu, 2 Aug 2018 14:29:36 -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=wN4b03mUIjFj1mVVo4b5WEqpVw8p04Oc4S833N9I6CY=; b=Rt1W0o5dofsMQZ142Qv6ch23i0ngfGwWfuFdDOLMA02AMiEf51aKg4J/tc5mREyh/1hH 8MsaIUxKmDP9sdDXVnOOCDMMn+JMtXHDMZuNjMd3ZQA0atEQ0G635NRF05RU4e8JlkB3 arwAepj2f07LLZfESHrJKUspyt+XvlZzmhs= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2km91w0510-11 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:29:36 -0700 Received: from PRN-CHUB02.TheFacebook.com (2620:10d:c081:35::11) by PRN-CHUB15.TheFacebook.com (2620:10d:c081:35::27) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:29:30 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.12) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:14 -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=wN4b03mUIjFj1mVVo4b5WEqpVw8p04Oc4S833N9I6CY=; b=jK9ek7RmJzfZ6aGs37tlh1YCeEFolIjJnsY2d6YBJcBrWEuTcszxF55RhC45qO6fSg3JV0NZyL84gxjGRCYxjO/GzA5D90f5SyCY3aR7DKWz1G0WuodYxixMMc8t5A67EN5kJIrywzCC6v82ntbzzADQUlUQcad8lAMZykX0zzE= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:08 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 13/14] selftests/bpf: add a cgroup storage test Date: Thu, 2 Aug 2018 14:27:29 -0700 Message-ID: <20180802212730.18579-14-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d8020663-f844-4e8c-0543-08d5f8bed79f 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:/9AM+8n2QaYVOJ41Vg3qkOa2V6Cx2Uw4fskVRGPQORwJqcmRalL5D1XkeYKbk9J2v6idgcSOwUN3A3fP5USSGYJbjvwCx6NaCtBEqcnT3tc1P2hSjch5wbloEbtGp28ORgjlTezKCQwIq2nj/Ie90pLkVyFr25ZI1tkjLUhZozleT+mqAD1Gf6GQ22zOulNN4eo45cIxeXgMZDZJL7vghsaeplyP4LQfq/itWoFlOXTbsdmplhDV3qHYCD6y/XQU; 25:ThGvi/3sIRgmnjiWmenEtnKFcdVoFV8HRQ7RBBQmsmiGmwvyH9der67uFDj91g8JpkKJzlCxnY94ltY4VR+cZu/4WoC4+EkYaziIVOMQFJ2JzSvLBREtV6V8UTzHoA89byJbA03ewDGwoTCXJdHd9yOFV3Mt8ztGrLYS1fn+j8lYgdKSvnhTsket9m1g8GldoEumim0V0I6TE1KDiuyb9tMAwa7J3QxS7R13EvhxqngvKJNjBSrFx3SYW7hOY4x89rZ4Br7NtKTX+Txyq3uIZH0ypoCMR5msut6wUXjL1IzlUvcegvJ5Dyf1qIvPpG7qMUkMTp/I8zN6CqJrw8or2w==; 31:5g8hupDJJC/UAAUVHx8E7BrD3j9n8kxcO50tzfhlIiIaXbE1GVr3Dr2mdsdxoAH3UAoKPMYyqG1g82HPql6CwHfzQBoppGQAERE2nfKxuf3bYvXoGJE68+3cK3+GEUYVDDu1DIGtL8KF7iaYO3450E4rg97czn08Zi7j5m/2+GggP6OxhYLtMsaf/HknTSAS+0BO6N0q/jUOEje9nk4BmAupF7H7j5u5E9MThmC5Gfg= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:TDOqU0Xasryblj9PZtz0uGCfr8sD7Am1YYqlliBtjAdwfo1ZCh0dVr10XdfNg5Md42G74tItphF5BIXBq6mR+TV5TbrIAkB48+y4h4VFA5pIhwq5RuUOYPU84a1+ETuV42j7kfBNr7Pv/7ouzdurRGRuvIioILDzvFF6Yecs26b0w9vT0Xf7fsemdh8IRALAKErlE/l6gz/6pX0ZFF09CPWwMivmtrb1ApZEILbiXf4a7bPYu8oD0qEALKGvD14JETEofFvwBr4fQgxSV2anLeJKbTZ89/Hi1PY3oSkPFzkYOViCwaSxtwfGrBhsfUVXWMGMn35+3yqTHJzrAIUdii3TIg2RGw4Hs7gE1eBc9pJSHwPTob8hRisYBVlTx3AmXu85xIfi0txVzxDt+YZAGxSPqT95vnVkhFujxRkw3JegDheK//9vIThpZfHWgrZgMbTolSeNawBAg++W2y3Y39QZds2sAypXrRCILDrGUU3FyHybAwG2KlDdOlkPdU/B; 4:1tHjKdyzsdYsmxAImV9C6b5ruPpZj1HGdK1QUxJ7jQlGbJUb/ioZoQ24UUqgvaAKWe8ap/1T5OCyWG1uTLlOmcJ3cwM4lbcmMe5+ObK2ca1KBi1sY+ujPQKWTP4tM/cdIpf4OwPxSlCSkDM3VL4cTVxeRG23ta9EnyxVezT+gJ3nGRtCaF5xRl94wfjCtzf7nwEkNwS5yjoDAZ2If7voTUvEufrCzprHkhvn6D60gefcdbgxFk2D1AgIl2sfwd3oNwKgmgQL/BlE8xsM0l14sxNVlZcaqzx6hCgkj90yWUu5brUNLmGfjsJ+k3guxuZJ38UnTuzWO7EhB9vNg56FaxkKCAedrctyj4yVLxPBSz4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(265634631926514)(67672495146484); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(1496009)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:wr90zmpG8yVVmNN0BrbrZuETICsNx/4DAZETAOHGfdi6QnTq+kwuS74YPmenxcwPpztyaSlm6+0c0FCh2Hld4eyh3Jbn0SmPnrfGzYktjgBBMLGlvtbmN78t4l4JNmMelZrjKQo5IqZA8eTjaGszZckRaz3YnlzE/k1AnmJ1ehbSotqinD4uGnuvAE8U7GntMenoSVppb22UAIyi92PK8nn3x/KWdsDqSMC39rduje3YoiV5vug/qQjimEW+XItgdXqvOAzRh+A1SutYSe/61d33/5yjqdx1D7N1XhqnLFG42GCsTXPtl9KQL9QdAFubfgZRge+mEMpLD/D+pFuO6+90IIxHdPwJckjWOSjz56ClV+ochm0Xw3xHc48//XtBTBvy87CcN/f7aYy9mJpPggEe8fTgFLzYnMSrOM6+KojzBXbOqtAxmAzD+MX7+59+JmTZBNNclHN/rN/0pYNNxd7Er5TSpNNaKbMto3G392xlcfgoL9izkU/g0fAlUWrOKygM4oXQdg6I6wlF7of+PXzXAsITVIF2Wwo/UgsYa/gA5jg+W68z4vD5AHj902IbzPJ3Z/ijQsnLFDzwNR6WUSAx6veLhEgSvfHg4yADzx4+f0uMO92bxMP+/xQuJbCzy+BhmG7EzSw/cMojYgxxQbiPkghlgYsg5MtjFbQhWJYcori20KBPleMUAkb7zHmaidQIbJZCreFsoQ5bp5cLElru1WvZ/gviJ37CQz9ocidLZ8n1sxcgFYphXWtswyMzyJaps8DIsY2TGFhb/q2laYCDq+RGi+8iTr2sU5szxZ0XmOGe/eh1WJODcyryJ4ABxfHzuREcringWj6gqNy4mnonKdHwL8ofPfDjmACFCDjuk98vJYSYG4WOIeSbr+5naMl5vNPwL6/jSlSG5uuKAszSYeU3EIDf36ZCTfgLnZNyOwTdcIBIQR4wkQ3+PoYelwk6goDvijpkyhgPyMjJDM44G8K1RGY1ufc/C6XWNePTyyoJnazzdEgAwDGu4RUZ9dHIj12EeBQAuVFkek4ftkijl3hP+1x0qGx1PZ8VHVD22pLAJTQAtOQEjElgX9yEBkttRS7wAAGlBLbnvuBLbnzIC2GVd8IyAafgee9yC1ZL1rcEFF6sgmg51iHetbwGK4iz2wzNEbjJE5GXNZzqO5z/GeOQxAgigJBA2vj34YWmrCDGTFOj8EHV1DZAnnXcRAnDlFaNv1gQrNWaxHA5nfemAeUqzJV538KZKmw/rafjsXLfeIst9+La7ZmGYyZp8+++/a0c5eN8148U8N4ok8v3mCOiZkaAxMv53HGNoB7ehbfGtkZ8nK2ikoJrKbtF X-Microsoft-Antispam-Message-Info: 6EJpyaUhJlBtBLIOXEhAr9Z9vQ1vKifOMzHGn1qfY7NKOUY9P7MpI4Z8SYzFQ4MByQcFjSH5/m3Dkbg7e3hT89z+vS/PDHXTdGY/ZdoWyyIYViOgNGpfeiLHWJd83gKsugpbyMGau8ckQKFLdlf9aW+88YhyWJH1EQtrUiNAjLNFVo9DFaCpuFEmjv+GhTkYKzOdSfaeKDYGZOxBcIGy6Kbi35QKJzFf9iEJY0FmW6F+un0lJ71M8yxYCfNvV2z1HyFpObD/7EtIFJZlcD9ctbO5w02g8bykYtmWlAO8zxpw7+PhHryNxLWCcpHJP4KmUHOyo97gDlUQUPAiKKIZw5Rmw3pZWg6XxMNcgh/ryFo= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:dgr2+A1r31eIiBrOGP1k0WtxOZVkkMCmKAcaXsVE1JXBmr3E2I8ON1e68ATPqUHFcTvL7pNfualoYyy2Tb7HZedW8AVS8Z8q7qJHW/GQ1hB9KuHbfYkX3l2P6ScB+INE2ACZm9TxIa+ZXnBjPW+rBmFOLPdyBvRiqDuIf54HwKWm8bLfJ30HfR6r5FsKj/M9+QnvcDYI1rlNVohXnb1Xp2Me1FQ6kEzVXCkLYUoV1Ztl/k+3+qNe1pRlunCroFzl/ULUflo2pR8jANviiNilP/o+M3Ch9zshgvXB4zep0aqBoOcNBeFKEj5/vifFTVF65Kb7tV/JcOF6W6ED4LA2zuPbRLthQd2M5K2B7zixdfgABu4KnRBZrWyN2lxBOLirRuKRubHQJQ5HvAjjTzNzPkxaEz+Q9B3ezn7LMy+HmKby18nxjmIh3BrZzzWFW7B4epF/fBewXR5aamYuuB5/rw==; 5:AeOxTlEkTV2sLodCJ7L/v1AvOYfH8BSs38Cy6I39nLoxNaO1c4XfZDP7IQo1mikewFlIp8lhUVNUBt7Dn1uIpHvbN2BBHsAw/S2fwPMLa+8kFYm6Ye/C5nhs/piiemWvYGVn5wifT6SSr84uVHEe0k0fXh61tY+T5HcLwj4/nP8=; 7:4cWleTt6V2Yl0YhMyKjtvtnK/Aeo5wbhlhKPniBlHe0kSoTZA2Zb6yxeB7NzFzUGGA4KTzaoLEfdLk5RutoEp2srqg1sPolOglTksPGBJLbL0eXZ86L94Ytl/+BOHO8p/4hC4He5hVl2MI5y6tRp7L3TExYz+Elz1z9bZdEgV1CvvP9eL/HQwKDewCht9wt3KthDB6K2eRWEyz6ovswEOS629MwEVxD48mkG9UJdOiV7QzqXMGMFRPR/S1bUC1by SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:Ce0JYcki1WCQG8OWCPVa9Go9Kwc6ly9VtM7M0CFgfXCmPsy6Iax9YnCJKi2HxP6K9r52JaMVGC6EncEVbNsSBLjify1H47644EyXmBLW6VPJH42Nrmpi/sdSXWSDqRpY5xqAltdDN8MRjBh0B4MtTB0DpxzZ23yCD9iebRGWrZE= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:08.1004 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d8020663-f844-4e8c-0543-08d5f8bed79f 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Implement a test to cover the cgroup storage functionality. The test implements a bpf program which drops every second packet by using the cgroup storage as a persistent storage. The test also use the userspace API to check the data in the cgroup storage, alter it, and check that the loaded and attached bpf program sees the update. Expected output: $ ./test_cgroup_storage test_cgroup_storage:PASS Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- tools/testing/selftests/bpf/Makefile | 3 +- tools/testing/selftests/bpf/test_cgroup_storage.c | 130 ++++++++++++++++++++++ 2 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/bpf/test_cgroup_storage.c diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index 1b28277998e2..ad241ddba350 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -23,7 +23,7 @@ $(TEST_CUSTOM_PROGS): $(OUTPUT)/%: %.c TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \ test_align test_verifier_log test_dev_cgroup test_tcpbpf_user \ test_sock test_btf test_sockmap test_lirc_mode2_user get_cgroup_id_user \ - test_socket_cookie + test_socket_cookie test_cgroup_storage TEST_GEN_FILES = test_pkt_access.o test_xdp.o test_l4lb.o test_tcp_estats.o test_obj_id.o \ test_pkt_md_access.o test_xdp_redirect.o test_xdp_meta.o sockmap_parse_prog.o \ @@ -66,6 +66,7 @@ $(OUTPUT)/test_sockmap: cgroup_helpers.c $(OUTPUT)/test_tcpbpf_user: cgroup_helpers.c $(OUTPUT)/test_progs: trace_helpers.c $(OUTPUT)/get_cgroup_id_user: cgroup_helpers.c +$(OUTPUT)/test_cgroup_storage: cgroup_helpers.c .PHONY: force diff --git a/tools/testing/selftests/bpf/test_cgroup_storage.c b/tools/testing/selftests/bpf/test_cgroup_storage.c new file mode 100644 index 000000000000..dc83fb2d3f27 --- /dev/null +++ b/tools/testing/selftests/bpf/test_cgroup_storage.c @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include +#include + +#include "cgroup_helpers.h" + +char bpf_log_buf[BPF_LOG_BUF_SIZE]; + +#define TEST_CGROUP "/test-bpf-cgroup-storage-buf/" + +int main(int argc, char **argv) +{ + struct bpf_insn prog[] = { + BPF_LD_MAP_FD(BPF_REG_1, 0), /* map fd */ + BPF_MOV64_IMM(BPF_REG_2, 0), /* flags, not used */ + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, + BPF_FUNC_get_local_storage), + BPF_MOV64_IMM(BPF_REG_1, 1), + BPF_STX_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0), + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), + BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0x1), + BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), + BPF_EXIT_INSN(), + }; + size_t insns_cnt = sizeof(prog) / sizeof(struct bpf_insn); + int error = EXIT_FAILURE; + int map_fd, prog_fd, cgroup_fd; + struct bpf_cgroup_storage_key key; + unsigned long long value; + + map_fd = bpf_create_map(BPF_MAP_TYPE_CGROUP_STORAGE, sizeof(key), + sizeof(value), 0, 0); + if (map_fd < 0) { + printf("Failed to create map: %s\n", strerror(errno)); + goto out; + } + + prog[0].imm = map_fd; + prog_fd = bpf_load_program(BPF_PROG_TYPE_CGROUP_SKB, + prog, insns_cnt, "GPL", 0, + bpf_log_buf, BPF_LOG_BUF_SIZE); + if (prog_fd < 0) { + printf("Failed to load bpf program: %s\n", bpf_log_buf); + goto out; + } + + if (setup_cgroup_environment()) { + printf("Failed to setup cgroup environment\n"); + goto err; + } + + /* Create a cgroup, get fd, and join it */ + cgroup_fd = create_and_get_cgroup(TEST_CGROUP); + if (!cgroup_fd) { + printf("Failed to create test cgroup\n"); + goto err; + } + + if (join_cgroup(TEST_CGROUP)) { + printf("Failed to join cgroup\n"); + goto err; + } + + /* Attach the bpf program */ + if (bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_INET_EGRESS, 0)) { + printf("Failed to attach bpf program\n"); + goto err; + } + + if (bpf_map_get_next_key(map_fd, NULL, &key)) { + printf("Failed to get the first key in cgroup storage\n"); + goto err; + } + + if (bpf_map_lookup_elem(map_fd, &key, &value)) { + printf("Failed to lookup cgroup storage\n"); + goto err; + } + + /* Every second packet should be dropped */ + assert(system("ping localhost -c 1 -W 1 -q > /dev/null") == 0); + assert(system("ping localhost -c 1 -W 1 -q > /dev/null")); + assert(system("ping localhost -c 1 -W 1 -q > /dev/null") == 0); + + /* Check the counter in the cgroup local storage */ + if (bpf_map_lookup_elem(map_fd, &key, &value)) { + printf("Failed to lookup cgroup storage\n"); + goto err; + } + + if (value != 3) { + printf("Unexpected data in the cgroup storage: %llu\n", value); + goto err; + } + + /* Bump the counter in the cgroup local storage */ + value++; + if (bpf_map_update_elem(map_fd, &key, &value, 0)) { + printf("Failed to update the data in the cgroup storage\n"); + goto err; + } + + /* Every second packet should be dropped */ + assert(system("ping localhost -c 1 -W 1 -q > /dev/null") == 0); + assert(system("ping localhost -c 1 -W 1 -q > /dev/null")); + assert(system("ping localhost -c 1 -W 1 -q > /dev/null") == 0); + + /* Check the final value of the counter in the cgroup local storage */ + if (bpf_map_lookup_elem(map_fd, &key, &value)) { + printf("Failed to lookup the cgroup storage\n"); + goto err; + } + + if (value != 7) { + printf("Unexpected data in the cgroup storage: %llu\n", value); + goto err; + } + + error = 0; + printf("test_cgroup_storage:PASS\n"); + +err: + cleanup_cgroup_environment(); + +out: + return error; +} From patchwork Thu Aug 2 21:27:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 952976 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=fb.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=fb.com header.i=@fb.com header.b="ij8AdDh3"; dkim=pass (1024-bit key; unprotected) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="kHI6ySmb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41hNcy0jYKz9s0R for ; Fri, 3 Aug 2018 07:30:26 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732291AbeHBXXJ (ORCPT ); Thu, 2 Aug 2018 19:23:09 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:49826 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732280AbeHBXWz (ORCPT ); Thu, 2 Aug 2018 19:22:55 -0400 Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w72LSxYj015349; Thu, 2 Aug 2018 14:29:37 -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=ccUkIiuy+r9fHc6FqtW+NV/batrBqZJEIjW+tLZ/ydU=; b=ij8AdDh3POYCWHGyZomlLyj486JAWIvRDaVKX9KGRi0Qw/rw2Q7/KWp+I8sgmDxhlnz4 VojGNRC7S3k+id5vkvX/i8Itt5i9rW0fUTWb5gkR4hzuquC7kT9N3LsQ1EjmKr460PRG UL8frHTTz05CPYVUABRk/sC1Q0zGiYOyOVs= Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2km91w0510-12 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 02 Aug 2018 14:29:37 -0700 Received: from PRN-CHUB02.TheFacebook.com (2620:10d:c081:35::11) by PRN-CHUB15.TheFacebook.com (2620:10d:c081:35::27) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:29:30 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.12) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 2 Aug 2018 14:28:15 -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=ccUkIiuy+r9fHc6FqtW+NV/batrBqZJEIjW+tLZ/ydU=; b=kHI6ySmb8tHgSYlwWG/GrSXJzNV3max5cGd4ZoRrtk+YYNVbYmSYCZBr1N4OhsqEgWlcg022kXFBF/9uPaeINiaCBDezLh5ushs07UC6nkR6a066N4BcmcTwNdulL+HdO7bLUqYe44ilFP/Z1TvINPXONTaXUpbXaUzdGiRzWdE= Received: from castle.thefacebook.com (2620:10d:c090:200::4:6653) 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; Thu, 2 Aug 2018 21:28:09 +0000 From: Roman Gushchin To: CC: , , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann Subject: [PATCH v7 bpf-next 14/14] samples/bpf: extend test_cgrp2_attach2 test to use cgroup storage Date: Thu, 2 Aug 2018 14:27:30 -0700 Message-ID: <20180802212730.18579-15-guro@fb.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180802212730.18579-1-guro@fb.com> References: <20180802212730.18579-1-guro@fb.com> MIME-Version: 1.0 X-Originating-IP: [2620:10d:c090:200::4:6653] X-ClientProxiedBy: MWHPR19CA0058.namprd19.prod.outlook.com (2603:10b6:300:94::20) To BY2PR15MB0167.namprd15.prod.outlook.com (2a01:111:e400:58e0::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9140d947-5dca-47a3-fb0c-08d5f8bed841 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:GZEeCKoXtEf6WJRB4SSDjeoEdM8/EVyVEqXB6GB7M4cnAuRsFaJEpY2gdS4lpvJkUkHasyulRR62BLuWqgjkqYSdyqGcD8X/DBGZC5LdQ46YFAKzaOGtsgVo8QFq8klhBStB75NnXZ8hRqvV4goFLNL4KCzHls68DYztyt/5HTfog5vTTb2ZMhEihMfdt8N7GMh13xgL5XeQ0A/0BECEcwdOBeh+2G/qguTuyAyaHINpjtCtUN6AGCtlvQDPPD7+; 25:S0x51iU72MfoIW/0htp5fTEnWkZaaHQyJygIFCMsaTWtpXx8CoxW/EAZcgqz6EShvJ6jlwGZfSylCTI0SQsFMv4ZBab7eb+MhIp9iWPtr/ZqaXG5Ssrhh77Fv5p0joOu5C1TnvbKLn/eRDYEXkQ39LX+L1+I4GgPDtorzA17ckn8wMlxG20ZObDDeuovayC2V+4AzFkmqGtj6283KG5PH7pwRgk6GXuxkJ4TkD1sb9e/PhUjRAVTMDB4zxFndAsNVKRZBWDLboCfTc8hK4a4dYIwgN1azdVcTx3J0iU7Zk6pdcMsfOJvvuH2n+6c3EItx8k707fG3k/vUZlk+AwD8Q==; 31:nP2SuvUi+rDxT8+/TKdZtdShuVBCFBOXl9LPo2cvQFeg1DDD1726CghDEEZE/ZO8NHO1TO39T2XAKQX8ReFDAMRt0j23uMsMMUkcnyAOumKCTj0/orzoOBgsEHx7Az5p6PYgO8dBRzQe+2LRSEuGWrrWsflkNyhiN3ChLHAr3AlJLMofWVdsl94zD+xSIRJVK71XkdWHCeH1XVgPtlXQU4V+CmRIMoOxUj9Kibqr+0I= X-MS-TrafficTypeDiagnostic: BY2PR15MB0167: X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:Soq9fWYbgFCWeOCSDDqbXhsVo354dnw5zE9Ud2oCOQYMdRyrndBZnXfdGFfUaUQlappNospHcMNoYbMGXHjyIPIxbUeQy4vykBbdycL/G0To9RNfA81AbU6X8rLYWUMBLJKvE7RfxFtYujSiULYusisWjs5X/XNjAG3aWvpKs8xuPVN1vhbcb1nG32Drth51kwHDWgYu4zsXI5Tu8Oy2vWzBy8sXj4bvd76hrnTqBMBOASt1AqNvBq+IOTsKTwakbMDOfgcThlo0V3b+FkJTIGxF8bL3rWDuCY8xMOTwdcz30D9A7N+J7muPa5AMsC3zmHPYrv9nLQ8IDGYMB7G0sLAA4HvXCRd/bvuqlufzY4Y73EzMFbX9TXARiGVK3CV/HZ00AehXTD+2HkdQYfa0BjMT7Y/LaDOT+rUMhMqE/I+5nndUjHBpvyA2BfCGoCXi+iJRvC01fltoMe2jYT/AgLkxsgUOSU7exnynb9feNf+8VgNhxWijK8OijqwjyUPv; 4:eYFHcF1zKxsfpSZS95/lkDZWKDqhXFEruK6VNPutaSJxk7mMBam77zALtgltnQ7I5PlgMhZyviLObnvrarU6qqHzNO+UkNT0/oQcG/FDABjuzplvGTcXso6eQO/92EfHreD7U1upLnnLIyKcXxNYkEjIzj+J4kUEyarMHf0A+I0OY/OTobBROTPAum/+IGiccY5nMsoP0xIVOnGWiyZOaKwv6wl5zv0oNOcfrh7RWP30bGzehi6C6f0Yn9r/claeQmpQDexZiB5FWa3sRG8/clEK+yLE8B4ariK2jDgb7TijLl8KinyUKN1lXhVmeIZJ 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)(8121501046)(5005006)(3231311)(11241501184)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BY2PR15MB0167; BCL:0; PCL:0; RULEID:; SRVR:BY2PR15MB0167; X-Forefront-PRVS: 07521929C1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(1496009)(396003)(136003)(346002)(376002)(366004)(39860400002)(199004)(189003)(446003)(48376002)(2906002)(97736004)(86362001)(1076002)(305945005)(8676002)(186003)(8936002)(11346002)(6916009)(6666003)(7736002)(486006)(6116002)(2351001)(476003)(14444005)(106356001)(5024004)(81156014)(2616005)(2361001)(105586002)(16526019)(478600001)(81166006)(69596002)(47776003)(46003)(53416004)(36756003)(316002)(53936002)(51416003)(4326008)(52116002)(50226002)(16586007)(68736007)(54906003)(50466002)(52396003)(386003)(6506007)(5660300001)(76176011)(6486002)(25786009)(15760500003)(6512007)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR15MB0167; H:castle.thefacebook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: fb.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 23:gK8odwrWomdD7Ql1+Zs66G5qK1AXQguW6okkIsg8ZYOnQpmu6ZmgeKf2Bqi3E5h/Eio1HqZTpEMvwQktahg4HroqPghaac6hSxAWeZmk581pSDSIOhnm+HyJYl4HJZaJnT10woAREHom7A963w/ltSAO3ewn8vwwZMvGHCVX8EuxG0Qn0Yn2Jh0Yk4pb84isIhkwQlAH9jiNIwwYSDb5o6x9YMlJhyi5rYKJKiop7zbeXI8+tQUm2gjpT0lSCkI2mnTgvVaUKAxTSK4PV88iZghHXBuDprY+fs95qynE8C9/aHRpjnhatuOw9yqIiTzlZQvBgIV1A/vPIXlaDvD5HWYpaX1n8xYfPyYJGWEZUOlCQ/TTLoO3iyM/OIBpObDb11hnlrOQXpWDmdvFQGuywQnMTg77UYhqxFEsOq4g9NQtc26jU9JCiQ1ahUZar/Zpk9Py3TNPWUFda7efH/v5dEJtWnrAiD4ABowqSjuFRfkU75Jh4j6xeLXEaEj1ZfzaJcUPiYiu1eclZTEv9qHhKcAAsO/GNDny4P42bgqgofXQjxMW5KT/dZIn9CnqlOzPhzCyvkjPEmzD4YIllvx5KtsNNPi2V0yPZi7FMQdpvXVM/mywAQKeBgbQk/ck5IQPj4WI6tKEMkM1DmtkVXmQGR5+M530Cyy+OqtNG+UV2ASdwpJtCsNq7+bakyY/s9j/LvglBCCi/fhLfRt2wJOb1efGosBabpla5HWba21aFKiaaxfQRlVg7O9YWwtDdfjbGtUnkOHG9pOXrpWm53cDqpmQEnHFKTBeWsOKfQAA2P8N9lnfBRRTcIss7QfRH7asvNH8Zg+Mjk0kvCZV/lo0c1AC9jG7mp/Z9GeBcmk4yXzOVBEFXO2L1QcfpReGGQaanb27EaVCr+vY4qaO+hFo7pC0CVP/SSnEoqNdqlduQrbVLfv2bMQw6hHD9L4EknXPXdrjeNAL3Ct38sTndG7fc38JASQuLVVLeKzk0TOzdshYRLijk+Q0TElckRWMtbZWCc4Bl4rvurwl1BgkfMEvxFbnzsPEMn6ajSRaZS72cXoMhc4C9LMYaO499trijDg+BGJBWHj18FnGIBKqkIjnQdF592l7FWL1hl+GpVwLoTeN2WNtc4PO7icHPsCF1+rcxwMlyA6cqdEhFwNKgxLYn1wUDH5bZ9RwRAGYcyi/BJaMe82PbsyQs2SzH+KWUF6a1J8ijWRQdmdtMpqFJBiCfImYe1+tgJpT8XFQW5iQgyjredwi7swTD4KBMge6KYC32/mtxBWUlgblSbFiTze9nb9hviSSpkfrrVCOYeIhKWlfgoH6vyRZsGtX0DQhP6zedB7u+SmmAXzGMcHrqKJxEw== X-Microsoft-Antispam-Message-Info: dzYJ7KdRgBizS6K+ijTKPwGSGSlMqAf/LQrtWtJ1oW/8LPm9cKV3ksww/pD2NEMsifp8bvjhtGxE3U806klPlTukEWsN1E7dXqXsCIxIdQuq1PfkYIjYaMItUJ7NPNm2fJqxzIxVboTfaWA/mH3FRkzT6rZHoKPvtoF7a1CwF6JigZi5UZIQ/hDjCZ8xDyfD64uXjUQL2toumj0YPbEsFL9TFkqL9LPcqDVIdKsNdijWYaBXWqyEZySm+MksNLOdxCRC02G75Xnot9Ewp8pzGwqZOSt6Rxi3eYZn99CQsQ522PNkJwjdZZzqBMkHx4uJrWvWoXCzsAsi5hPJ7KAc5udmFT6l128YRN8lqemI0yg= X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 6:Du+Dxizmx/5eYp3y17+C8Z0Xk9j9paY5+SGPjnZTBG6Ewbs900TVjmSh1V57GlH8jVFqd5aXP5be57IH0A6BAENHsEYJQeMtfMWkd0QM1PTvZILmKwvV4I3V6QNmqwZkDWO9t1aBn/rKnigF93zHF0dCaBA8IsiBOGAqPzLZB2HWXOxFbF8ZEd0JL6k+7nOrHNqwwIIRb1D30db3j6AXEb25MQo8qvM7NZmotgM8wr/kqAnf2jA9A7w6fEds2hBXymm8mZEtClIafwiCxuBIx1PoeyKTUytieCYLIFUYosCEML5Xx66t32gTGj1CpylPiJ+JEI69RWQ+9Y8OxxLZCBFtyb3uxyVs6Y5rXwYsYYPYrvwMS8M+pUByNQHHCHUFRGGo445PLRxbpkaTLiqbTCIXTQIKbeBjTfz5U7D7kN+HJdyYXDYt3QgqxALuge7TYoobDcjHQDtRwPX9h0nVtQ==; 5:nbOid0nadscLGeO72XYATnAkUcXfOAjAFRNiQZgP8MMTo00swexnNJrft7FiLqcdD7lAIRLhH1QPkXeqyqF7H0a8eEkEovnZrLBcCrKo/i9NsL6LRw9z8WAsqp5nlBg5WS8oUfzQJPvxs2jqKb1jFNEj4t17Vp86HAZM9ZYDkn8=; 7:GnBtdLw3iaH+pVk6bLJCeZDMLG7qYm7cj50+hXf1IWIk0FWNkvcPUu+g74h8hiRfjXBpczfk2sxhp0u10QED9cotklX3VPyWNW7QRr9I1hZx8D7DOJIYwuhK/0eZPsl0eZfNGknX+TDDPWKXolNcQx5PB+MQZkUW4U9vvrIp5UHYrbibWY6zZvQYXACHeMEfHF3hSzb/V08ad1SH2KPNcuoTDdPl8jXxHKY9IzMugip7SVTe9+WeIT2PN4Ws2muI SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR15MB0167; 20:LNToaar1PmHkXV/IRj75DT5XBYDaeBcEpnG/YLhvJCiYm7haUy0GoxJsD/U+JSyIzTlIygQKPpM9UwO7qcB31tV6xnot1V56i5m8CBom3KZdIdLi+B0+LyLtBi5IiaXrwrgriOz6eUA6uYjFfGUS+YBrYEGN3jNBz+ts1iYOT4w= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2018 21:28:09.1514 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9140d947-5dca-47a3-fb0c-08d5f8bed841 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-02_05:, , signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The test_cgrp2_attach test covers bpf cgroup attachment code well, so let's re-use it for testing allocation/releasing of cgroup storage. The extension is pretty straightforward: the bpf program will use the cgroup storage to save the number of transmitted bytes. Expected output: $ ./test_cgrp2_attach2 Attached DROP prog. This ping in cgroup /foo should fail... ping: sendmsg: Operation not permitted Attached DROP prog. This ping in cgroup /foo/bar should fail... ping: sendmsg: Operation not permitted Attached PASS prog. This ping in cgroup /foo/bar should pass... Detached PASS from /foo/bar while DROP is attached to /foo. This ping in cgroup /foo/bar should fail... ping: sendmsg: Operation not permitted Attached PASS from /foo/bar and detached DROP from /foo. This ping in cgroup /foo/bar should pass... ### override:PASS ### multi:PASS Signed-off-by: Roman Gushchin Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Martin KaFai Lau --- samples/bpf/test_cgrp2_attach2.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/samples/bpf/test_cgrp2_attach2.c b/samples/bpf/test_cgrp2_attach2.c index b453e6a161be..180f9d813bca 100644 --- a/samples/bpf/test_cgrp2_attach2.c +++ b/samples/bpf/test_cgrp2_attach2.c @@ -8,7 +8,8 @@ * information. The number of invocations of the program, which maps * to the number of packets received, is stored to key 0. Key 1 is * incremented on each iteration by the number of bytes stored in - * the skb. + * the skb. The program also stores the number of received bytes + * in the cgroup storage. * * - Attaches the new program to a cgroup using BPF_PROG_ATTACH * @@ -21,12 +22,15 @@ #include #include #include +#include +#include #include #include #include #include "bpf_insn.h" +#include "bpf_rlimit.h" #include "cgroup_helpers.h" #define FOO "/foo" @@ -205,6 +209,8 @@ static int map_fd = -1; static int prog_load_cnt(int verdict, int val) { + int cgroup_storage_fd; + if (map_fd < 0) map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, 4, 8, 1, 0); if (map_fd < 0) { @@ -212,6 +218,13 @@ static int prog_load_cnt(int verdict, int val) return -1; } + cgroup_storage_fd = bpf_create_map(BPF_MAP_TYPE_CGROUP_STORAGE, + sizeof(struct bpf_cgroup_storage_key), 8, 0, 0); + if (cgroup_storage_fd < 0) { + printf("failed to create map '%s'\n", strerror(errno)); + return -1; + } + struct bpf_insn prog[] = { BPF_MOV32_IMM(BPF_REG_0, 0), BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4), /* *(u32 *)(fp - 4) = r0 */ @@ -222,6 +235,11 @@ static int prog_load_cnt(int verdict, int val) BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2), BPF_MOV64_IMM(BPF_REG_1, val), /* r1 = 1 */ BPF_RAW_INSN(BPF_STX | BPF_XADD | BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0), /* xadd r0 += r1 */ + BPF_LD_MAP_FD(BPF_REG_1, cgroup_storage_fd), + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_local_storage), + BPF_MOV64_IMM(BPF_REG_1, val), + BPF_RAW_INSN(BPF_STX | BPF_XADD | BPF_W, BPF_REG_0, BPF_REG_1, 0, 0), BPF_MOV64_IMM(BPF_REG_0, verdict), /* r0 = verdict */ BPF_EXIT_INSN(), }; @@ -237,6 +255,7 @@ static int prog_load_cnt(int verdict, int val) printf("Output from verifier:\n%s\n-------\n", bpf_log_buf); return 0; } + close(cgroup_storage_fd); return ret; }