Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1904734imm; Sat, 23 Jun 2018 05:19:46 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJ7rzPW6iWb45q6Mw85XSevk9Ct2dJP8oUYW0CvDO74bvHcw6w639xF6+JKaikIaTEnGs39 X-Received: by 2002:a17:902:8d98:: with SMTP id v24-v6mr5403258plo.250.1529756386467; Sat, 23 Jun 2018 05:19:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529756386; cv=none; d=google.com; s=arc-20160816; b=haoQr/R5/xiToexth8enasiDo9pZbETxt1hnYwTf5VVc1J1ztGaFL9d6FCfAAVKR6x CGaLiRAaPGfugNXZFTbk7rf8oE89cdA7NmzVEOGfFwGBHWqDVwCkLx5MkqPjOSTFWwtx UeeFJS/n6UX/HDCS5QKDJaBZAsL7sSywrLx8QXAJdvv3TlNEU+q2N8HcsnWmZSU9s1UL HaNsIdEPaLGfs6Ib/35e7D9as9nAWxk6EWGNNtwSgTEOfgoRZlw19Ez2dLptTk4v6WdH MsaJZicbZXb6LToTmLjZBPwExKMRToLdSz7bXOdoobXOmZ3ENvPYc5tOjLrWK1ijYccJ b+hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition :content-transfer-encoding:mime-version:robot-unsubscribe:robot-id :git-commit-id:subject:to:references:in-reply-to:reply-to:cc :message-id:from:date:arc-authentication-results; bh=ER+oxmCJjKcpl+ylfz96kA9J5asOH+qbOP89TZeURiw=; b=vIOn6cMUM8PrILb689TrlCkLtQNoT5anagNWHdzqiYmg78u7leVuIM+UWYI6UBSziS t4Kwyiw875Mxmw5qbZBcTRecHgMPXHucvzqHPJH+YkGE9n31eu1Gsrz/NRHTV4gtoy0m k92pmsJ0bU3E2S6qr5Updb/cjVZMJyeydOZPmaef5uajA1XNNGohip/4qlAWtvdt8YK5 8F7UrqGnRDqEAZQEY9D7jnhotCl9/ZlEqcG7of/69+BI3CIjR5zsUukos//3pgDJFPqe IFxC0w5WmAtR/RPwi04KYROa+8SBblmJeQhNKYVg7IbEARW0NnpS13mURMh+cGmaGybf GO4Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u22-v6si9394745pfg.62.2018.06.23.05.19.32; Sat, 23 Jun 2018 05:19:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752116AbeFWMRy (ORCPT + 99 others); Sat, 23 Jun 2018 08:17:54 -0400 Received: from terminus.zytor.com ([198.137.202.136]:51389 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751520AbeFWMRx (ORCPT ); Sat, 23 Jun 2018 08:17:53 -0400 Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTPS id w5NCHmgd464575 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sat, 23 Jun 2018 05:17:48 -0700 Received: (from tipbot@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id w5NCHmT8464572; Sat, 23 Jun 2018 05:17:48 -0700 Date: Sat, 23 Jun 2018 05:17:48 -0700 X-Authentication-Warning: terminus.zytor.com: tipbot set sender to tipbot@zytor.com using -f From: tip-bot for Reinette Chatre Message-ID: Cc: mingo@kernel.org, hpa@zytor.com, tglx@linutronix.de, linux-kernel@vger.kernel.org, reinette.chatre@intel.com Reply-To: reinette.chatre@intel.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, hpa@zytor.com, mingo@kernel.org In-Reply-To: <0c5cb006e81ead0b8bfff2df530c5d3017fd31d1.1529706536.git.reinette.chatre@intel.com> References: <0c5cb006e81ead0b8bfff2df530c5d3017fd31d1.1529706536.git.reinette.chatre@intel.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/cache] x86/intel_rdt: Protect against resource group changes during locking Git-Commit-ID: c966dac8a5ede5d5f9b730512d8bdbcec307fe38 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, DATE_IN_FUTURE_96_Q autolearn=ham autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on terminus.zytor.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: c966dac8a5ede5d5f9b730512d8bdbcec307fe38 Gitweb: https://git.kernel.org/tip/c966dac8a5ede5d5f9b730512d8bdbcec307fe38 Author: Reinette Chatre AuthorDate: Fri, 22 Jun 2018 15:42:12 -0700 Committer: Thomas Gleixner CommitDate: Sat, 23 Jun 2018 13:03:46 +0200 x86/intel_rdt: Protect against resource group changes during locking We intend to modify file permissions to make the "tasks", "cpus", and "cpus_list" not accessible to the user when cache pseudo-locking in progress. Even so, it is still possible for the user to force the file permissions (using chmod) to make them writeable. Similarly, directory permissions will be modified to prevent future monitor group creation but the user can override these restrictions also. Add additional checks to the files we intend to restrict to ensure that no modifications from user space are attempted while setting up a pseudo-locking or after a pseudo-locked region is set up. Signed-off-by: Reinette Chatre Signed-off-by: Thomas Gleixner Cc: fenghua.yu@intel.com Cc: tony.luck@intel.com Cc: vikas.shivappa@linux.intel.com Cc: gavin.hindman@intel.com Cc: jithu.joseph@intel.com Cc: dave.hansen@intel.com Cc: hpa@zytor.com Link: https://lkml.kernel.org/r/0c5cb006e81ead0b8bfff2df530c5d3017fd31d1.1529706536.git.reinette.chatre@intel.com --- arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c | 10 +++++++++ arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 32 +++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c index 0e6210a043f0..bc79396c5dad 100644 --- a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c +++ b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c @@ -283,6 +283,16 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, } rdt_last_cmd_clear(); + /* + * No changes to pseudo-locked region allowed. It has to be removed + * and re-created instead. + */ + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { + ret = -EINVAL; + rdt_last_cmd_puts("resource group is pseudo-locked\n"); + goto out; + } + for_each_alloc_enabled_rdt_resource(r) { list_for_each_entry(dom, &r->domains, list) dom->have_new_ctrl = false; diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c index 08a412e0b47a..013cbfedc753 100644 --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c @@ -449,6 +449,13 @@ static ssize_t rdtgroup_cpus_write(struct kernfs_open_file *of, goto unlock; } + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || + rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { + ret = -EINVAL; + rdt_last_cmd_puts("pseudo-locking in progress\n"); + goto unlock; + } + if (is_cpu_list(of)) ret = cpulist_parse(buf, newmask); else @@ -651,13 +658,22 @@ static ssize_t rdtgroup_tasks_write(struct kernfs_open_file *of, if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0) return -EINVAL; rdtgrp = rdtgroup_kn_lock_live(of->kn); + if (!rdtgrp) { + rdtgroup_kn_unlock(of->kn); + return -ENOENT; + } rdt_last_cmd_clear(); - if (rdtgrp) - ret = rdtgroup_move_task(pid, rdtgrp, of); - else - ret = -ENOENT; + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || + rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { + ret = -EINVAL; + rdt_last_cmd_puts("pseudo-locking in progress\n"); + goto unlock; + } + + ret = rdtgroup_move_task(pid, rdtgrp, of); +unlock: rdtgroup_kn_unlock(of->kn); return ret ?: nbytes; @@ -2315,6 +2331,14 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn, goto out_unlock; } + if (rtype == RDTMON_GROUP && + (prdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || + prdtgrp->mode == RDT_MODE_PSEUDO_LOCKED)) { + ret = -EINVAL; + rdt_last_cmd_puts("pseudo-locking in progress\n"); + goto out_unlock; + } + /* allocate the rdtgroup. */ rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL); if (!rdtgrp) {