lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220626081339.7243-1-akihiko.odaki@gmail.com>
Date:   Sun, 26 Jun 2022 17:13:39 +0900
From:   Akihiko Odaki <akihiko.odaki@...il.com>
To:     unlisted-recipients:; (no To-header on input)
Cc:     Basavaraj Natikar <basavaraj.natikar@....com>,
        Jiri Kosina <jikos@...nel.org>,
        Benjamin Tissoires <benjamin.tissoires@...hat.com>,
        linux-input@...r.kernel.org, linux-kernel@...r.kernel.org,
        Akihiko Odaki <akihiko.odaki@...il.com>
Subject: [PATCH] HID: amd_sfh: Ignore uninitialized device

Lenovo ThinkPad C13 Yoga has AMD Sensor Fusion Hub, but it is not used
because Chrome OS EC Sensor Hub is used instead. The system therefore
never loads the firmware for MP2 and MP2 does not work. It results in
AMD_P2C_MSG3 register to have -1 as its value.

Without this change, the driver interprets the value as it supports all
sensor types and exposes them, which confuses a userspace program,
iio-sensor-proxy, and makes it to use the non-functioning sensors
instead of functioning sensors exposed via Chrome OS EC Sensor Hub.

Check the version bits included in AMD_P2C_MSG3 register and ignore the
device if all of the bits are set.

Signed-off-by: Akihiko Odaki <akihiko.odaki@...il.com>
---
 drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
index dadc491bbf6b..4137e5da77ad 100644
--- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
@@ -271,6 +271,8 @@ static void mp2_select_ops(struct amd_mp2_dev *privdata)
 	case V2_STATUS:
 		privdata->mp2_ops = &amd_sfh_ops_v2;
 		break;
+	case 15:
+		break;
 	default:
 		privdata->mp2_ops = &amd_sfh_ops;
 		break;
@@ -317,6 +319,8 @@ static int amd_mp2_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
 		return -ENOMEM;
 
 	mp2_select_ops(privdata);
+	if (!privdata->mp2_ops)
+		return -ENODEV;
 
 	rc = amd_sfh_irq_init(privdata);
 	if (rc) {
-- 
2.36.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ