Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp3009665pxu; Tue, 8 Dec 2020 00:41:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJy8EVjmyZCqDju5va3UNC8AtzrjqCP3tXHXe/gdJgnOqjnG867MS2M22EnsvHod3OEi5Jf0 X-Received: by 2002:a17:906:c096:: with SMTP id f22mr21791687ejz.488.1607416877491; Tue, 08 Dec 2020 00:41:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607416877; cv=none; d=google.com; s=arc-20160816; b=Q3Lg4ZkCA0gmz5f5cdl+gKaA6f+vFbpGjOY/1pi8bxXhZMYYfyDZ+clIL0sSgw7e3P efMSPa/H4RxaKmmTBMLAf9geo3/nZ3xQASxUrOwcQIBHStet6Ef0kt2ILXLdJtJAArRG s0AKdmdGxuoRe7fULLrlPIh3MU2IKAz8CUzD3K1L5aYRU6r77NHd0tKr5Qvkh7BNemfC 9ppMX/mskoJnrtOcUsgft/4iY51TCYaGwbW+m7UzmZ1ZZTpxdE8gOVnfy45J01BXDyc0 gZVpSX6dwDXTQ/n1pUGr1pLxnkSk0Yfwvxxgqb1m6LpSvY5BLOLYispa7X6/+MMyvA07 MroQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=DVjmHtFolxRAfV2C2U9GLiRolrXJrnLIEB5X5ihubDs=; b=DGh47xUOFyXfu8xrJNJAiTFEl52Obm/qD2+2wUXcnEQ2wAtdB5WKetQ4quVAsvtDMo DM8q8YFC6zefGPNoLBvyluxM1SaBwDPrhOx9uB3SDr8OE0txbCfFcuvsmPyYoRB6fkBQ RSLZhPRomJoCn+0H4/BmR3GqVOySLDWGYp5ZT98mqO1qs3XueeAXifFLpBw0m+w032qJ WNTR7hApM19ac8DmsKbByd2GW81tRrx1lf7BDNBoEfSvDwRUbqg50S7y2AtOJ2nUQ9op 3H7z95cf+Q0olxLTtcEHUf04iQiPSFlJFmsW6Kn0DmqERaGsv5brW5+fJ0RfNPzoRGkq CGWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@uged.al header.s=google header.b=qAmjandB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v5si9592872eda.107.2020.12.08.00.40.53; Tue, 08 Dec 2020 00:41:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@uged.al header.s=google header.b=qAmjandB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728343AbgLHIgD (ORCPT + 99 others); Tue, 8 Dec 2020 03:36:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728331AbgLHIgC (ORCPT ); Tue, 8 Dec 2020 03:36:02 -0500 Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5306CC061793 for ; Tue, 8 Dec 2020 00:35:16 -0800 (PST) Received: by mail-lf1-x142.google.com with SMTP id l11so21955157lfg.0 for ; Tue, 08 Dec 2020 00:35:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uged.al; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DVjmHtFolxRAfV2C2U9GLiRolrXJrnLIEB5X5ihubDs=; b=qAmjandBuTe8qafIuAhL+TRlTjWYdwJtv4pxvO3A91BFSWYQ2m5Dhc5xXfQ86i45P4 E3fIfNW8Zyzttr/rUcthF0L0R46DB055NYg4IpBbRNoHX8L+c6pT9AlSyhHwt6L5MEGK IrcIIo7NM2/irS7jnXbifBZN+fNdTFHhYIKvh7/ychq6B8PNveguCXhAVaXvWRqSAFJm f4nOYltGvJKemURDUDlTLofhy8UHwaVdDv1ttvzDvudAGIwAy1Wzpz+oBT0P52Gqw7tz 0b3B0QChyVPVQ0uyTybj0ii9Zisy884SfXaCGt7AK8RnwZHNPfF3P+L+T4pkausUhqXG JkKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DVjmHtFolxRAfV2C2U9GLiRolrXJrnLIEB5X5ihubDs=; b=dspVZXEo9bctEGYBUsLQCoRaf4/rrYaGcF9dYAeC0rr+VOSvhw3QoZ/gvq6n+Rpqg6 nJwjE/cMai7QyN5YdEnKWp+lpaT6k1IIVP++3HpV95TBInJEQidTyjoTLaGOicALu7y+ O5gozqcVb4B30CGDl0TF6p38l6r6IWWcWjDFPvQKDvPbPwAFz0i1sI9hrH3tavPoopZr aGvFLoJR9SPOnOHxk/55JZw0oP8zK50OW3WYJzSCaMajL7fKygtoRO3Pz0e9RKxgFId4 36imEfR+e73SrwuTxB/Jb5f/cKdg3VWan7XTYCgEWGxENfNJhG/h8nmjMe6TrQQpG8Rk 5+ZQ== X-Gm-Message-State: AOAM5337uU4VAyZ7kD1TVcZF9MMlxXmStMndEiuVAM6ruzC8z2fUKnmt MIUT5hBIJgi0C4wT0JUx6plrqQ== X-Received: by 2002:ac2:5984:: with SMTP id w4mr1349317lfn.379.1607416514833; Tue, 08 Dec 2020 00:35:14 -0800 (PST) Received: from xps.lan (238.89-10-169.nextgentel.com. [89.10.169.238]) by smtp.gmail.com with ESMTPSA id f1sm3277720ljp.65.2020.12.08.00.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Dec 2020 00:35:14 -0800 (PST) From: Odin Ugedal To: tj@kernel.org, lizefan@huawei.com, hannes@cmpxchg.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, dschatzberg@fb.com, surenb@google.com Cc: Odin Ugedal Subject: [PATCH] psi: fix monitor for root cgroup Date: Tue, 8 Dec 2020 09:35:10 +0100 Message-Id: <20201208083510.14344-1-odin@uged.al> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix NULL pointer dereference when adding new psi monitor to the root cgroup. PSI files for root cgroup was introduced in df5ba5be742 by using system wide psi struct when reading, but file write/monitor was not properly fixed. Since the PSI config for the root cgroup isn't initialized, the current implementation tries to lock a NULL ptr, resulting in a crash. Can be triggered by running this as root: $ tee /sys/fs/cgroup/cpu.pressure <<< "some 10000 1000000" Signed-off-by: Odin Ugedal --- kernel/cgroup/cgroup.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index e41c21819ba0..5d1fdf7c3ec6 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -3567,6 +3567,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf, { struct psi_trigger *new; struct cgroup *cgrp; + struct psi_group *psi; cgrp = cgroup_kn_lock_live(of->kn, false); if (!cgrp) @@ -3575,7 +3576,8 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf, cgroup_get(cgrp); cgroup_kn_unlock(of->kn); - new = psi_trigger_create(&cgrp->psi, buf, nbytes, res); + psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi; + new = psi_trigger_create(psi, buf, nbytes, res); if (IS_ERR(new)) { cgroup_put(cgrp); return PTR_ERR(new); -- 2.29.2