From nobody Wed Oct 8 12:49:04 2025 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4394421C19E; Sat, 28 Jun 2025 05:01:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751086881; cv=none; b=j/5Si6PIAZB2+m7w3MngGBCL/Nfb8FudCFlpkd2qAYav9YSsQuA4qv1XrzU7V5chOFTjYISgiS7wzxH0sXSeVM2beWoxjQbYt0KYEVe/WiMcs5MBp71Vyhi5yXi/jLmJX8wCQSLhp7v05GVIKkfIStGFGU/d8M/exmkytlp7Rwk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751086881; c=relaxed/simple; bh=x4+w0bmLqKhE3XkngQN62+KQqk5Kt99eaf5GrloOe4A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ukX+WhLdtPTrcO+h92q9pOp5t04eI2n9/a+5mAOjx5paQWBwz7AjP5WD0jCG31IhzDXqsjUWLrsB7KGZZBl+o5XBrqv40UoT3zKd6pBaict52UIJYdYfxrPi3nn1rNENDiey6n0w7Jkm4EXDzqN28+/Rs4aipGPUTkpHXvgig2Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i3DZEaeR; arc=none smtp.client-ip=209.85.219.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i3DZEaeR" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-6fadd3ad18eso28495496d6.2; Fri, 27 Jun 2025 22:01:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751086879; x=1751691679; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=zpZMJ6djd7w681PQrFXCalL42+S25luXWIlauLUCkRc=; b=i3DZEaeRX5bbQPSJpqa9HjvCM2m7IdDoweD9W0fkhkPCpaXbFW7PxCEwiJAxCdmDSo JOxUAmRLOrcdKwSic+EdjlfWOjS7YDZelR8VP2Ue4q6q95cGEPruyEzoaTBTW/MrrF1k Dgi+yFYij6eAXG/ccPQq4Iy599H27KXuE3ZKhva6sSsw84SJ682HLpcozK5WUJOYKJY/ 7oQfAwkRGHJgHwIcAZhej9dQF4SV6LKbFf7qvkvLm+LKCQmiK3ipWNTmWAvJ+moXjReH /6KbUGExfsnFU1acze+80rHUPhmGD4EjsIFqpMnd9Sr5DupqV0Rl15Z+uORpqtP6wM4H sOmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751086879; x=1751691679; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zpZMJ6djd7w681PQrFXCalL42+S25luXWIlauLUCkRc=; b=VHYF3XV8dcGUBziiDq1BlU3XN0aNTFu0L0jSuNpidjCcanWMT+hwXmHby3MCHUwHrQ D9jL8G0sEd/2gdFRHDfONpJpWma7ah2Pu8KtNuS832ycXR3qIRp8OKBew9HscySac2V8 L1aB3y7M91EVshmwKujcHbIEz9ukg7H4hrqVOg5snwVbEdtEbSal9zKV6xAH/+vZiizu 2oAopiXvay6L0IqB5WoBmt1gv8Ab3nlDwioJ/8LMrvE3EMqo3gmnPUnHrBfF1yJURRaI VUbq3Gm8osnWq+NpuOnzQ+waRMe25Jd314t9AvOwHwriKwhmK1THbzM7s8fd5UIdEu7u mm0g== X-Forwarded-Encrypted: i=1; AJvYcCU4B2fXsRWOye4oaKHZn7R0LYS8a0D+nYzdNVvGl3UiKmw1s9Oli9WuDUbBYpgN+UZ68S1y7H8tvCiLZUo=@vger.kernel.org X-Gm-Message-State: AOJu0YyqNd9M2K99fUYJ7SCqAcrw3wT5WsMf6UIPKbT2wloAkjsHaRnw AUEZemGTMKMiyn592hQ63bIeTOZy1H98UmKj850Wghw/GFfnketHgiVgeRteGpxK X-Gm-Gg: ASbGncvyKyqv2Nk6IEDVW7ApceDNHZi0vyAvpJSS0OzFqjz//aZKrmtj5AUZJ9yM9Zu vvR8IFcYhzNQai+9tb+k0txGSVR2mdN7TaE/FCYudXtg6py8tkvQyFsB8HvcpZ1jH5lZlTj1shI dAouz+o2AjoIafb1nnfR0w9n2R/x9t8PnPvmFYgJDBD7JvVP1cXuGEC6gNLBHgahvNKuZwq/cbV 03/i8vC+jXLymy+QMmWZer194nOTtW/Tllg9P7Gn3QUQ05/HSGrbeNlgdN5hFaMcdFaLaFb6UvA kDgsUgiZun0F/O2qmmqZ2oj/vFOkGlnkCjwNtXd8VG2KrUQCpnuY4ybudj2Qw6mL9urvHQN0 X-Google-Smtp-Source: AGHT+IG0o/2SSxf4iMGzsNeZVPRsHJaDefOz/48Ka9I0Z6qaaOdClkuB1ykID47g9yvGQTbRtw0yLg== X-Received: by 2002:a05:6214:3909:b0:6fa:bb44:fddf with SMTP id 6a1803df08f44-700016588f2mr109629556d6.16.1751086878784; Fri, 27 Jun 2025 22:01:18 -0700 (PDT) Received: from [192.168.1.26] ([181.88.247.122]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fd772e34besm31504966d6.75.2025.06.27.22.01.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Jun 2025 22:01:18 -0700 (PDT) From: Kurt Borja Date: Sat, 28 Jun 2025 02:00:46 -0300 Subject: [PATCH 1/3] platform/x86: think-lmi: Create ksets consecutively Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250628-lmi-fix-v1-1-c6eec9aa3ca7@gmail.com> References: <20250628-lmi-fix-v1-0-c6eec9aa3ca7@gmail.com> In-Reply-To: <20250628-lmi-fix-v1-0-c6eec9aa3ca7@gmail.com> To: Mark Pearson , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Kurt Borja X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1581; i=kuurtb@gmail.com; h=from:subject:message-id; bh=x4+w0bmLqKhE3XkngQN62+KQqk5Kt99eaf5GrloOe4A=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDBnx5VJ+Smtjuq6JeS351PF0f7282CdlyZONh2USfrKcP RQTUdDWUcrCIMbFICumyNKesOjbo6i8t34HQu/DzGFlAhnCwMUpABO5q8vIsPeP5+p29RWGGRPW p93Zlt4z/XTr2eb9K++WSMVO43556C7Db/Y7B3RYbVtSKyJ7hDonr/qdL7oifpvnn8+a9xwtI0v t2AA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Avoid entering tlmi_release_attr() in error paths if both ksets are not yet created. This is accomplished by initializing them side by side. Signed-off-by: Kurt Borja Reviewed-by: Mark Pearson --- drivers/platform/x86/lenovo/think-lmi.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/platform/x86/lenovo/think-lmi.c b/drivers/platform/x86= /lenovo/think-lmi.c index 34a47269e3d34d2eda6b71af73892656cd2bf67d..b3e7d76cccf7840a5bcf7f849f2= a70e164cb7086 100644 --- a/drivers/platform/x86/lenovo/think-lmi.c +++ b/drivers/platform/x86/lenovo/think-lmi.c @@ -1457,6 +1457,14 @@ static int tlmi_sysfs_init(void) goto fail_device_created; } =20 + tlmi_priv.authentication_kset =3D kset_create_and_add("authentication", N= ULL, + &tlmi_priv.class_dev->kobj); + if (!tlmi_priv.authentication_kset) { + kset_unregister(tlmi_priv.attribute_kset); + ret =3D -ENOMEM; + goto fail_device_created; + } + for (i =3D 0; i < TLMI_SETTINGS_COUNT; i++) { /* Check if index is a valid setting - skip if it isn't */ if (!tlmi_priv.setting[i]) @@ -1498,12 +1506,6 @@ static int tlmi_sysfs_init(void) } =20 /* Create authentication entries */ - tlmi_priv.authentication_kset =3D kset_create_and_add("authentication", N= ULL, - &tlmi_priv.class_dev->kobj); - if (!tlmi_priv.authentication_kset) { - ret =3D -ENOMEM; - goto fail_create_attr; - } tlmi_priv.pwd_admin->kobj.kset =3D tlmi_priv.authentication_kset; ret =3D kobject_add(&tlmi_priv.pwd_admin->kobj, NULL, "%s", "Admin"); if (ret) --=20 2.50.0 From nobody Wed Oct 8 12:49:04 2025 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C4CD1854; Sat, 28 Jun 2025 05:01:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751086884; cv=none; b=o1YiV31KY5vDk4BbnFVjrJtTR9MJBoOCwObdY2pGGOLCXzfrKP+M7i3wkH1JNEVEZG4B+9Qo7p4Ewnzb4wTb9AoYNkNq58OzvpYnPpvdxGmldHpMkqDRzTwsKuCS09gEiLsAz0FE6kEXozymCveXwTNpfNy8jMGFFRPf4nVq6Bs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751086884; c=relaxed/simple; bh=I/rWz8kdUcx1aXjVUl6mNjq06Z+nxm6Clw1x2jurgwQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kNHSDWT3mcyLwprKuiUBE7hgv4hOzLFt2u3JVbvcEeSr+wBHWCckEzdZbdQ8JwbuBaJ4HU04LEigEawAE3u1eTttNxa/u21faWOsDpHztgKx/nUJ3cCyjdAR9/rVvh39EZnyG+md2NByvXsCdsaDzd/7zIAbY1iRIb9djjWfpFg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XFf89Cbd; arc=none smtp.client-ip=209.85.219.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XFf89Cbd" Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6fadb9a0325so4318976d6.2; Fri, 27 Jun 2025 22:01:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751086881; x=1751691681; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=I/5Kgexb9RXmRPI7iym6vR22zD7XYW22SybC1207JdU=; b=XFf89Cbd3KT1nKo6xvtEpXykxalEjNDFSy3ByyIAMM2i/CHB9kUH4PySAxTyziDFoT 3r5RfnkJibmEkbtOtizWjuDaJczJ3tvviqVBBSqvb1Cw+u28lOdwM4KFPpMM153Tl6J8 cEqOTh6KSe5x/0GUniFjJLKQm9vUTUKuKdjZsn408Okou3R2RvjAKGn8et6hdaHyHcHG MU8/HxIkJu5NR0YfGc5ED7sPs70d828ur/H0/smD99iYfSFLd8nrCy1vxP+pP0X7j5Aj g5gX31z3i6gdLGAobwVbBtR4BjOGw5tFU5Lp9A3f1YkN3M1oZVZKXBzioKG3dUXUuze4 R+FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751086881; x=1751691681; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=I/5Kgexb9RXmRPI7iym6vR22zD7XYW22SybC1207JdU=; b=c4bNV9JhD11Loomt6NZVBGtxjg9torAnR37mQYqrghvp5sd05r7yG2KWWOzHJzEWCQ DdtMNamffAFNl1iSymvs6GspjSE+EfScSCLnokJDW6rvbEinhK3t27cRoVb0hrQt/q8I QLKO/9jLEIl411VSL6JczEyy/3cVkBluLbOB93Bddtv1O8s+fefamn5jKDG0F/jJeQ93 zXbVWTQtMU9UQPPFa1gf66/cLS1MJpc3raRswh4JEmkgqDBOjtNt7Nf1SfIkNjqfJg9Z HYDDOM0lqHCPBPXpJpd2dee+U6BZyP/tO0u5qUgDm7/geksqwyOE1mM6Wb1CEV3g9ZeL zByQ== X-Forwarded-Encrypted: i=1; AJvYcCVOw00EPw/svvybsaZgAB+05UsoPs5sVtMhika/uVYhW11+SPZ7QnB3fiMPUIjiiV7VK285c7PygQxzyEg=@vger.kernel.org X-Gm-Message-State: AOJu0YyaxzDgojWiuPLkEMyK92EwJKDr3pSHdK65I10qp1iGwjTaIxdT sSKQ3KgTc4CnOpwM19e3CPeje6aCfDHZA49GVh9Tpkwkxz+Deta7ZGdYZIBQ7TVx X-Gm-Gg: ASbGncvIOEfLxhpJDCZkPSL+o6fLK2NmWdvX9ur+4P1dGv02XfStgdNCHP9CZAIlEns HDKxGk45BeukXX/lviJPRBJnL7tgrK+Npc8muL8f48R9pMhs7s3UGUBLgvgkucQDUQLJhyRSTJH cg3evoRb7mPpRpQgGQgnwrmlUfOD2aas3IbDcet+7t7VUSn+WrfpozPS/ZIrGYk6lbpXdrqspA4 UCl0JZBEr9IAGPPa2CH/IirSx+KO0OQtJ7b7qlU2TP4XrsvtfoF+xRbS9krrdQ6yXeQLPXiTYIz Ys4dB1ACZjnu66/Fd76T1QybBkEzxzScC1vlLq1OrfbPHV/6bqytjmee8ssG2g== X-Google-Smtp-Source: AGHT+IEq3ITQaVwO8eClbFveGCyCTqwvCl7bhnwgreCWQKLzEqGVcxKu8x1r2Ngh8p9WHp7kE0uX9g== X-Received: by 2002:a05:6214:489:b0:6fb:1db:e9e7 with SMTP id 6a1803df08f44-70001d66606mr101820346d6.10.1751086881102; Fri, 27 Jun 2025 22:01:21 -0700 (PDT) Received: from [192.168.1.26] ([181.88.247.122]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fd772e34besm31504966d6.75.2025.06.27.22.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Jun 2025 22:01:20 -0700 (PDT) From: Kurt Borja Date: Sat, 28 Jun 2025 02:00:47 -0300 Subject: [PATCH 2/3] platform/x86: think-lmi: Fix kobject cleanup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250628-lmi-fix-v1-2-c6eec9aa3ca7@gmail.com> References: <20250628-lmi-fix-v1-0-c6eec9aa3ca7@gmail.com> In-Reply-To: <20250628-lmi-fix-v1-0-c6eec9aa3ca7@gmail.com> To: Mark Pearson , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Kurt Borja X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5991; i=kuurtb@gmail.com; h=from:subject:message-id; bh=I/rWz8kdUcx1aXjVUl6mNjq06Z+nxm6Clw1x2jurgwQ=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDBnx5VIfY65NuG8pdOqw8AmX0pZjfznWbZNb0ix0ye/51 7mHt26M7ChlYRDjYpAVU2RpT1j07VFU3lu/A6H3YeawMoEMYeDiFICJaG9j+Ke/6rruGtdtYjVf txZk7PWpfLMzsdPwk97f5VqVx0P2689mZNicxfD/6uLtc7VXS/7469wVzX9nytlJM4/evu8jvIY 3LYoPAA== X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Cleanup of allocated kobjects has many flaws. In tlmi_analyze(), allocated structs with an embedded kobject are freed in error paths after the they were already initialized. In tlmi_release_attr(), which is called in tlmi_sysfs_init() error paths and in module exit, kobject_del() is never called. This, between other things, leaks the reference of the parent kobject, which is a kset in this case. Fix this flaws simultaneously, first by avoiding the initialization of kobjects in tlmi_analyze() and then by correctly cleaning them up in tlmi_release_attr() using their kset's kobject list. Fixes: a40cd7ef22fb ("platform/x86: think-lmi: Add WMI interface support on= Lenovo platforms") Signed-off-by: Kurt Borja Reviewed-by: Mark Pearson --- drivers/platform/x86/lenovo/think-lmi.c | 39 +++++++++++++++++++----------= ---- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/drivers/platform/x86/lenovo/think-lmi.c b/drivers/platform/x86= /lenovo/think-lmi.c index b3e7d76cccf7840a5bcf7f849f2a70e164cb7086..da3568727d79832f4669d7217e2= fdf691acf1cf5 100644 --- a/drivers/platform/x86/lenovo/think-lmi.c +++ b/drivers/platform/x86/lenovo/think-lmi.c @@ -1382,13 +1382,13 @@ static struct kobj_attribute debug_cmd =3D __ATTR_W= O(debug_cmd); /* ---- Initialisation ---------------------------------------------------= ------ */ static void tlmi_release_attr(void) { + struct kobject *pos, *n; int i; =20 /* Attribute structures */ for (i =3D 0; i < TLMI_SETTINGS_COUNT; i++) { if (tlmi_priv.setting[i]) { sysfs_remove_group(&tlmi_priv.setting[i]->kobj, &tlmi_attr_group); - kobject_put(&tlmi_priv.setting[i]->kobj); } } sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &pending_reboot.attr); @@ -1397,6 +1397,11 @@ static void tlmi_release_attr(void) if (tlmi_priv.can_debug_cmd && debug_support) sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &debug_cmd.attr); =20 + list_for_each_entry_safe(pos, n, &tlmi_priv.attribute_kset->list, entry) { + kobject_del(pos); + kobject_put(pos); + } + kset_unregister(tlmi_priv.attribute_kset); =20 /* Free up any saved signatures */ @@ -1405,17 +1410,17 @@ static void tlmi_release_attr(void) =20 /* Authentication structures */ sysfs_remove_group(&tlmi_priv.pwd_admin->kobj, &auth_attr_group); - kobject_put(&tlmi_priv.pwd_admin->kobj); sysfs_remove_group(&tlmi_priv.pwd_power->kobj, &auth_attr_group); - kobject_put(&tlmi_priv.pwd_power->kobj); =20 if (tlmi_priv.opcode_support) { sysfs_remove_group(&tlmi_priv.pwd_system->kobj, &auth_attr_group); - kobject_put(&tlmi_priv.pwd_system->kobj); sysfs_remove_group(&tlmi_priv.pwd_hdd->kobj, &auth_attr_group); - kobject_put(&tlmi_priv.pwd_hdd->kobj); sysfs_remove_group(&tlmi_priv.pwd_nvme->kobj, &auth_attr_group); - kobject_put(&tlmi_priv.pwd_nvme->kobj); + } + + list_for_each_entry_safe(pos, n, &tlmi_priv.authentication_kset->list, en= try) { + kobject_del(pos); + kobject_put(pos); } =20 kset_unregister(tlmi_priv.authentication_kset); @@ -1481,8 +1486,8 @@ static int tlmi_sysfs_init(void) =20 /* Build attribute */ tlmi_priv.setting[i]->kobj.kset =3D tlmi_priv.attribute_kset; - ret =3D kobject_add(&tlmi_priv.setting[i]->kobj, NULL, - "%s", tlmi_priv.setting[i]->display_name); + ret =3D kobject_init_and_add(&tlmi_priv.setting[i]->kobj, &tlmi_attr_set= ting_ktype, + NULL, "%s", tlmi_priv.setting[i]->display_name); if (ret) goto fail_create_attr; =20 @@ -1507,7 +1512,8 @@ static int tlmi_sysfs_init(void) =20 /* Create authentication entries */ tlmi_priv.pwd_admin->kobj.kset =3D tlmi_priv.authentication_kset; - ret =3D kobject_add(&tlmi_priv.pwd_admin->kobj, NULL, "%s", "Admin"); + ret =3D kobject_init_and_add(&tlmi_priv.pwd_admin->kobj, &tlmi_pwd_settin= g_ktype, + NULL, "%s", "Admin"); if (ret) goto fail_create_attr; =20 @@ -1516,7 +1522,8 @@ static int tlmi_sysfs_init(void) goto fail_create_attr; =20 tlmi_priv.pwd_power->kobj.kset =3D tlmi_priv.authentication_kset; - ret =3D kobject_add(&tlmi_priv.pwd_power->kobj, NULL, "%s", "Power-on"); + ret =3D kobject_init_and_add(&tlmi_priv.pwd_power->kobj, &tlmi_pwd_settin= g_ktype, + NULL, "%s", "Power-on"); if (ret) goto fail_create_attr; =20 @@ -1526,7 +1533,8 @@ static int tlmi_sysfs_init(void) =20 if (tlmi_priv.opcode_support) { tlmi_priv.pwd_system->kobj.kset =3D tlmi_priv.authentication_kset; - ret =3D kobject_add(&tlmi_priv.pwd_system->kobj, NULL, "%s", "System"); + ret =3D kobject_init_and_add(&tlmi_priv.pwd_system->kobj, &tlmi_pwd_sett= ing_ktype, + NULL, "%s", "System"); if (ret) goto fail_create_attr; =20 @@ -1535,7 +1543,8 @@ static int tlmi_sysfs_init(void) goto fail_create_attr; =20 tlmi_priv.pwd_hdd->kobj.kset =3D tlmi_priv.authentication_kset; - ret =3D kobject_add(&tlmi_priv.pwd_hdd->kobj, NULL, "%s", "HDD"); + ret =3D kobject_init_and_add(&tlmi_priv.pwd_hdd->kobj, &tlmi_pwd_setting= _ktype, + NULL, "%s", "HDD"); if (ret) goto fail_create_attr; =20 @@ -1544,7 +1553,8 @@ static int tlmi_sysfs_init(void) goto fail_create_attr; =20 tlmi_priv.pwd_nvme->kobj.kset =3D tlmi_priv.authentication_kset; - ret =3D kobject_add(&tlmi_priv.pwd_nvme->kobj, NULL, "%s", "NVMe"); + ret =3D kobject_init_and_add(&tlmi_priv.pwd_nvme->kobj, &tlmi_pwd_settin= g_ktype, + NULL, "%s", "NVMe"); if (ret) goto fail_create_attr; =20 @@ -1581,8 +1591,6 @@ static struct tlmi_pwd_setting *tlmi_create_auth(cons= t char *pwd_type, new_pwd->maxlen =3D tlmi_priv.pwdcfg.core.max_length; new_pwd->index =3D 0; =20 - kobject_init(&new_pwd->kobj, &tlmi_pwd_setting_ktype); - return new_pwd; } =20 @@ -1687,7 +1695,6 @@ static int tlmi_analyze(struct wmi_device *wdev) if (setting->possible_values) strreplace(setting->possible_values, ',', ';'); =20 - kobject_init(&setting->kobj, &tlmi_attr_setting_ktype); tlmi_priv.setting[i] =3D setting; kfree(item); } --=20 2.50.0 From nobody Wed Oct 8 12:49:04 2025 Received: from mail-qv1-f50.google.com (mail-qv1-f50.google.com [209.85.219.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8E10220694; Sat, 28 Jun 2025 05:01:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751086886; cv=none; b=YLAdE47qe0zkyEbpDRWNa8pnFloRzdfWiZdpGJuh1hpOgMLU+FuhlcxLddQMkd2aNGqqVd1vNBgTPWnVLWw6e4WZKkNxAyIcebhNwFuc2RSOI0NYLsjSe4J3xVLIyqxIchIW8I0pWvckfhi7Q95EeHr12dHrpXspvdOB1IcgFDM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751086886; c=relaxed/simple; bh=xwIOPQzp0CO3CmXlsDJnb/CIg4qQWC9AW3Q9DCnl/l0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q93bKSYGHJWu0tlAZ98NAWJbRk4rOe90La0u0s20uZhAAfyCjIaw0gksE+GJskQxy75D/ANsC9CcWpoH2VuJ6OxqxaNYCkk+ksMtFH6mboeH5nfNwR4KzWwJ6n4hwrL50WCDXluD+zB8J0/WnH61qVlmyWeyekktCZa1XbKSYjw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NglNz79k; arc=none smtp.client-ip=209.85.219.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NglNz79k" Received: by mail-qv1-f50.google.com with SMTP id 6a1803df08f44-6fabe9446a0so29436886d6.2; Fri, 27 Jun 2025 22:01:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751086883; x=1751691683; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=WUvrkQsWXj+PLipOZYg/AMH/QOdAbiTxRFe5XCl9bn8=; b=NglNz79k1IyvggEzWt7Eyelx2S/p2BbAX6oTXk/v96kIyK3OGoL2Cpjs0No1PupTAR W7piVZQ0pOml+VhSNGJl544PuRs95DFsrZRBR4FIz5mzk48AnTSP4t/n6hgIraet3xoL kSPD0IizNkf7Ioz9eSUDzTM3bMjgHnbWHiosaBqI5ipogOQW3Lgm/Q2rlQ6FNBstmrtq M58SohYq/vEGyPT+ZMkuhnGKtrDR7TNnUBrDOXrqTzsWi5wULLXRHizxM+dUC3R1NIWL pZ3L47SegulhRsB5uCu7RS+w1G9CJYU4A5Gv7jOmrZQzNerozSmB0I/TtgLrw75aANR4 6rTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751086883; x=1751691683; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WUvrkQsWXj+PLipOZYg/AMH/QOdAbiTxRFe5XCl9bn8=; b=YJWmq4HtRF+1wqVyFMUcwRUn6Effi1FiV6NAbFx1hW0SFJo7AwokNPUWd8mdmxrcaC qrd/B01+6WdC9PdELqv15unri+aC3oze96pmcv79QkT/m8FuDGaozUOW0TZH1vFCLMGB lIcUFC1jDA8w0loNULNaaqCe6ftXH5WNsUMfqI/3u5qybNDSlnKEEYMMBOLOlZy6X90R XYg1TEYp8jA1YM9udb5HP2mQ1yqkjsu82MrliVkeUfkCE/Q51X5BLprCrfgJBcB+hg5r ZQQy7kVJg6m6obOaAlMhANqy37+U5zxNfo6ZpfDYrHHjFLKoKjzBmEnFRrFWYouw1uYO UfWw== X-Forwarded-Encrypted: i=1; AJvYcCWbm2Gb1Fsz9gZGa1/YbdZBFWWYER7PxNrAb9HHqdSw0fevwDotis46FfqL9vLIwexv/5dsOd43GGk44k4=@vger.kernel.org X-Gm-Message-State: AOJu0YzauGUy5CYN0bngHcnUNBWQcDMjdvUBeWDoH50oKyywWMfPCAUv +I+HQ7iBW6obqoySfReiW+pJJe/0FdN5MWSFg9Rr/f/rF8Wbz/TmurB5es/cUbEy X-Gm-Gg: ASbGnctEUxr6T18qsJrIsN0YUiakS/V56Qtc0rVZ0mdii8x+MDAuP5ll+rfTxtJVNLU hE0jyjtmi/gzDQgdcKWlSEgQy5Dt52f2btjeLywxERVbrVnMRUnOGQabdxxx/U3kFwdt38wDDPl daFZcNPVAJ4iP654/xIJsQzLiwPAxJZjClM1ehBLj776jmxqsCFOvHVDVj4n3CVm/5wEmJvozjm mjh70cB7NMgKjfxzXPSnyzMrusB9uZ0tTqVYbWyunk59CUWT007TDQX7bF5AKsFTR3l4jyKr5bJ yU4fFJMyzz0xTLImUdrzsEXSZbZFHPewcQO6iao8z8wm0ZLKqS03CjAhwr2NTQ== X-Google-Smtp-Source: AGHT+IHlfgEq66Ajo2smNviFqc07tlhE097H/PMai94CvRwZW0HOuBMjBw4QWm/IonglatgCc1GibA== X-Received: by 2002:a05:6214:260b:b0:6f5:4214:774a with SMTP id 6a1803df08f44-70003c91593mr79847216d6.41.1751086883359; Fri, 27 Jun 2025 22:01:23 -0700 (PDT) Received: from [192.168.1.26] ([181.88.247.122]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6fd772e34besm31504966d6.75.2025.06.27.22.01.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Jun 2025 22:01:23 -0700 (PDT) From: Kurt Borja Date: Sat, 28 Jun 2025 02:00:48 -0300 Subject: [PATCH 3/3] platform/x86: think-lmi: Fix sysfs group cleanup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250628-lmi-fix-v1-3-c6eec9aa3ca7@gmail.com> References: <20250628-lmi-fix-v1-0-c6eec9aa3ca7@gmail.com> In-Reply-To: <20250628-lmi-fix-v1-0-c6eec9aa3ca7@gmail.com> To: Mark Pearson , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Kurt Borja X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5169; i=kuurtb@gmail.com; h=from:subject:message-id; bh=xwIOPQzp0CO3CmXlsDJnb/CIg4qQWC9AW3Q9DCnl/l0=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDBnx5VI/LugtfSC8aWt1+OElT57FtMnGXvuSG/Ex6eP2p 1bzd7KldpSyMIhxMciKKbK0Jyz69igq763fgdD7MHNYmUCGMHBxCsBE1sxkZGiwcluSOW2iu+uT 7Y6ZWk98+g3PHbz5NMTm0BOjDxNyBVkYGTbzWsTsOCg7Pd3MaXbC3f8tbeHS5TPWGEX6lOvwbLo Tww8A X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Many error paths in tlmi_sysfs_init() lead to sysfs groups being removed when they were not even created. Fix this by letting the kobject core manage these groups through their kobj_type's defult_groups. Fixes: a40cd7ef22fb ("platform/x86: think-lmi: Add WMI interface support on= Lenovo platforms") Signed-off-by: Kurt Borja Reviewed-by: Mark Pearson --- drivers/platform/x86/lenovo/think-lmi.c | 43 +++--------------------------= ---- 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/drivers/platform/x86/lenovo/think-lmi.c b/drivers/platform/x86= /lenovo/think-lmi.c index da3568727d79832f4669d7217e2fdf691acf1cf5..a38262295abad9f97f67208dc9e= 3f4f4c6b27b32 100644 --- a/drivers/platform/x86/lenovo/think-lmi.c +++ b/drivers/platform/x86/lenovo/think-lmi.c @@ -975,6 +975,7 @@ static const struct attribute_group auth_attr_group =3D= { .is_visible =3D auth_attr_is_visible, .attrs =3D auth_attrs, }; +__ATTRIBUTE_GROUPS(auth_attr); =20 /* ---- Attributes sysfs -------------------------------------------------= -------- */ static ssize_t display_name_show(struct kobject *kobj, struct kobj_attribu= te *attr, @@ -1190,6 +1191,7 @@ static const struct attribute_group tlmi_attr_group = =3D { .is_visible =3D attr_is_visible, .attrs =3D tlmi_attrs, }; +__ATTRIBUTE_GROUPS(tlmi_attr); =20 static void tlmi_attr_setting_release(struct kobject *kobj) { @@ -1209,11 +1211,13 @@ static void tlmi_pwd_setting_release(struct kobject= *kobj) static const struct kobj_type tlmi_attr_setting_ktype =3D { .release =3D &tlmi_attr_setting_release, .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D tlmi_attr_groups, }; =20 static const struct kobj_type tlmi_pwd_setting_ktype =3D { .release =3D &tlmi_pwd_setting_release, .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D auth_attr_groups, }; =20 static ssize_t pending_reboot_show(struct kobject *kobj, struct kobj_attri= bute *attr, @@ -1383,14 +1387,8 @@ static struct kobj_attribute debug_cmd =3D __ATTR_WO= (debug_cmd); static void tlmi_release_attr(void) { struct kobject *pos, *n; - int i; =20 /* Attribute structures */ - for (i =3D 0; i < TLMI_SETTINGS_COUNT; i++) { - if (tlmi_priv.setting[i]) { - sysfs_remove_group(&tlmi_priv.setting[i]->kobj, &tlmi_attr_group); - } - } sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &pending_reboot.attr); sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &save_settings.attr); =20 @@ -1409,15 +1407,6 @@ static void tlmi_release_attr(void) kfree(tlmi_priv.pwd_admin->save_signature); =20 /* Authentication structures */ - sysfs_remove_group(&tlmi_priv.pwd_admin->kobj, &auth_attr_group); - sysfs_remove_group(&tlmi_priv.pwd_power->kobj, &auth_attr_group); - - if (tlmi_priv.opcode_support) { - sysfs_remove_group(&tlmi_priv.pwd_system->kobj, &auth_attr_group); - sysfs_remove_group(&tlmi_priv.pwd_hdd->kobj, &auth_attr_group); - sysfs_remove_group(&tlmi_priv.pwd_nvme->kobj, &auth_attr_group); - } - list_for_each_entry_safe(pos, n, &tlmi_priv.authentication_kset->list, en= try) { kobject_del(pos); kobject_put(pos); @@ -1490,10 +1479,6 @@ static int tlmi_sysfs_init(void) NULL, "%s", tlmi_priv.setting[i]->display_name); if (ret) goto fail_create_attr; - - ret =3D sysfs_create_group(&tlmi_priv.setting[i]->kobj, &tlmi_attr_group= ); - if (ret) - goto fail_create_attr; } =20 ret =3D sysfs_create_file(&tlmi_priv.attribute_kset->kobj, &pending_reboo= t.attr); @@ -1517,20 +1502,12 @@ static int tlmi_sysfs_init(void) if (ret) goto fail_create_attr; =20 - ret =3D sysfs_create_group(&tlmi_priv.pwd_admin->kobj, &auth_attr_group); - if (ret) - goto fail_create_attr; - tlmi_priv.pwd_power->kobj.kset =3D tlmi_priv.authentication_kset; ret =3D kobject_init_and_add(&tlmi_priv.pwd_power->kobj, &tlmi_pwd_settin= g_ktype, NULL, "%s", "Power-on"); if (ret) goto fail_create_attr; =20 - ret =3D sysfs_create_group(&tlmi_priv.pwd_power->kobj, &auth_attr_group); - if (ret) - goto fail_create_attr; - if (tlmi_priv.opcode_support) { tlmi_priv.pwd_system->kobj.kset =3D tlmi_priv.authentication_kset; ret =3D kobject_init_and_add(&tlmi_priv.pwd_system->kobj, &tlmi_pwd_sett= ing_ktype, @@ -1538,29 +1515,17 @@ static int tlmi_sysfs_init(void) if (ret) goto fail_create_attr; =20 - ret =3D sysfs_create_group(&tlmi_priv.pwd_system->kobj, &auth_attr_group= ); - if (ret) - goto fail_create_attr; - tlmi_priv.pwd_hdd->kobj.kset =3D tlmi_priv.authentication_kset; ret =3D kobject_init_and_add(&tlmi_priv.pwd_hdd->kobj, &tlmi_pwd_setting= _ktype, NULL, "%s", "HDD"); if (ret) goto fail_create_attr; =20 - ret =3D sysfs_create_group(&tlmi_priv.pwd_hdd->kobj, &auth_attr_group); - if (ret) - goto fail_create_attr; - tlmi_priv.pwd_nvme->kobj.kset =3D tlmi_priv.authentication_kset; ret =3D kobject_init_and_add(&tlmi_priv.pwd_nvme->kobj, &tlmi_pwd_settin= g_ktype, NULL, "%s", "NVMe"); if (ret) goto fail_create_attr; - - ret =3D sysfs_create_group(&tlmi_priv.pwd_nvme->kobj, &auth_attr_group); - if (ret) - goto fail_create_attr; } =20 return ret; --=20 2.50.0