Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1632936ybv; Fri, 21 Feb 2020 00:40:14 -0800 (PST) X-Google-Smtp-Source: APXvYqwk7TssNaPDpGYXtxv5tHMc584gM/icSl+aOpUtIaJr03sE2VN4OhE+71FAB+jVOEhLr2n0 X-Received: by 2002:aca:b60a:: with SMTP id g10mr1030278oif.102.1582274414246; Fri, 21 Feb 2020 00:40:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582274414; cv=none; d=google.com; s=arc-20160816; b=hAM7XKqNkFjfQ16N1HrMrRkL0mvqvJBvK5gsyIj3tL9bSAf60/doKOao48QhR7FlOS k5sc8hcx3vyEv/SLWh6tZJJ21phSTFkKG194TMlpNmyA6HcIbDY448IR+pds2zId7Xrp +72E8pNYBITuip6MlakSQQdzfLW66bB6awa5gycyAVsG1nV3iUsRBtbBYcFXEsAyqNOp 0tcp7WP4EaZm/efSoFrQmGEKfb7iGi1dHn3Z9yi56g2MJuOrWmMliSqm5NOUNFHps0ZH Cn1Ex7hU+Kx871XqfyBppUwXkbsScXmZUWaw9FjqQ/m6Bbja5Nuqs/5/1KTQHx4S/zvH zNfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ZWG71404tUP6CNWI5kMWyiQWMtrQqdmmg3A9NroPIVU=; b=KcCfFRTSq4/DS9XnQs2S/lO+kQQQRbFE5gqYjwZecn6OSSZSTi2X8XIGOXr8M0ObvY 2ZcNtPgDOR4s3nJN/wL+vV7vZ6tQdBtY2ZWcP3/nef6mW6USPsq5pRUfJyqJK7/YCq5H aChcV9qZGUrf9m7jnuYVJ+Igw3XN/TmVvrmIqUbR1nYTh1g0zPEN1ryjbzk/cL1rJgCz vw2lg8rBr4Lx1JaX6ygNlKOEO+R3I8hbZ2yEtlNGl2RnFu9EcY9qSuDaJmFo07G3c8tN 25fy8s5MZrLU3z9Ec5aU2z8yRGM5TwzWzec1nonKhiHs4O2quIm/Q0WhG+bph7gVV0+l FUTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iqT2zU51; 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 k4si1084973otp.186.2020.02.21.00.40.02; Fri, 21 Feb 2020 00:40:14 -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; dkim=pass header.i=@kernel.org header.s=default header.b=iqT2zU51; 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 S1730988AbgBUIBG (ORCPT + 99 others); Fri, 21 Feb 2020 03:01:06 -0500 Received: from mail.kernel.org ([198.145.29.99]:33342 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730878AbgBUIBE (ORCPT ); Fri, 21 Feb 2020 03:01:04 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A761F24656; Fri, 21 Feb 2020 08:01:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582272064; bh=yDTaCK/ytGY8aZ97lgRFlGc4UE+I2EUoD7z51dMYExw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iqT2zU51Taa08QidjZokPc6Y04y/eoZlaJlEWgx39sqmYzvFZG3tFy+VnvvthLnQt knE9LFZRUozjMQ7x73acIazLBPeRsAMofCgNmPHpvLcs+kas3gk6FUDYybMLbcQ6Db 9vvWQV7+7c1HxtkV8iY7pJ0AxJ/2R7H7ACreTUqE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vadim Pasternak , Jiri Pirko , Ido Schimmel , "David S. Miller" , Sasha Levin Subject: [PATCH 5.5 395/399] mlxsw: core: Add validation of hardware device types for MGPIR register Date: Fri, 21 Feb 2020 08:42:00 +0100 Message-Id: <20200221072438.273759534@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200221072402.315346745@linuxfoundation.org> References: <20200221072402.315346745@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vadim Pasternak [ Upstream commit 36844c855b896f90bab51ccecf72940eb7e3cfe1 ] When reading the number of gearboxes from the hardware, the driver does not validate the returned 'device type' field. The driver can therefore wrongly assume that the queried devices are gearboxes. On Spectrum-3 systems that support different types of devices, this can prevent the driver from loading, as it will try to query the temperature sensors from devices which it assumes are gearboxes and in fact are not. For example: [ 218.129230] mlxsw_minimal 2-0048: Reg cmd access status failed (status=7(bad parameter)) [ 218.138282] mlxsw_minimal 2-0048: Reg cmd access failed (reg_id=900a(mtmp),type=write) [ 218.147131] mlxsw_minimal 2-0048: Failed to setup temp sensor number 256 [ 218.534480] mlxsw_minimal 2-0048: Fail to register core bus [ 218.540714] mlxsw_minimal: probe of 2-0048 failed with error -5 Fix this by validating the 'device type' field. Fixes: 2e265a8b6c094 ("mlxsw: core: Extend hwmon interface with inter-connect temperature attributes") Fixes: f14f4e621b1b4 ("mlxsw: core: Extend thermal core with per inter-connect device thermal zones") Signed-off-by: Vadim Pasternak Acked-by: Jiri Pirko Signed-off-by: Ido Schimmel Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c | 6 ++++-- drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c index 9bf8da5f6dafc..3fe878d7c94cb 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c +++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c @@ -573,6 +573,7 @@ static int mlxsw_hwmon_module_init(struct mlxsw_hwmon *mlxsw_hwmon) static int mlxsw_hwmon_gearbox_init(struct mlxsw_hwmon *mlxsw_hwmon) { + enum mlxsw_reg_mgpir_device_type device_type; int index, max_index, sensor_index; char mgpir_pl[MLXSW_REG_MGPIR_LEN]; char mtmp_pl[MLXSW_REG_MTMP_LEN]; @@ -584,8 +585,9 @@ static int mlxsw_hwmon_gearbox_init(struct mlxsw_hwmon *mlxsw_hwmon) if (err) return err; - mlxsw_reg_mgpir_unpack(mgpir_pl, &gbox_num, NULL, NULL, NULL); - if (!gbox_num) + mlxsw_reg_mgpir_unpack(mgpir_pl, &gbox_num, &device_type, NULL, NULL); + if (device_type != MLXSW_REG_MGPIR_DEVICE_TYPE_GEARBOX_DIE || + !gbox_num) return 0; index = mlxsw_hwmon->module_sensor_max; diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c index c721b171bd8de..ce0a6837daa32 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c @@ -895,8 +895,10 @@ static int mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, struct mlxsw_thermal *thermal) { + enum mlxsw_reg_mgpir_device_type device_type; struct mlxsw_thermal_module *gearbox_tz; char mgpir_pl[MLXSW_REG_MGPIR_LEN]; + u8 gbox_num; int i; int err; @@ -908,11 +910,13 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core, if (err) return err; - mlxsw_reg_mgpir_unpack(mgpir_pl, &thermal->tz_gearbox_num, NULL, NULL, + mlxsw_reg_mgpir_unpack(mgpir_pl, &gbox_num, &device_type, NULL, NULL); - if (!thermal->tz_gearbox_num) + if (device_type != MLXSW_REG_MGPIR_DEVICE_TYPE_GEARBOX_DIE || + !gbox_num) return 0; + thermal->tz_gearbox_num = gbox_num; thermal->tz_gearbox_arr = kcalloc(thermal->tz_gearbox_num, sizeof(*thermal->tz_gearbox_arr), GFP_KERNEL); -- 2.20.1