From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933558AbdKCRrA (ORCPT ); Fri, 3 Nov 2017 13:47:00 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:47174 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755819AbdKCRq6 (ORCPT ); Fri, 3 Nov 2017 13:46:58 -0400 From: Roman Gushchin To: Tejun Heo CC: , , Roman Gushchin Subject: [PATCH 1/2] cgroup: export list of delegatable control files using sysfs Date: Fri, 3 Nov 2017 13:46:02 -0400 Message-ID: <20171103174603.15249-1-guro@fb.com> X-Mailer: git-send-email 2.13.6 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c091:200::3:3c1] X-ClientProxiedBy: BN6PR0101CA0014.prod.exchangelabs.com (2603:10b6:405:2a::27) To DM3PR15MB1082.namprd15.prod.outlook.com (2603:10b6:0:12::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f370104c-ec31-4fd9-57e6-08d522e2ded3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:DM3PR15MB1082; X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1082;3:4LEgijlLw8DRGOFI6kNjfXzNcCeKKQsNheWCnEP8erK5tGz9NhmAsUn5IMLCZQ9a7usLtcgoesdONxeYscu2dKFjDe+M1CIM75C6ut5dfebCmVrxY0OE/EDBeu8VtBTXBdVzR0M8J84WiDDGjL3ebVBNzWjueTOVB7PIlYwv+uEiDz599uo3DCInpGmPAOUXdXmzngLSZl4gUZGUDUu9geWV9NpHxDvIf5y3jkZEmyKBat8/65Qybaz7WtZpEfK6;25:bvbrQFoe4bp0UBfAEADCYOkS27r6Yxn0GwibN2K/7I0xTVhLBCyxf3HjuV4QKNRtFUIGgs/r2NUmxKygGbU8AoBkoM2rqAGQQ0LmpdRLIhIRki5wTYDJjp1NasVnV13ZcLueszLqp7HnK10G1EL/gjmqi4IT+ZtEYdzC6gRB+8S8Ef+K9qrnspdxisTOMAQGTc7qRwIvVAU/fOxphsmZbE6fTLX2GckRtl7FpNg9pTkmEDamTKKBzzxovkM8ejIuQPu9E5PQdXyMSwRqQDGMch0N1MlVddu/j1M6Ci4Hb2hH9bip6JWltKqXQ1i1RRem2xyXSRFelZFrMceG2r7EBA==;31:nq+S1bV7q+gq+wuVgXsmgrAsVnRJB3PH7otQiPwbPUJRsbNsAFmvKDC6SCBHUZJeqezI9NF06OB3hIdDjAWy5dfnmpnzkaKEjeAZJHairLi5E6Wus/b8Y/5KGSvaxcojtEvTmL8QACFVlSf5belvYW37ZRpPz5P5y5bN3+pb5PnVc/MTCBLb6RXykcBZ4NqFME5C8bTdnicf078quO1hcDXEQ+zae1o4JB1V7zAa3to= X-MS-TrafficTypeDiagnostic: DM3PR15MB1082: X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1082;20:dbRxlYnSjhGJ1XLfXUijlKG0Gd+GgwuJElIlgnqnHk9Y/8Jr8kyTzC3bmUCpZ/CixFMS5nhp/Jvg7AWl55PhJcF+45pcVKYLkH5hWWyw7hytoAUDPgEIb5+r+nWC/99P8C07wkvu7K5BR0dS2PYMdHPISQmAWpIpHtNo/wz6yvbdgYsQJVHXn63cUtw/JjFiE1ERL6UbPbbtgHodTeA3Lz2A3Z7P0/7c8GhFTZw3G5L84+4xotzE98Cc7oTgsC0/dkT8Z6MWRnMnGyRCQXu+aHN4t2xqlZEcWhNNZtoTgkm1q24X1vjKXjE0SCo6u2NkRj6o2QtGeDeuNNEoH3X3QX5uJn2rEB3b9pFB+BqmNYCVSpUypJ5Tevcier4ci44FYb4MZEK1KUPkrDAoVdPhmHaw0qqfSMRU7hVvIR/qE1d9WplxUUuUJkaZEVJkMD8vZ97KU7ks0z1gxL6lbC1+GE2/PaM72yo1ArCr//TtARLLY3SoTCDjRz8XleglGI6d;4:gJaHUoMVngr3+cVJDON7afeehasMQ7OXL/zWU4Ay04im4KEOidCPqHawjXDdtZQ9X5CwFqWHYFIZ08/p1/Q1a362XVYTgMb61idYvi+o061px1+RaC/ZPSjKTTP83TDfdD2EZuMp9ERTR75s2CM7H8bbTYV6FLreaH1T6covbCIZWmGB//3V6YgmSPUeQMNfQ4Y/2N3E+ObLZGxs8sGcrv3Wn5QpgCvDa2uiUsM0Yjj/xTt30nTZbLPaFLcVmvJt9BqE/eXorqMNAkBF3+AeUEoi4f4Wd7PTPNM+oz6617lPbBw8uASVvR++uLZDhCp6 X-Exchange-Antispam-Report-Test: UriScan:(67672495146484); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(11241501159)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(3231021)(3002001)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM3PR15MB1082;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM3PR15MB1082; X-Forefront-PRVS: 0480A51D4A X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(346002)(376002)(189002)(199003)(5003940100001)(50986999)(6512007)(101416001)(4326008)(86362001)(5660300001)(2906002)(7736002)(53936002)(305945005)(6916009)(33646002)(6116002)(8936002)(47776003)(69596002)(8676002)(1076002)(81156014)(81166006)(6506006)(6666003)(6486002)(53416004)(106356001)(50466002)(105586002)(50226002)(316002)(48376002)(16586007)(36756003)(97736004)(189998001)(478600001)(25786009)(68736007)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM3PR15MB1082;H:castle.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR15MB1082;23:TrEA8ulAkfMLhFUCcDVAb/ehIRDVSZ3oMmWDEnC8n?= =?us-ascii?Q?UUhsd1epkAZdmUy4qhpvM0/mFLouBJXUGNjKp6ZS8m9CThe0+5xZMZQcUEUC?= =?us-ascii?Q?78Gwsm3vpcK2gNmasCfkSuqznsU05Xyy6mNgC0VQL1G3BfMcsuR3YpPHwd6i?= =?us-ascii?Q?onDr7dvdQZNNX04ej8h+9vNThycrnfHKjV7anJ1uzcrj73ENahsbOyZ1g8G7?= =?us-ascii?Q?LSAtdpWLDWD9w+6L/LsC3wxX/hoglYWPNzZdn4sY5LO2ZNmsyyBQFuK9WnDX?= =?us-ascii?Q?sN0Gz92/ZYReqxXiNdqqqar3W52LATmSpBUIiWDfLo1zEYFm0l8ofazM7z+s?= =?us-ascii?Q?6xvdNydhvqxWYkMm0KgS/JWfZ9A6qKrITadSzGI9mzHbAVJTTZobYyUD8a4I?= =?us-ascii?Q?SGijbCm/GpC4pKTJsf1YpiSKRK/YYygQ1G44gsUX0kr5mH26lLvTi/4xAU1h?= =?us-ascii?Q?UgMHcU/Zb/uWc1Za8nhaJPe+Enfc4uLeDPOd3Dvj0VNfHHO88l30sTzax6HC?= =?us-ascii?Q?J0VOzfdOIVUAoLsLpfNGEosMhBs8tH3VEViDyE/OvuNXZk6fyWvLcypjlLtc?= =?us-ascii?Q?MAn0p7fzN5yMEuRR7UBueZ+X5mHrjZ30klsndN0Je6Xry/ilCZVW1dcQAAhi?= =?us-ascii?Q?yyuJwwKjq7Fu/g9Pp8UEHSn4tccnxU/koK8BApFY7IkW8Mw1vZ1OgsJQ3WZz?= =?us-ascii?Q?T5Yt/8Sp95LD+BBfL7k4DYvWaMtCFWaRsQhiIuHJ1HYmwzvUo08TOx5X2ew3?= =?us-ascii?Q?BeD1YpSE4RHieXXFFcSWS/o1M1La1vT/Ruz71BiA1+CI+f72qaDVEesHOwRJ?= =?us-ascii?Q?NymIwgUUUnpzwpB2kqlalDtZ93ukGjJdLwcQpRqG7/wQHgImEbOePw7djgGE?= =?us-ascii?Q?Ctnt+CDp7I8GiLzvjtFqgCpwHIf7t+TmnzOIHNOeIkMG4MUW/gBC9gz8hrL1?= =?us-ascii?Q?AynpuLB98qVBvR+3jOTx3SCQwkPjFfKGgqcmaCWAA2tgdltBJtzG4+X8o7J5?= =?us-ascii?Q?LjP2IhWssyqZDL1lu8QuNJzD61+AZAZe42Cj3zafQDkvA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1082;6:LXbpNVo2Bfxgm+2cGbbW5HwUln8d/RQG54lRLr8EwIIx4eU4uCYS25FA7c2TTkp//VqFXOC1b5OLzH+FyNv94G64LygqAYQc/SST1UagS/y5bJf+IB8Jbku2r9Sje94rJgOu8o+OVkz/pz1u653SE1ZSQSe5ZJbYF+i5V8I0BaWoSbGSUjmFLAF/n4QkJWkahRsU9KwsgE3dZ/KN6kfMrAzg+tkpWkaq7YSEeYTnz1KQxdJn/9VbqW1HiaBYtawx59RorObo5EJwQDxCgmnApiSWtMKQe5zb242qdNGCwpVsYVwWmNeHVY4lY/4jiJrtKGhCiBniyv5usjAElKezwFtE37Uo22k31SBgk3IPU04=;5:/4nTpRSTs0wlX2iKUWl25qv2UTQzCYbcCMOe8uHHrwZtQJKHINfgypLy1k0genLao0zmoKXI91ElbQIhRxegZaoifDaLK3Ap1BITYhf7LFWFPytAH86xzixoYYQP/IsD8kTfixKofUWiGHRYcHBBcsHMkOf5PZMhemAZWwh/9fQ=;24:3IUB3mGNCE6Yi741nWWd1gj44wo+edSsebA6jAq6llKoyPUrYHQG8qMgUdh01A+1K3EioCMbE5j3J2beZVtLBRuou/+INH0cSiyALg5GrsQ=;7:J3Nom2yhX5LtBx6dEzrCnSHgJUzqpmheu1BQoYSAhm19t9exD5blXyMaFzBa/dACjG2tviKumk60MrMYwzFanT2SvG8uLSir5QkudPCDm3C1MKCdh8f2r6W/VA/IcRIygEt0NSUt46MExJg1BoRujewQHbI2XVbru81VEOJ1s5GAP7xWwxrJmCSlRN6ZOv5MMpohtVmoPs0ks3R9wshadJjewGhPmgHGzV1oHb2eogwRW6E5n0Bvp6qu2PhmR2mf SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1082;20:hDgZg1JbKSN43hnscQiUuY7mRhMkpKAsnc+vYLpw85yj0QuSXP9Y0oK/4gI/Vta/uEWUZXnDZmnvN8gnNMuRg9I2VTioUUdyHYNdz/MMQaR7iunOcbirSHxGYdyC6IKfkzerSxVCeSnBF7NdejraNd23pyjmLRa+Kyy9p+je3EE= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2017 17:46:53.4606 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f370104c-ec31-4fd9-57e6-08d522e2ded3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR15MB1082 X-OriginatorOrg: fb.com X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-03_06:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Delegatable cgroup v2 control files may require special handling (e.g. chowning), and the exact list of such files varies between kernel versions (and likely to be extended in the future). To guarantee correctness of this list and simplify the life of userspace (systemd, first of all), let's export the list via /sys/kernel/cgroup/delegates pseudo-file. Format is siple: each control file name is printed on a new line. Example: $ cat /sys/kernel/cgroup/delegates cgroup.procs cgroup.subtree_control Signed-off-by: Roman Gushchin Cc: Tejun Heo Cc: kernel-team@fb.com --- kernel/cgroup/cgroup.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index d6ed725f36d9..9dff92c17a1f 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5832,3 +5832,64 @@ int cgroup_bpf_update(struct cgroup *cgrp, struct bpf_prog *prog, return ret; } #endif /* CONFIG_CGROUP_BPF */ + +#ifdef CONFIG_SYSFS +static ssize_t show_delegatable_files(struct cftype *files, char *buf, + ssize_t size, const char *prefix) +{ + struct cftype *cft; + ssize_t ret = 0; + + for (cft = files; cft && cft->name[0] != '\0'; cft++) { + if (!(cft->flags & CFTYPE_NS_DELEGATABLE)) + continue; + + if (prefix) + ret += snprintf(buf + ret, size - ret, "%s.", prefix); + + ret += snprintf(buf + ret, size - ret, "%s\n", cft->name); + + if (unlikely(ret >= size)) { + WARN_ON(1); + break; + } + } + + return ret; +} + +static ssize_t delegates_show(struct kobject *kobj, struct kobj_attribute *attr, + char *buf) +{ + struct cgroup_subsys *ss; + int ssid; + ssize_t ret = 0; + + ret = show_delegatable_files(cgroup_base_files, buf, PAGE_SIZE - ret, + NULL); + + for_each_subsys(ss, ssid) + ret += show_delegatable_files(ss->dfl_cftypes, buf + ret, + PAGE_SIZE - ret, + cgroup_subsys_name[ssid]); + + return ret; +} +static struct kobj_attribute cgroup_delegates_attr = __ATTR_RO(delegates); + +static struct attribute *cgroup_sysfs_attrs[] = { + &cgroup_delegates_attr.attr, + NULL, +}; + +static const struct attribute_group cgroup_sysfs_attr_group = { + .attrs = cgroup_sysfs_attrs, + .name = "cgroup", +}; + +static int __init cgroup_sysfs_init(void) +{ + return sysfs_create_group(kernel_kobj, &cgroup_sysfs_attr_group); +} +subsys_initcall(cgroup_sysfs_init); +#endif /* CONFIG_SYSFS */ -- 2.13.6