Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4175956imu; Mon, 10 Dec 2018 14:32:54 -0800 (PST) X-Google-Smtp-Source: AFSGD/Uf5IHm71CZPgs1tsSkkUhOooaWh6SRMs7Ow9yMi8cgE49MYJP5lVs8+OPSeRhGL/5l+s4y X-Received: by 2002:a62:868b:: with SMTP id x133mr14799596pfd.252.1544481174085; Mon, 10 Dec 2018 14:32:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544481174; cv=none; d=google.com; s=arc-20160816; b=SdjJPmb9p3IVpTiZMVeAACMikAkAWGerssq1vd0VD97VkZtieFDQf2K22v2cQyMy/3 xdEpCcEAtxyAzsGQlW1gRIbKWxAvKtJoieI7D2C1gw4axgEW4ZETcMjHWTGfEoT9J1Gq diRRylGEa4h81PBkE09ENaT+t79gh2AWeYYUJhGcUSHhJCW4QXnpY+RYcZTE23dzInfo jhGOxqoXNZAxFODSPxI55kRFyhlw0FY3xw9eg8PcaVWaFzOAWk/NjNJmcMD5B9Q9Wkaz Of1cOVXqidcTzxSRirs0gWn5oMpu+ZIf2GyLk8Kjltc9OTrYNSLy709iiQesut6FDUB8 jBRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=EwhZ+MDRsSGqAPawjIpHgLS9uRjkb9ji2O5ElKBtSkM=; b=wxeYAphHgBSez/zwyLzGzmRiqcomtwpKaqUtjkdDMRPUOGlxpDydWBQh+kJ6YisqQW MQR1S0YIT871AB61jitMzmLGoBBYTGczeJE92Je0JIP91KCvTMd805VzPhOqL97BEzgl Vbm+6n79jMbYMLsxfqn5Y+yUxpF/9ULU2oTB3zflNVpxcRkDQFHdnnTXIihJ/0s5oOur ARkdRATWF/K0B9D6KkivLL4qiWvB0GuAOH9C+kGnDTcfHP9QnvyL8PKmlY5BW4/YX/GN XHz3EzIuwZu+g/DaoyWVnyPCNMubjYdE8qLY+YUvEsg7lQYXBmbJd97uvMttdb+oWPh1 mNrA== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q189si11604329pfb.62.2018.12.10.14.32.38; Mon, 10 Dec 2018 14:32:54 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728736AbeLJWb7 (ORCPT + 99 others); Mon, 10 Dec 2018 17:31:59 -0500 Received: from mga18.intel.com ([134.134.136.126]:62328 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726392AbeLJWb7 (ORCPT ); Mon, 10 Dec 2018 17:31:59 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Dec 2018 14:31:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,340,1539673200"; d="scan'208";a="302698924" Received: from rchatre-s.jf.intel.com ([10.54.70.76]) by fmsmga005.fm.intel.com with ESMTP; 10 Dec 2018 14:31:58 -0800 From: Reinette Chatre To: tglx@linutronix.de, fenghua.yu@intel.com, bp@alien8.de, tony.luck@intel.com Cc: gavin.hindman@intel.com, jithu.joseph@intel.com, mingo@redhat.com, hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org, Reinette Chatre Subject: [PATCH V2] x86/resctrl: Fix rdt_find_domain() return value and checks Date: Mon, 10 Dec 2018 14:31:13 -0800 Message-Id: X-Mailer: git-send-email 2.17.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org rdt_find_domain() returns an ERR_PTR() that is generated from a provided domain id when the value is negative. Care needs to be taken when creating an ERR_PTR() from this value because a subsequent check using IS_ERR() expects the error to be within the MAX_ERRNO range. By using an invalid domain id as an ERR_PTR() does work at this time since this is currently always -1. Using this undocumented assumption is fragile since future users of rdt_find_domain() may not be aware of thus assumption. Two related issues are addressed: - Ensure that rdt_find_domain() always returns a valid error value by forcing the error to be -ENODEV when a negative domain id is provided. - In a few instances the return value of rdt_find_domain() is just checked for NULL - fix these to include a check of ERR_PTR. Fixes: d89b7379015f ("x86/intel_rdt/cqm: Add mon_data") Fixes: 521348b011d6 ("x86/intel_rdt: Introduce utility to obtain CDP peer") Signed-off-by: Reinette Chatre --- V2: - Force error value to be -ENODEV when negative domain id provided - Rewrite commit message to describe why error value needs to be forced in addition to the original fix arch/x86/kernel/cpu/resctrl/core.c | 2 +- arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 2 +- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index 2ec252be4ed9..c3a9dc63edf2 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -454,7 +454,7 @@ struct rdt_domain *rdt_find_domain(struct rdt_resource *r, int id, struct list_head *l; if (id < 0) - return ERR_PTR(id); + return ERR_PTR(-ENODEV); list_for_each(l, &r->domains) { d = list_entry(l, struct rdt_domain, list); diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c index ba11f54f5ab8..3b943ace786c 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -534,7 +534,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg) r = &rdt_resources_all[resid]; d = rdt_find_domain(r, domid, NULL); - if (!d) { + if (IS_ERR_OR_NULL(d)) { ret = -ENOENT; goto out; } diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 017505017bdb..8388adf241b2 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -1029,7 +1029,7 @@ static int rdt_cdp_peer_get(struct rdt_resource *r, struct rdt_domain *d, * peer RDT CDP resource. Hence the WARN. */ _d_cdp = rdt_find_domain(_r_cdp, d->id, NULL); - if (WARN_ON(!_d_cdp)) { + if (WARN_ON(IS_ERR_OR_NULL(_d_cdp))) { _r_cdp = NULL; ret = -EINVAL; } -- 2.17.0