From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id D0C4780024 for ; Wed, 26 Aug 2026 16:49:48 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67QGmXDc011111; Wed, 26 Aug 2026 19:48:33 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67QGmXDc011111 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Xv3VaKOf" Received: from mail-yw1-f200.google.com (mail-yw1-f200.google.com [209.85.128.200]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67QGmVJU011107 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 26 Aug 2026 19:48:32 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67QGmVJU011107 Received: by mail-yw1-f200.google.com with SMTP id 00721157ae682-81bee860fb7so36213367b3.3 for ; Wed, 26 Aug 2026 09:48:31 -0700 (PDT) X-Forwarded-Encrypted: i=3; AHgh+Rp0u+hfmVWI/NjAbCypJZsCbXjeW2A1/IXBLPieZry/aG7CnXVSWzNTcpvKzb3Nb1ldjOUsHQ==@openvz.org X-Gm-Message-State: AFuF++kPUNXKLTRyITyH9oZdcZeLyxhFHQtU8JVukmNgUQAUBtJJX83m pxUWR3NXSpJmGLEQLs9PPcC7v8vswydhY2p03es3eB2xAuFpOpJ6qFotv1CITwaGohpekZOakei cw8nTDxwsP6tv42kr3h0ABNZ3RzIv40PY3jjn8aEAfTUw5FnmyYch1Q== X-Gm-Gg: AR+sD12GQA7tKMQnglzVfv+Ik0QoBoluXcmod7UnE4Mobrqe0B2mEuUVNC9vU2t2fC3 iFaxRIMutg/nYfPXAkNvwXDSZ7VR7784CqgN2UPFJJY+iO2rzx2kXPmZlrI6Mk+pY3iB/OatZch zQrko9GusO+GeiHLd2iHPcmF5IOLgOV7RL13fJpbfFyz5b8iU4lXkDF+8me8Hfl2WOm/85iNVVK CR4YVHYq1PjNWeyDks+TgZaVIZCTMYlLH3Qw87NYOx1sZrKdBs23qVnPukfhQmbC9a4HEAfTgm4 sB3vO44fcHMSsY3TImbbGh7NSMPbCnTDg8+2XfjkAlSO9MR8/FuOuHrH9lu51A3nm+n4NDIs+Sv 9si0EexMmbxJ+u9xtqpeYE4d4MMe+FiVwfWXAbWnSoWnv2i+nWfZr9pLUGrlNqYVDqp7EkGnajP bs+kk9K/inRXiPDxMfzH1a X-Received: by 2002:a53:bf91:0:b0:66a:c108:e813 with SMTP id 956f58d0204a3-66d2575d0a0mr1983184d50.32.1787762910343; Wed, 26 Aug 2026 09:48:30 -0700 (PDT) X-Received: by 2002:a53:bf91:0:b0:66a:c108:e813 with SMTP id 956f58d0204a3-66d2575d0a0mr1983158d50.32.1787762909584; Wed, 26 Aug 2026 09:48:29 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1787762909; cv=pass; d=google.com; s=arc-20260327; b=Kfsht53fghURMLkpaC2DpCt2e69is1XMwdsj+CT4cgdd1PDt94uqcF++n/p+LRXlK8 fWYNhGHSzDyz/+yjC4c6954lqPP67x9+aN3teA3JPuaTChrgxBi0uELYN8mWu/Ev8vME zAppRqVTBumboLAcE6n8TZBOYekfbFsI0+KiJ4mmEF/DfAM5kJqQPQCpb+kY/W+O6Xag E+zTqjLmAGJP9BGhjiz2imb31xAkbnqz37o+sWO5ESxTYLG+TyFqWb238Jg9eoo2GuU3 YVu4SCD6IwmQHRa++UkcNevWlrtoN3eAqJ2VTYftk4FKCdbprMHVfB1gqh3Fn92uusvZ OTqQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:in-reply-to:content-language :references:cc:to:from:subject:user-agent:date:message-id :dkim-signature; bh=gRyEpaYRuRD/dXjETkRguw2HFx19RJrA1f9Dh9pU0QI=; fh=f+fYuDHoN0zPkynLbtKqwBED+ezzfa9N/cd/Dn1FaIw=; b=ZsoTxVmGc3ykc2ItiF+uaZAKGG6Vq9WFF5Jv7agUyZGK9wIMQwewHgHeoppAcvGGlu PJy0P+NksytMDosttS9ebD3+Jk4YL52rSrhBasK3q6EK+VuARPuRc3hpYkZgzmz1jDwi +Dse/Ea8D3FoPUfo1f9ZsEWSwx4qgNTCEihYTlDxMIpr5cZ9jrDkt/MRX2NtcLA0sT0Y wYRufBBsEpT25A4Scb8RRVfwfokN84xBx5ZqALTt3bgROVOR29UpvPkwvQUX2wpfvOxu 2PEVYPU156VoL0DVHHQe4hEB6xuxgGArJUpoZDsoAJjD/flWwWa8HdHQtIIi9YGU2NfE zoZQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=Xv3VaKOf; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of khorenko@virtuozzo.com designates 2a01:111:f403:c201::3 as permitted sender) smtp.mailfrom=khorenko@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazlp170110003.outbound.protection.outlook.com. [2a01:111:f403:c201::3]) by mx.google.com with ESMTPS id 956f58d0204a3-66d247b1dafsi1759803d50.223.2026.08.26.09.48.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Aug 2026 09:48:29 -0700 (PDT) Received-SPF: pass (google.com: domain of khorenko@virtuozzo.com designates 2a01:111:f403:c201::3 as permitted sender) client-ip=2a01:111:f403:c201::3; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=Xv3VaKOf; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of khorenko@virtuozzo.com designates 2a01:111:f403:c201::3 as permitted sender) smtp.mailfrom=khorenko@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gLwm29hdm2uhyVAca1BglJ7ssNUDMnhNmILy1b8h5gPq877fT2IoK5oIg1AcoDe+X6bFBsPEkFdrDZPKxWWRMdB3aEI3jLVE1aH4MPS6SDadVwHygoRsk1tOqkkfgmfwsQfoxpT5wyYtELIV95SogaSwpCh2oFwKCFU7NcZCSLjsy5XkMtgx9E7acR9+J++NtauxnKIZ/v+cpWYRDnMymFoVUJIWN90a92jslXQLaUGb/1+SPhKbBDGTVnNYDRSNQmXfT436n6L/BtBtY3wxIXdxHbvtJrq1xN/0giCqbcxQnLVyBBit+DvFb102FOIW6wrkah6H3ZhvwlzMNC8GEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gRyEpaYRuRD/dXjETkRguw2HFx19RJrA1f9Dh9pU0QI=; b=ETtVDo12JaHIoDEj/zdp3Ga18Xh24CS82u+9Tmxkd0H6z7Gg1p5rQg9AWtho22he+z8nG3lXaQwI6gbVigrjyBZMsQJCO9zTrcBv0trewVwwkTMtrKqP7pk+BHiYcGgZEOkH8aT28c7rjOgSu1AVDs/mAlMUAYFrllTyiq/rlNmW3SteF/iJ449fgNDl+BqFiCfzE9uC/YSWQ+Xcs/VAsY4RVgpNqvzWiIZ1tPEQSS+K4qDVw27Yl7KFVwqe7IZuK71RfnW2mbPDO62A5VTNXJKlAG/HaKkPcIXFy2PWOaoawn0W7MxI6TIdpBC4BF7kNmwuiixD17fGiQanXjCDyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gRyEpaYRuRD/dXjETkRguw2HFx19RJrA1f9Dh9pU0QI=; b=Xv3VaKOfsZXtqwwV/YZDhV9CTSfng3ccnWfioyz4w5PPqbpGNRiUZOVmffSK4NMrzRF8UCpmZZGfhIbY7zMK8IZ4lsHwgBI5FtO+oV8S2+VWHfpsa0+PGfSo32q05RekJ2KAlS2x7brsewTwECT8ogBtRTURMOxMrxQqQPvCAwK4qvNWaCvReNTnQ2C76dgMLc9eWweBe/66YEw/fnFcVeyKwAkMShcBpUMU13Q9HQ8HGC1Dip7GT8dv7MzKR3xtGR4FaLd4PRXQhNIK9r8BXlDTmidp5+auKCT703EvmOnk3ZRBsjzNKdmdmBaB+vRJ4Qo2QmXqCBi+45Sf33+yWg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from PA6PR08MB10708.eurprd08.prod.outlook.com (2603:10a6:102:3c7::20) by DUYPR08MB12015.eurprd08.prod.outlook.com (2603:10a6:10:65d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.8; Wed, 26 Aug 2026 16:48:26 +0000 Received: from PA6PR08MB10708.eurprd08.prod.outlook.com ([fe80::1999:c6db:dc55:494a]) by PA6PR08MB10708.eurprd08.prod.outlook.com ([fe80::1999:c6db:dc55:494a%4]) with mapi id 15.21.0382.004; Wed, 26 Aug 2026 16:48:26 +0000 Message-ID: <9f43be79-913a-4442-aa36-aa6059b02e4b@virtuozzo.com> Date: Wed, 26 Aug 2026 18:48:24 +0200 User-Agent: Mozilla Thunderbird From: Konstantin Khorenko To: Pavel Tikhomirov , devel@openvz.org References: <20260529144215.939517-1-ptikhomirov@virtuozzo.com> <20260529144215.939517-2-ptikhomirov@virtuozzo.com> <3ca2d5c2-3d7e-4694-ab65-d8b3fa8b6844@virtuozzo.com> Content-Language: en-US, ru, sr In-Reply-To: <3ca2d5c2-3d7e-4694-ab65-d8b3fa8b6844@virtuozzo.com> X-ClientProxiedBy: AS4PR09CA0013.eurprd09.prod.outlook.com (2603:10a6:20b:5e0::19) To PA6PR08MB10708.eurprd08.prod.outlook.com (2603:10a6:102:3c7::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PA6PR08MB10708:EE_|DUYPR08MB12015:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f30e02b-03e3-488d-a14f-08df0391d979 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|23010399003|1800799024|366016|56012099006|10067099003|5023799004|4143699003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: shGvAi+Pth41eOjAy5AdAbzZv6TEcjvoAVoqA71KtxsyLBHjbbqzHNZukRx3XFPVI/eohkjOlV16/V8Te1LjupKGtUjhbnQEAeDSkM7+7LdChugH3TC+BHdKu894QrV8YnjmqmMWPlfbfR1GQgRTyE0MxmItS6wnXNVnHiqrAPeU+9rtFbHXBxvICp8IdBoPzUixdqx0OdZM9MqjDUrTz47wh+IUFtNkgztkw9rXmjOatFa3LLLghICaNlt9JSUVclV0LzC6rGD24wxWD3765IBhiORobFhOCqwLY0fJNdEGPKl5KhRZ34oyQutrk7Ppe9R+1mNrsvSZKX4tEidBKnAxf31P88rpUp49H40JhClDKZ42AXhavhkTQDbNvkIwS5bpjmMo7ysCydSqi+h41kAyBbEbcVp9RmIL+9LQRrbWXcDb83kjxDis6f7qi8T2vCvj8wGxrpFB+/dGI76P8wGzyEhAkORZb7dmHSVGlqc3J5apCFMBTsZPbcn78ROesjSHRuXPxmLon+sxBwPpAktQn9BvhJo/03Iv3gmNYcyDOFoU/B+jrfb5kBEdmwULuwSgsvI5L4ZY7AAxoGvshmVuPoLgK0trUruZFMy/lpqE2yE9kIU+h0qeuGNQQkeNzL9ZcXSIOEyF5lsjbM/lZdAMbhwU2d6u/K3OfI7oCtM= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA6PR08MB10708.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(5023799004)(4143699003)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OXIwc2tkMElyY2lpK1pJaDhHNW5YSWN3VzdJMDc5ZHFuOTgzeUU4eGlWWWlo?= =?utf-8?B?eDhSemdMOEpQellDMEM0WURhSXU2ZEJqdUZMQU11VjdnVTVOVHBGL2ZXak4r?= =?utf-8?B?SGxxek5SQjVUeWhmL3pFcHkwSEQzU1F4ZDBrTlk0OUJuY0RhR08rZkxhLzRK?= =?utf-8?B?ZWRhTWtlN3RUTlJXWTNsNnZObFZpejNEWnNlQzRnSDM4MlZnMkxMMisxMEpV?= =?utf-8?B?MndLQlFRUURpUm5ERXdDdS9kVGlHSXVLUkNwSDZsYXk2K0psd0c3SGVXeGhB?= =?utf-8?B?RytJTmRlTjgyNUkyb1dQbjU0NmQ0V0tnS3NnZGhFNXNtUmJYaVVRVW9CQWxY?= =?utf-8?B?b2pnQ0QxWkZCOGQ5MDZDL2dNY25tVEVkdlJ1cjR4ZHJEaGZSZTFIL3poSVho?= =?utf-8?B?Tm85WDd3NkpYLzNXc1hwYnNLcTlzL3pxd3JoM0pGZUhWekRxa0cxYjdlb1Jo?= =?utf-8?B?Mys1ZlIxTmUvMjA4T1lNK3lkbTdYQ2pBaFA5SCs4Q0o1bzFDQWVBM0tLZVU2?= =?utf-8?B?MjhtV1lyL1BacmFTd2hLcnRtVVVGWFNnVm41eE90WlQ3SjcrWG9tTk5GNFgx?= =?utf-8?B?RTdCQUZNVmJxMWpVbGc1NnJsdkl1dmxIdExPOThvQlNqQlVRcHhGOTdDVVlv?= =?utf-8?B?UlZUNFh2Q1ZZNTAyNE43YzZhQ3VzOGpXTnMzc3QrQU1MWjlZZlM1UEM1alM5?= =?utf-8?B?MW1pY0JOdU5RR3dvOHRmdDdsWmFkWHVWNXkwaUNEcnpWZHV6WW03di8zRndp?= =?utf-8?B?ZFRwYitJaWw2YjF2OTU0TkVoZ0RETmNRa3J4WTJkZ0R5a1ZaVmE4RFI0ckhI?= =?utf-8?B?SWJrZG9kU2RWU3Y5K2x6bnV0VU05b2NvWkJUVFJHQTQ2eVdrcG5jTEMzdXJH?= =?utf-8?B?THRPVXpjVlZHUWttQ3BkQ1YrRnh3V21wZ0x4TkJIckZ0RDZreXM4dGNGTUsy?= =?utf-8?B?ZU12YXZaU3NLaWlMMDZuU3VNRmdQUzlKSVV3MFRiUDJEVEdCOU9Xd2RMT2Mx?= =?utf-8?B?WEQwWUgrTGpBdFFTcWd2MUEwUVIyTHQwdkJvamJkaGJRMjBtb3NMbVF0VU1H?= =?utf-8?B?TWFMNlBiUjBydXdaZXp3WmJUS3FrZ2JUbmRzUVN4V3ZwSG00c3NzTDRZZGhG?= =?utf-8?B?eG00d09YSDBlSzU2WnU1SU5NenArYW5LNVhleW5Rck4wOEk4amlwQ0RteWNm?= =?utf-8?B?WVQ4UmgyNUVEbzByZkt4WTdIVjhqTUo0RExKS3E5MVE1cmJTQWRxTDBLcmRQ?= =?utf-8?B?VU9QRVpBWCt2V29CaC9PZGxuQkxUVmdMSk1JMTR0TnRadHVORFNTTExXODJp?= =?utf-8?B?dEZOK0IySmhmWTBBOHNxU2FRQmo1UlE0bUlPMFJ0ZEpCRUNrTkhmNXM1NUhC?= =?utf-8?B?Q2prQkxBTGhsNkkwNHI1MUVLYjhFNmVQNlBzeDR2bzZ0R2l1WkNCTlBOd0V2?= =?utf-8?B?YVNob1pPck51a0dFb0E2b1gvNWYzbWd0WjNqYjgyQ0oxUmlpRmNBYVlBY2RP?= =?utf-8?B?YzZ3OC8rbkR3Y1l0SWFCSVVDOWw0c1J6NVlzckh3L0RZbk1zOXFoMVRFQ3Vk?= =?utf-8?B?TUliWWRQTml6ZlptSzVyaWxqN0Myc1pjdGhvUWFyS3IwaFBIeitjUW95TVJl?= =?utf-8?B?dlVJVVVCZmRwcElSV2RCMkk2bk9hUnE5RHQxcm14SFVCc3JRc2pCdGdsRmVD?= =?utf-8?B?QlowUTdBL1Q2MUJEQjF5Tndkc1pzNlNZTTZXa1pUeTNEV2pUdnUydmlORmR4?= =?utf-8?B?RGNiYmpsVDh4QVRTaDVCV1l4Mkk0OGNiSzl3RE80UkoxZU0xcG55S0I4ZVhk?= =?utf-8?B?ODk1dlJvZXY1ZFd0UC9mZUpiL2R3WDVHa01OdTZTN291Uk1mYWx3N1czSmxs?= =?utf-8?B?cXZPRVdGWC9BV0hyQkhJL3IxUXREL3N6VXQxdzU3TkdBWDF5ZWNiaEdBQTEv?= =?utf-8?B?Y3pkK1U4K3kwNWlvMnEyRzk2dVhpVDZoQlUrMW04eGI3dWtzNU5TSmt0Uzh1?= =?utf-8?B?T0dIYTYvU1JVc21oODY5TkQ4SEdLZHB4SWs4VGJ5a1l5SkcwNnNWZXVBc0tu?= =?utf-8?B?SU9vb0ZOK2JTUHI3R3FDREtuNFdxUmoyMXlEVkdkTzdYNnVaYnJ3N1d4MWVs?= =?utf-8?B?RnNxdWZaM3J4K3Vwb0VaTG1YU1BrY1kvWTA0OFppaW9BYW1LY3FsZWFrYUlL?= =?utf-8?B?WFRhN1JWdGx0OUhORHlkUUVjUVZsWFNtbVluWlBIY0Y4ejF4QUpXaVdLdDAx?= =?utf-8?B?MkpxQlorK0U3WlpUMnRvYVpmQWltMWVKWFQ4WnhwZzVUL0hZWG1UcVVwSWIy?= =?utf-8?B?d1FiQXJLUXBFVWNTVFRuOFl2WExWZ2UxODBjTnJKSUdoMm9waTlrZz09?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f30e02b-03e3-488d-a14f-08df0391d979 X-MS-Exchange-CrossTenant-AuthSource: PA6PR08MB10708.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2026 16:48:26.5389 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8Q1EIrxAp62JjfStxSlU6z8JksrKhG8/gkE/O+up39L9lj++ONNgLfcU/qNzFHiHm3VH9Y4/L67h7/G/WlmTpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DUYPR08MB12015 X-OZ-Fwd: true Subject: Re: [Devel] [PATCH v2 VZ10 1/2] ve/bpf: Limit number of BPF programs loadable per-VE X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org a kind ping -- Best regards, Konstantin Khorenko, Virtuozzo Linux Kernel Team On 6/18/26 18:41, Konstantin Khorenko wrote: > i will apply the patch, but i would appreciate in case you add some WARN_ONCE > in case some CT hits the limit of available bpf programs. > > This will ease issue investigations + at some point might hints us that we need to increase the default, for example. > > -- > Best regards, > > Konstantin Khorenko, > Virtuozzo Linux Kernel Team > > On 5/29/26 16:42, Pavel Tikhomirov wrote: >> Without a per-VE cap a single container could exhaust the system-wide >> bpf JIT memory budget by loading excessive numbers of CGROUP_DEVICE >> programs via the VE_FEATURE_BPF path. >> >> Add bpf_prog_avail_nr / bpf_prog_max_nr counters to ve_struct and >> enforce them in bpf_prog_load() for non-bpf-capable callers loading >> CGROUP_DEVICE programs. >> >> Lifetime note: A BPF program loadded in VE takes a reference to ve, when >> container is stopped, all open fds to the BPF programm will be closed >> and when container manager removes container cgroups the BPF program >> will be released and thus releasing the reference to VE. >> >> Default max number note: It is somehow similar to ve.netif_max_nr, there >> each docker container creates two veths, and I also observe that docker >> container loads two bpf programs (one by dockerd, one by systemd). So >> let's use the same number. >> >> https://virtuozzo.atlassian.net/browse/VSTOR-131947 >> Signed-off-by: Pavel Tikhomirov >> Feature: ve: allow BPF in Containers >> >> -- >> v2: Also put load_ve definition under CONFIG_VE. >> --- >> include/linux/bpf.h | 8 ++++++++ >> include/linux/ve.h | 4 ++++ >> kernel/bpf/core.c | 8 ++++++++ >> kernel/bpf/syscall.c | 37 +++++++++++++++++++++++++++++++++++++ >> kernel/ve/ve.c | 5 +++++ >> 5 files changed, 62 insertions(+) >> >> diff --git a/include/linux/bpf.h b/include/linux/bpf.h >> index 80175c7a21c27..0212806d5efc2 100644 >> --- a/include/linux/bpf.h >> +++ b/include/linux/bpf.h >> @@ -56,6 +56,7 @@ struct cgroup; >> struct bpf_token; >> struct user_namespace; >> struct super_block; >> +struct ve_struct; >> struct inode; >> >> extern struct idr btf_idr; >> @@ -1522,6 +1523,13 @@ struct bpf_prog_aux { >> void *security; >> #endif >> struct bpf_token *token; >> +#ifdef CONFIG_VE >> + /* VE that loaded the program via VE_FEATURE_BPF path and against whose >> + * bpf_prog_avail_nr counter the program is accounted. NULL for programs >> + * loaded through the regular (non VE-restricted) path. >> + */ >> + struct ve_struct *owner_ve; >> +#endif >> struct bpf_prog_offload *offload; >> struct btf *btf; >> struct bpf_func_info *func_info; >> diff --git a/include/linux/ve.h b/include/linux/ve.h >> index 224acf012821f..88b4d531c466e 100644 >> --- a/include/linux/ve.h >> +++ b/include/linux/ve.h >> @@ -76,6 +76,9 @@ struct ve_struct { >> atomic_t netif_avail_nr; >> int netif_max_nr; >> >> + atomic_t bpf_prog_avail_nr; >> + int bpf_prog_max_nr; >> + >> atomic64_t _uevent_seqnum; >> >> int _randomize_va_space; >> @@ -149,6 +152,7 @@ extern int nr_ve; >> >> #define NETNS_MAX_NR_DEFAULT 256 /* number of net-namespaces per-VE */ >> #define NETIF_MAX_NR_DEFAULT 256 /* number of net-interfaces per-VE */ >> +#define BPF_PROG_MAX_NR_DEFAULT 256 /* number of loaded BPF progs per-VE */ >> >> extern unsigned int sysctl_ve_mount_nr; >> >> diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c >> index 4de8774458aca..7aaf73180fcdc 100644 >> --- a/kernel/bpf/core.c >> +++ b/kernel/bpf/core.c >> @@ -38,6 +38,7 @@ >> #include >> #include >> #include >> +#include >> >> #include >> #include >> @@ -2828,6 +2829,13 @@ void bpf_prog_free(struct bpf_prog *fp) >> if (aux->dst_prog) >> bpf_prog_put(aux->dst_prog); >> bpf_token_put(aux->token); >> +#ifdef CONFIG_VE >> + if (aux->owner_ve) { >> + atomic_inc(&aux->owner_ve->bpf_prog_avail_nr); >> + put_ve(aux->owner_ve); >> + aux->owner_ve = NULL; >> + } >> +#endif >> INIT_WORK(&aux->work, bpf_prog_free_deferred); >> schedule_work(&aux->work); >> } >> diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c >> index 0475a72c93c06..481ae62429097 100644 >> --- a/kernel/bpf/syscall.c >> +++ b/kernel/bpf/syscall.c >> @@ -2663,6 +2663,9 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size) >> struct bpf_prog *prog, *dst_prog = NULL; >> struct btf *attach_btf = NULL; >> struct bpf_token *token = NULL; >> +#ifdef CONFIG_VE >> + struct ve_struct *load_ve = NULL; >> +#endif >> bool bpf_cap; >> int err; >> char license[128]; >> @@ -2744,6 +2747,22 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size) >> if (is_perfmon_prog_type(type) && !bpf_token_capable(token, CAP_PERFMON)) >> goto put_token; >> >> +#ifdef CONFIG_VE >> + /* Restrict the number of BPF programs that can be loaded via the >> + * VE-allowed path. Without this, a single container could exhaust >> + * the system-wide bpf JIT memory budget by loading excessive >> + * numbers of CGROUP_DEVICE programs. >> + */ >> + if (!bpf_cap && type == BPF_PROG_TYPE_CGROUP_DEVICE) { >> + load_ve = get_exec_env(); >> + if (atomic_dec_if_positive(&load_ve->bpf_prog_avail_nr) < 0) { >> + load_ve = NULL; >> + err = -ENOSPC; >> + goto put_token; >> + } >> + } >> +#endif >> + >> /* attach_prog_fd/attach_btf_obj_fd can specify fd of either bpf_prog >> * or btf, we need to check which one it is >> */ >> @@ -2809,6 +2828,16 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size) >> prog->aux->dev_bound = !!attr->prog_ifindex; >> prog->aux->xdp_has_frags = attr->prog_flags & BPF_F_XDP_HAS_FRAGS; >> >> +#ifdef CONFIG_VE >> + /* Hand the avail_nr slot reservation over to the prog. bpf_prog_free() >> + * will release it via put_ve + counter increment. >> + */ >> + if (load_ve) { >> + prog->aux->owner_ve = get_ve(load_ve); >> + load_ve = NULL; >> + } >> +#endif >> + >> /* move token into prog->aux, reuse taken refcnt */ >> prog->aux->token = token; >> token = NULL; >> @@ -2932,6 +2961,14 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size) >> btf_put(prog->aux->attach_btf); >> bpf_prog_free(prog); >> put_token: >> +#ifdef CONFIG_VE >> + /* The load_ve is non-NULL only if we decremented bpf_prog_avail_nr >> + * but did not hand the reservation off to the prog yet (i.e. failure >> + * happened before bpf_prog_alloc()). Roll back the counter. >> + */ >> + if (load_ve) >> + atomic_inc(&load_ve->bpf_prog_avail_nr); >> +#endif >> bpf_token_put(token); >> return err; >> } >> diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c >> index 198c82f010cc1..48da546117bb7 100644 >> --- a/kernel/ve/ve.c >> +++ b/kernel/ve/ve.c >> @@ -76,6 +76,8 @@ struct ve_struct ve0 = { >> .netns_max_nr = INT_MAX, >> .netif_avail_nr = ATOMIC_INIT(INT_MAX), >> .netif_max_nr = INT_MAX, >> + .bpf_prog_avail_nr = ATOMIC_INIT(INT_MAX), >> + .bpf_prog_max_nr = INT_MAX, >> .fsync_enable = FSYNC_FILTERED, >> ._randomize_va_space = >> #ifdef CONFIG_COMPAT_BRK >> @@ -983,6 +985,9 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ >> atomic_set(&ve->netif_avail_nr, NETIF_MAX_NR_DEFAULT); >> ve->netif_max_nr = NETIF_MAX_NR_DEFAULT; >> >> + atomic_set(&ve->bpf_prog_avail_nr, BPF_PROG_MAX_NR_DEFAULT); >> + ve->bpf_prog_max_nr = BPF_PROG_MAX_NR_DEFAULT; >> + >> err = ve_log_init(ve); >> if (err) >> goto err_log; > _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel