From nobody Sun Jun 21 06:30:04 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4444430FC1F; Mon, 6 Apr 2026 21:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510238; cv=none; b=EpRHRRSLIw9HyLW8MLU5kQlpPGbeZxEjKIx45YkDgUVuyIEi2DMe62BYZ2E6VrXm6A2/aACqeWI5NyFK4PyzSTrcXAHed61StvYINcMnjwSFCElgUTLl0oOJRaQd3R9Pn0smz5g9HXq4wxokfCNpytLkRNspH8NhMacYFLpioFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510238; c=relaxed/simple; bh=MxMv+Ci8TL3hNvNGArODu52ptFJu6mGX8Ex66cJ70Bc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=G0C32+xQu/DVot0RRK7r+UAXt60jOqwtPJYlEBoF+f2HRGy5Oc++iyZ4CcJL66EKFYcGD4umBXwv/fzqL26QtD/vs61Kf9KdtXwO2caYzPNAFBGvG92zSGz9Ff7P/5ND/H88b/cOwBPGeIVh50B1LkdvlyxqZn58wVBoqO8IbHE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=B97jLEhQ; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="B97jLEhQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1775510234; x=1776115034; i=w_armin@gmx.de; bh=CBH3e+4VfJy2uBGyhXCt5dNYaJXizOez5K79ahupPkQ=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=B97jLEhQdePpjAHKs2rTwtlqCWC2cWYk9mXNk+JQM+xyxrB1SUmYPHjTfd2spIZ4 LV68JCKl6uPJw7DebTFDjqL60CGPgLxebwLB3QpVYIZ5GDL+kSJ1aYGs7RADdvFPU HEyrGvvSn7GYp0yYuFSpfov2tSa2C1nk1g1wiwQoG5IvWThIaTJfIPRb9sJIIsP7v oeCN16QNBZ2oK8Aze4sceXr9XvTzy0LTOiYI1/R7W8tH/moOTQBGQiv5N44uMN8Ls m6AJxC2SidlR3UmNTOtJO45V2xL4oh5BBMDrYEv+TXtXpXkH0QgOz3jdzofHJ3eb2 LDUEoM3ChVWyfzFvjg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mlw3X-1vkO4X1T51-00qcKv; Mon, 06 Apr 2026 23:17:14 +0200 From: Armin Wolf To: hansg@kernel.org Cc: ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/6] platform/wmi: Add wmidev_invoke_procedure() Date: Mon, 6 Apr 2026 22:32:32 +0200 Message-Id: <20260406203237.2970-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260406203237.2970-1-W_Armin@gmx.de> References: <20260406203237.2970-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:7KNe+H/gVXJF5V/t6uf6aDHYabaCxm/WpWQJmieeCNtJ+x7/DXP /GgZFHYr/4dVyf5Xp3JbQnNut/Zcc1chjxuopKNDnXZeILH4wlje9nSLbkmyvH00x5nwnNE bbPVDTNnMp7+ZlaFySOwfaCruka66N9ZBWVMQ3Nw8u6ohW4IQrdpkR8r24ireJNU9QBrQTJ 8Jf9rO8JdBl13vsx0xWWw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:81BPEAJ/gZM=;OPfyEnL5l0wXsroD4yp7R6xfRJC 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 Content-Type: text/plain; charset="utf-8" Some WMI methods return no values, so the whole postprocessing of the result data is not needed for them. Add a special function for calling such WMI methods to prepare for future changes of the main wmidev_invoke_method() function. Signed-off-by: Armin Wolf --- .../wmi/driver-development-guide.rst | 3 +- drivers/platform/wmi/core.c | 44 +++++++++++++++++++ include/linux/wmi.h | 3 ++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Documentation/wmi/driver-development-guide.rst b/Documentation= /wmi/driver-development-guide.rst index fbc2d9b12fe9..5b94402874c4 100644 --- a/Documentation/wmi/driver-development-guide.rst +++ b/Documentation/wmi/driver-development-guide.rst @@ -106,7 +106,8 @@ WMI method drivers =20 WMI drivers can call WMI device methods using wmidev_invoke_method(). For = each WMI method invocation the WMI driver needs to provide the instance number and the met= hod ID, as well as -a buffer with the method arguments and optionally a buffer for the results. +a buffer with the method arguments and optionally a buffer for the results= . When calling WMI +methods that do not return any values, wmidev_invoke_procedure() should be= used instead. =20 The layout of said buffers is device-specific and described by the Binary = MOF data associated with a given WMI device. Said Binary MOF data also describes the method ID= of a given WMI method diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c index b8e6b9a421c6..7cc5ca11a60d 100644 --- a/drivers/platform/wmi/core.c +++ b/drivers/platform/wmi/core.c @@ -427,6 +427,50 @@ int wmidev_invoke_method(struct wmi_device *wdev, u8 i= nstance, u32 method_id, } EXPORT_SYMBOL_GPL(wmidev_invoke_method); =20 +/** + * wmidev_invoke_procedure - Invoke a WMI method that does not return valu= es + * @wdev: A wmi bus device from a driver + * @instance: Instance index + * @method_id: Method ID to call + * @in: Mandatory WMI buffer containing input for the method call + * + * Invoke a WMI method that does not return any values. Use wmidev_invoke_= method() + * for WMI methods that do return values. + * + * Return: 0 on success or negative error code on failure. + */ +int wmidev_invoke_procedure(struct wmi_device *wdev, u8 instance, u32 meth= od_id, + const struct wmi_buffer *in) +{ + struct wmi_block *wblock =3D container_of(wdev, struct wmi_block, dev); + struct acpi_buffer ain; + acpi_status status; + int ret; + + if (wblock->gblock.flags & ACPI_WMI_STRING) { + ret =3D wmi_marshal_string(in, &ain); + if (ret < 0) + return ret; + } else { + if (in->length > U32_MAX) + return -E2BIG; + + ain.length =3D in->length; + ain.pointer =3D in->data; + } + + status =3D wmidev_evaluate_method(wdev, instance, method_id, &ain, NULL); + + if (wblock->gblock.flags & ACPI_WMI_STRING) + kfree(ain.pointer); + + if (ACPI_FAILURE(status)) + return -EIO; + + return 0; +} +EXPORT_SYMBOL_GPL(wmidev_invoke_procedure); + static acpi_status __query_block(struct wmi_block *wblock, u8 instance, struct acpi_buffer *out) { diff --git a/include/linux/wmi.h b/include/linux/wmi.h index 75cb0c7cfe57..b00950dc1231 100644 --- a/include/linux/wmi.h +++ b/include/linux/wmi.h @@ -70,6 +70,9 @@ ssize_t wmi_string_from_utf8s(struct wmi_string *str, siz= e_t max_chars, const u8 int wmidev_invoke_method(struct wmi_device *wdev, u8 instance, u32 method_= id, const struct wmi_buffer *in, struct wmi_buffer *out); =20 +int wmidev_invoke_procedure(struct wmi_device *wdev, u8 instance, u32 meth= od_id, + const struct wmi_buffer *in); + int wmidev_query_block(struct wmi_device *wdev, u8 instance, struct wmi_bu= ffer *out); =20 int wmidev_set_block(struct wmi_device *wdev, u8 instance, const struct wm= i_buffer *in); --=20 2.39.5 From nobody Sun Jun 21 06:30:04 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DDEFF33260D; Mon, 6 Apr 2026 21:17:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510238; cv=none; b=HibeHBFl+zBdFcauAF1zmSoU/+nQS8NVxWk64ekZHOhAFn73ZirLPsjRh3wdkoxucgt14qRUmQtideyro7xuIltVmVobhaetJ2Vry3wLVdGUA6kevq825Y2NAIL0eD8A1sN7107At3otdlW4FdbEjDDQzIqnkwltzYZi0voyqYk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510238; c=relaxed/simple; bh=y6rM9x3OMaweRgBs1wDwRufP1RftALU55yP7etONiIE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=G/NvYJnypnDzaIaMYzuZPgpOf493xvL+TXLBhbloNXM9Kc/sSw66iwvMidl4stFmuGbN8PPYP/pFMdp+OJttTm8zGe9CMa0az60D7YrGSihzJ4z6J6mE906DiYTJ0fh7h9Q9PG+9R+k37N4FiIJTxGvw3EkN9GrmsZCLaDIyZRU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=apYdXbL3; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="apYdXbL3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1775510235; x=1776115035; i=w_armin@gmx.de; bh=pEu7wRNb1QX/EybayJVM32gpFHWladDLYKKtsJu41vU=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=apYdXbL3KToTHhhFUvEJNcjDZSEHgzN+ZlTwOmOZ7CK/gCaO01Ovi7RiucpIR9dP GhIVk5ia5f4dsGqPpgargp2GUFQJXsbsve9mx9QA0DQwzFEoKLjEpidLRVHHSORhM a1/DPKn8VEJO+1q/SRuxq0HvCPQX2yGSilXVKvbC+7wddyQI/DKLjQxRJlvbRsvxQ pikXaxiKwjcVCRVLgOUnqX4HsOC9xnQipuVrU7NvoePrDSbT4PABbK13J194I0XKK sNpOb4r577qrYkSrd83kGdEgoFuHb8TnwCh/qPeqQfAQBPXJ6c76Ywv2rgltqnkbD a1JY+Ldpf/4sfBJwcg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MgvrB-1vXnwE0RXp-00ZZlS; Mon, 06 Apr 2026 23:17:15 +0200 From: Armin Wolf To: hansg@kernel.org Cc: ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/6] platform/wmi: Convert drivers to use wmidev_invoke_procedure() Date: Mon, 6 Apr 2026 22:32:33 +0200 Message-Id: <20260406203237.2970-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260406203237.2970-1-W_Armin@gmx.de> References: <20260406203237.2970-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:27qOhNQm/7EGWVFmS6ssespCOXCoifQ36b08WIH683AItxbhaQm K+KC6K4MSZZofiw4Oc0df/qmfogfmx0lcX4gb4/1kZqGvPHGGmiE4MqD27vRYLuZ5G4Th+M aFyZCXowXvh3TID7hf3/KzeyZa7fFetBbFu/PMEp8IQ+wGyxGU8PMvvASHdH8ck3DUinc4j m3gx6XbgD7ul17gNScYEQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:id4ocQoIEQE=;1HecE34bxtXC91nZoXRBGIqcz4R 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 tdBMrRXv46Z Content-Type: text/plain; charset="utf-8" Convert users of wmidev_invoke_method() to wmidev_invoke_procedure() where applicable to prepare for future changes. Signed-off-by: Armin Wolf --- drivers/platform/x86/bitland-mifs-wmi.c | 17 +++++++++-------- drivers/platform/x86/intel/wmi/thunderbolt.c | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index 54380708b7b0..cd3cdd087511 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -167,23 +167,24 @@ static int bitland_mifs_wmi_call(struct bitland_mifs_= wmi_data *data, struct bitland_mifs_output *output) { struct wmi_buffer in_buf =3D { .length =3D sizeof(*input), .data =3D (voi= d *)input }; + void *out_data __free(kfree) =3D NULL; struct wmi_buffer out_buf =3D { 0 }; int ret; =20 guard(mutex)(&data->lock); =20 - ret =3D wmidev_invoke_method(data->wdev, 0, 1, &in_buf, output ? &out_buf= : NULL); + if (!output) + return wmidev_invoke_procedure(data->wdev, 0, 1, &in_buf); + + ret =3D wmidev_invoke_method(data->wdev, 0, 1, &in_buf, &out_buf); if (ret) return ret; =20 - if (output) { - void *out_data __free(kfree) =3D out_buf.data; - - if (out_buf.length < sizeof(*output)) - return -EIO; + out_data =3D out_buf.data; + if (out_buf.length < sizeof(*output)) + return -EIO; =20 - memcpy(output, out_data, sizeof(*output)); - } + memcpy(output, out_data, sizeof(*output)); =20 return 0; } diff --git a/drivers/platform/x86/intel/wmi/thunderbolt.c b/drivers/platfor= m/x86/intel/wmi/thunderbolt.c index 47017f2d7597..9b1920d61674 100644 --- a/drivers/platform/x86/intel/wmi/thunderbolt.c +++ b/drivers/platform/x86/intel/wmi/thunderbolt.c @@ -34,7 +34,7 @@ static ssize_t force_power_store(struct device *dev, if (mode > 1) return -EINVAL; =20 - ret =3D wmidev_invoke_method(to_wmi_device(dev), 0, 1, &buffer, NULL); + ret =3D wmidev_invoke_procedure(to_wmi_device(dev), 0, 1, &buffer); if (ret < 0) return ret; =20 --=20 2.39.5 From nobody Sun Jun 21 06:30:04 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A82AE30FC1F; Mon, 6 Apr 2026 21:17:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510249; cv=none; b=OxcOZDiJBum0wSlY4MmOrc3074TVJFRNhcBwhWhw1PYHcccl8zC8tRv8vOAumbLI2QdpcZhJGg84dlo9P5EDf2vsuJknW6xdSbKoNBTjMmvBytvCPhuCsOO1AFCQbdPrvJvryqEMnvn0VcYXe86wkyr+eAwKQxvHccwzuAA759I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510249; c=relaxed/simple; bh=hEWJhuMsVFbg+UgdKh1O7JI/2FEJFPY2u+6cZWEmEuo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=neDM6CBPoObcukqb7RMits8sTLOZ96OQhN3/oyBeri4i00PPM79tQL8QNgfPJ5rfmN3ttemx4AD2Jd3LeC/uxr/UYvJUU0cRMlftToMgOtuWtNNmSHdBJhUxkI7MW7QwX3ah+wDs+TVd89N+/kZosTs2/+B5Nm/DFb35zBbAlUQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=bPQ2kQ/Z; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="bPQ2kQ/Z" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1775510236; x=1776115036; i=w_armin@gmx.de; bh=Do44YT9yJWMjxYLdrsyR3mHLGEEVoaTSmw2TV1tzGpU=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=bPQ2kQ/Z0EdpZypHDAUlQnvAZzaYkPTL1ykhHcoOQsejatFToeaKg/hpy7tkD7lr pxxN3cVpZNrH8mKV7QLtBAlFCAzFiMLynbb+NoLhqJVqm9Iod64j1j2qiubFQ3NAZ cMBsPFF3gZ1d5PigBeAEmgLg9vPp/44sQSvF4rTOuvhugT7HNEbJFyA9E7N7fG6dk bETd0lWC02jvcBJejGprIksaAbeSnm0pqR5ffaviA5NI+u/Gp0JB57l3kvJAruxsc pjT6jj2WXBf++5tlTP3hpJ7OgkyVt+unkFjDk0VpKbZ+X0YFulIHydu5OSeS+zXhR m9X2TkguYt9KUT6/fg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MnakX-1vikBC3Xwj-00oxZf; Mon, 06 Apr 2026 23:17:15 +0200 From: Armin Wolf To: hansg@kernel.org Cc: ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/6] platform/wmi: Prepare to reject undersized unmarshalling results Date: Mon, 6 Apr 2026 22:32:34 +0200 Message-Id: <20260406203237.2970-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260406203237.2970-1-W_Armin@gmx.de> References: <20260406203237.2970-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:nikvwRgrjilbEfAECxKFLR7PkdEhgobrqLNjTbV0ISoO5anNwhG /mIgvvn4KD0gVqXA5pStgGgJlk/6oQ1lHn+l3Ov+K25vUgYCVCIQKeITn8ioASJz89IdIiY kz02UJ7ZyjVHfY56PXgROD54M7ax9PQqjoAGNUGW+vR8a+yOWnR7VFdsALBKmDlI6N6g4As gHwGaotTLwR2M2kLXrk0A== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:XD3iq0pF0FI=;A8dwXAg4dDcY0+bdQJ6iSF77ojL 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 xLd4pyTLbfv0fNmdFG0EOqvsszVa5k/yg== Content-Type: text/plain; charset="utf-8" Driver using the buffer-based WMI API usually reject buffers resulting from WMI method calls or block queries if they contain not enough data. Prepare the WMI core for assisting in this by automatically rejecting undersized unmarshalling results. Signed-off-by: Armin Wolf --- drivers/platform/wmi/core.c | 6 ++--- drivers/platform/wmi/internal.h | 3 ++- drivers/platform/wmi/marshalling.c | 6 ++++- .../platform/wmi/tests/marshalling_kunit.c | 24 +++++++++++++++++-- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c index 7cc5ca11a60d..66ec885bffd7 100644 --- a/drivers/platform/wmi/core.c +++ b/drivers/platform/wmi/core.c @@ -420,7 +420,7 @@ int wmidev_invoke_method(struct wmi_device *wdev, u8 in= stance, u32 method_id, return 0; } =20 - ret =3D wmi_unmarshal_acpi_object(obj, out); + ret =3D wmi_unmarshal_acpi_object(obj, out, 0); kfree(obj); =20 return ret; @@ -583,7 +583,7 @@ int wmidev_query_block(struct wmi_device *wdev, u8 inst= ance, struct wmi_buffer * if (!obj) return -EIO; =20 - ret =3D wmi_unmarshal_acpi_object(obj, out); + ret =3D wmi_unmarshal_acpi_object(obj, out, 0); kfree(obj); =20 return ret; @@ -1416,7 +1416,7 @@ static void wmi_notify_driver(struct wmi_block *wbloc= k, union acpi_object *obj) return; } =20 - ret =3D wmi_unmarshal_acpi_object(obj, &buffer); + ret =3D wmi_unmarshal_acpi_object(obj, &buffer, 0); if (ret < 0) { dev_warn(&wblock->dev.dev, "Failed to unmarshal event data: %d\n", ret); return; diff --git a/drivers/platform/wmi/internal.h b/drivers/platform/wmi/interna= l.h index 9a39ffa31ad1..c02908694563 100644 --- a/drivers/platform/wmi/internal.h +++ b/drivers/platform/wmi/internal.h @@ -11,7 +11,8 @@ union acpi_object; struct wmi_buffer; =20 -int wmi_unmarshal_acpi_object(const union acpi_object *obj, struct wmi_buf= fer *buffer); +int wmi_unmarshal_acpi_object(const union acpi_object *obj, struct wmi_buf= fer *buffer, + size_t min_size); int wmi_marshal_string(const struct wmi_buffer *buffer, struct acpi_buffer= *out); =20 #endif /* _WMI_INTERNAL_H_ */ diff --git a/drivers/platform/wmi/marshalling.c b/drivers/platform/wmi/mars= halling.c index 63a92c4ebab5..87091832568e 100644 --- a/drivers/platform/wmi/marshalling.c +++ b/drivers/platform/wmi/marshalling.c @@ -151,7 +151,8 @@ static int wmi_obj_transform(const union acpi_object *o= bj, u8 *buffer) return 0; } =20 -int wmi_unmarshal_acpi_object(const union acpi_object *obj, struct wmi_buf= fer *buffer) +int wmi_unmarshal_acpi_object(const union acpi_object *obj, struct wmi_buf= fer *buffer, + size_t min_size) { size_t length, alloc_length; u8 *data; @@ -161,6 +162,9 @@ int wmi_unmarshal_acpi_object(const union acpi_object *= obj, struct wmi_buffer *b if (ret < 0) return ret; =20 + if (length < min_size) + return -ENODATA; + if (ARCH_KMALLOC_MINALIGN < 8) { /* * kmalloc() guarantees that the alignment of the resulting memory alloc= ation is at diff --git a/drivers/platform/wmi/tests/marshalling_kunit.c b/drivers/platf= orm/wmi/tests/marshalling_kunit.c index 0c7cd8774aa3..471963076d58 100644 --- a/drivers/platform/wmi/tests/marshalling_kunit.c +++ b/drivers/platform/wmi/tests/marshalling_kunit.c @@ -372,7 +372,7 @@ static void wmi_unmarshal_acpi_object_test(struct kunit= *test) struct wmi_buffer result; int ret; =20 - ret =3D wmi_unmarshal_acpi_object(¶m->obj, &result); + ret =3D wmi_unmarshal_acpi_object(¶m->obj, &result, param->buffer.len= gth); if (ret < 0) KUNIT_FAIL_AND_ABORT(test, "Unmarshalling of ACPI object failed\n"); =20 @@ -389,7 +389,7 @@ static void wmi_unmarshal_acpi_object_failure_test(stru= ct kunit *test) struct wmi_buffer result; int ret; =20 - ret =3D wmi_unmarshal_acpi_object(¶m->obj, &result); + ret =3D wmi_unmarshal_acpi_object(¶m->obj, &result, 0); if (ret < 0) return; =20 @@ -427,6 +427,25 @@ static void wmi_marshal_string_failure_test(struct kun= it *test) KUNIT_FAIL(test, "Invalid string was not rejected\n"); } =20 +static void wmi_unmarshal_acpi_object_undersized_test(struct kunit *test) +{ + const union acpi_object obj =3D { + .integer =3D { + .type =3D ACPI_TYPE_INTEGER, + .value =3D 0xdeadbeef, + }, + }; + struct wmi_buffer result; + int ret; + + ret =3D wmi_unmarshal_acpi_object(&obj, &result, sizeof(expected_single_i= nteger) + 1); + if (ret < 0) + return; + + kfree(result.data); + KUNIT_FAIL(test, "Undersized unmarshalling result was not rejected\n"); +} + static struct kunit_case wmi_marshalling_test_cases[] =3D { KUNIT_CASE_PARAM(wmi_unmarshal_acpi_object_test, wmi_unmarshal_acpi_object_gen_params), @@ -436,6 +455,7 @@ static struct kunit_case wmi_marshalling_test_cases[] = =3D { wmi_unmarshal_acpi_object_failure_gen_params), KUNIT_CASE_PARAM(wmi_marshal_string_failure_test, wmi_marshal_string_failure_gen_params), + KUNIT_CASE(wmi_unmarshal_acpi_object_undersized_test), {} }; =20 --=20 2.39.5 From nobody Sun Jun 21 06:30:04 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 89F2F34DB4F; Mon, 6 Apr 2026 21:17:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510240; cv=none; b=TS+2B73ejGbcOlVyj71VGoLtRJo7gqciaSxEUwXtM+bdqGdRz3KEl7/mZ/zh70eimovDSk5r9GAFrY1ZS8dfwJqUxv6fdRNBKviA2ixfD2o+xnYmOvn7Jp8e22L/ZIbGZnm0ZiTDB8kF4SgTGx0AKDIwc+q3sqc9PzFFVmNe63w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510240; c=relaxed/simple; bh=qPmZtYwjduEtcMroMfYFNM3+lJC3c4kldY6jgXdnqPI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OSBHrdIPSX03n5b+315/I3NEG0A1LhY1j1K91uvEeLFnvp/T9h4xQcIKzKU9twY5ZaLFNNnSrrzi1byzGmu0dM4v3eAfL9xM4dsc5vaEAYXHquU6seU0SY17jd1cQbX3mgNZUI3xSCSRa0wzyHS77UkmOZOuRAY1++BnMuqa6kk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=n3P3sUuq; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="n3P3sUuq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1775510236; x=1776115036; i=w_armin@gmx.de; bh=cstJW3CMWIQc+GI8rhP4xPemPoJF7f7FN4mvNw3zLVo=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=n3P3sUuq30NwU/umZxnnGKarmPwo8XiMBpS8z2mpsXl8N3Mx961gsiK3fjNYhYjd MxyAG2jZ73kTDD1cZDN/tePEk7OlkBFhG+0TXEIuAP/+SNMlID1eTVuh57eZUvkc/ J7EpN4V2IEGluwZQhOpgLNgUcQKI8DQ2HGS+ztNxJJF594trGZ+rvtGnnqbG9w83K bZZUyqVa8a116WAHWOgoExetk6DghVvHsHe50sNEhJH+HiABhbRM0RoIgG90nPNzb mhs27znPf31roKfVf3u10zDtRNxqS7J3b4SFpOugL+OmCBfp0dxU0Zi3YIyA/ICCW 5E94YJSA3ubAIRj+6w== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N79yG-1vOlNY2OqK-00zbIo; Mon, 06 Apr 2026 23:17:16 +0200 From: Armin Wolf To: hansg@kernel.org Cc: ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/6] platform/wmi: Extend wmidev_invoke_method() to reject undersized data Date: Mon, 6 Apr 2026 22:32:35 +0200 Message-Id: <20260406203237.2970-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260406203237.2970-1-W_Armin@gmx.de> References: <20260406203237.2970-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:ly5zvO0/HLOuItso2Egkk7c/tgOYloU7hplBHBLVs23KCl67eyM sFmd0jplYWVcghkZ/0RtVX5ZWroKC9Yu0Ww7qWUKM4vKEx/UZqVGe/h2QNDyNJUMmSbchFr S/XtaoR4kAY8065nSv0wZQFbnhTvTa4pMcTXqQAdF7+3zg43MT9vvscTs8R5QfgJSchiDDw PRmVjM25dfEyxvVbqwtXw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:0T3hRuXqPF0=;BigCduxc55c8ewa3z6dF0TvXS58 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 Content-Type: text/plain; charset="utf-8" WMI drivers using the buffer-based WMI API are expected to reject undersized method return values. Extend wmidev_invoke_method() to enable the WMI driver core to perform this size check internally. Signed-off-by: Armin Wolf --- drivers/platform/wmi/core.c | 23 ++++++++++------------- drivers/platform/x86/bitland-mifs-wmi.c | 11 +++-------- include/linux/wmi.h | 2 +- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c index 66ec885bffd7..a1a612f33233 100644 --- a/drivers/platform/wmi/core.c +++ b/drivers/platform/wmi/core.c @@ -364,20 +364,23 @@ acpi_status wmidev_evaluate_method(struct wmi_device = *wdev, u8 instance, u32 met EXPORT_SYMBOL_GPL(wmidev_evaluate_method); =20 /** - * wmidev_invoke_method - Invoke a WMI method + * wmidev_invoke_method - Invoke a WMI method that returns values * @wdev: A wmi bus device from a driver * @instance: Instance index * @method_id: Method ID to call * @in: Mandatory WMI buffer containing input for the method call - * @out: Optional WMI buffer to return the method results + * @out: Mandatory WMI buffer to return the method results + * @min_size: Minimum size of the method result data in bytes * - * Invoke a WMI method, the caller must free the resulting data inside @ou= t. - * Said data is guaranteed to be aligned on a 8-byte boundary. + * Invoke a WMI method that returns values, the caller must free the resul= ting + * data inside @out using kfree(). Said data is guaranteed to be aligned o= n a + * 8-byte boundary. Use wmidev_invoke_procedure() for WMI methods that + * return no values. * * Return: 0 on success or negative error code on failure. */ int wmidev_invoke_method(struct wmi_device *wdev, u8 instance, u32 method_= id, - const struct wmi_buffer *in, struct wmi_buffer *out) + const struct wmi_buffer *in, struct wmi_buffer *out, size_t min_size) { struct wmi_block *wblock =3D container_of(wdev, struct wmi_block, dev); struct acpi_buffer aout =3D { ACPI_ALLOCATE_BUFFER, NULL }; @@ -398,10 +401,7 @@ int wmidev_invoke_method(struct wmi_device *wdev, u8 i= nstance, u32 method_id, ain.pointer =3D in->data; } =20 - if (out) - status =3D wmidev_evaluate_method(wdev, instance, method_id, &ain, &aout= ); - else - status =3D wmidev_evaluate_method(wdev, instance, method_id, &ain, NULL); + status =3D wmidev_evaluate_method(wdev, instance, method_id, &ain, &aout); =20 if (wblock->gblock.flags & ACPI_WMI_STRING) kfree(ain.pointer); @@ -409,9 +409,6 @@ int wmidev_invoke_method(struct wmi_device *wdev, u8 in= stance, u32 method_id, if (ACPI_FAILURE(status)) return -EIO; =20 - if (!out) - return 0; - obj =3D aout.pointer; if (!obj) { out->length =3D 0; @@ -420,7 +417,7 @@ int wmidev_invoke_method(struct wmi_device *wdev, u8 in= stance, u32 method_id, return 0; } =20 - ret =3D wmi_unmarshal_acpi_object(obj, out, 0); + ret =3D wmi_unmarshal_acpi_object(obj, out, min_size); kfree(obj); =20 return ret; diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index cd3cdd087511..78639407d67e 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -167,7 +166,6 @@ static int bitland_mifs_wmi_call(struct bitland_mifs_wm= i_data *data, struct bitland_mifs_output *output) { struct wmi_buffer in_buf =3D { .length =3D sizeof(*input), .data =3D (voi= d *)input }; - void *out_data __free(kfree) =3D NULL; struct wmi_buffer out_buf =3D { 0 }; int ret; =20 @@ -176,15 +174,12 @@ static int bitland_mifs_wmi_call(struct bitland_mifs_= wmi_data *data, if (!output) return wmidev_invoke_procedure(data->wdev, 0, 1, &in_buf); =20 - ret =3D wmidev_invoke_method(data->wdev, 0, 1, &in_buf, &out_buf); + ret =3D wmidev_invoke_method(data->wdev, 0, 1, &in_buf, &out_buf, sizeof(= *output)); if (ret) return ret; =20 - out_data =3D out_buf.data; - if (out_buf.length < sizeof(*output)) - return -EIO; - - memcpy(output, out_data, sizeof(*output)); + memcpy(output, out_buf.data, sizeof(*output)); + kfree(out_buf.data); =20 return 0; } diff --git a/include/linux/wmi.h b/include/linux/wmi.h index b00950dc1231..858398beb01a 100644 --- a/include/linux/wmi.h +++ b/include/linux/wmi.h @@ -68,7 +68,7 @@ ssize_t wmi_string_from_utf8s(struct wmi_string *str, siz= e_t max_chars, const u8 size_t src_length); =20 int wmidev_invoke_method(struct wmi_device *wdev, u8 instance, u32 method_= id, - const struct wmi_buffer *in, struct wmi_buffer *out); + const struct wmi_buffer *in, struct wmi_buffer *out, size_t min_size); =20 int wmidev_invoke_procedure(struct wmi_device *wdev, u8 instance, u32 meth= od_id, const struct wmi_buffer *in); --=20 2.39.5 From nobody Sun Jun 21 06:30:04 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98F5A2F690F; Mon, 6 Apr 2026 21:17:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510248; cv=none; b=Tyzj52e/VYdZrn/lk5v3Gc/8HpAq9IvhMipLlqMfTpcK95MAsg8jxFBVaG2cJKDBe5aLQhxyIEQom01llaYecIJtmLER0u3wLVSzPEyNFfpSUSGZpicW5p63f6sp+ObTtxD1ej1zW8F7Si89m1QjvTkUpQ58EO4Z9oujc+oBg6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510248; c=relaxed/simple; bh=vSibzr56ypU6JPFfPyrVsQbTRgM5MSEzvcPOKuH+Skw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=B4esB/e1B3k+Gy+W9DHt74y0UZcdy4IILnQY1pDGzkTKQcXamRxKQ0en3JV0iOArUAhmiF1Flf37e3xrPtodRUdIMCKjU/OD4Kr3boLwh1obGUH4Gxk/u5u/8MN5gSq4Os/au7b6Qn2BA5vUCWRLE8cLnU0rosSeuYwSpDi3icI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=Vbm56+BO; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="Vbm56+BO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1775510237; x=1776115037; i=w_armin@gmx.de; bh=/22BeHwumIqhoS7apAznSrxAm36X8fvAHGPgH+xOkWY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=Vbm56+BOsE2wQmReHLGLoelfyK9UpFCjxBEZUfxMpSMG2RHa91K8EW0Y1jE0tdFi V8h48LOhw3/sBsnU16HRKBb1Os2X2WgAh9TKkihYrp/OQNG7rI+HQw1Q53l517Yn6 pPJQl6yUVB0phEAX+tN+qpqTMPMYQgYd0XD+h5QUhWmmFzyICMLvisH/RAgAEwKRh i6/hOxyDJ0/PXFLloocdmaFSpuuCknCsqdwtraLomuP7QIRdkgQaLFS2iA34lthry nn4jcGDGt8dN5lcCHs9YjeMAkvObaAbcb0nYLCpOXulBMQFaAys5CTHhTnQAWeAFP vzKwIgJfUwzc69WTNA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MYvY8-1vwi9l1f7Y-00SPBj; Mon, 06 Apr 2026 23:17:17 +0200 From: Armin Wolf To: hansg@kernel.org Cc: ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/6] platform/wmi: Extend wmidev_query_block() to reject undersized data Date: Mon, 6 Apr 2026 22:32:36 +0200 Message-Id: <20260406203237.2970-6-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260406203237.2970-1-W_Armin@gmx.de> References: <20260406203237.2970-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:RR9EPgA3LqmH1j437OnVtwBXUQwejuP7eLHbuOVQB/QSobCnKxe s7Q+eDG3gGh/8WKPylja7/sGQ+0XT1KhDLvwQjfHdYwuRhluvQASvWF2fzSkW9eZFWwFrPu qbIn//ZdTTEJKZiNjJRcSRBKzKWFTdj6gQtOPT4ar0iGtxm8N6Q/jWACid233Q2leXB+ixI 2bOBValgCwqFMM3hm9TpA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:N0ZDhJiJtmk=;zFByguUwW+xpoSGpOZhFI9CaU47 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 aU Content-Type: text/plain; charset="utf-8" WMI drivers using the buffer-based WMI API are expected to reject undersized query results. Extend wmidev_query_block() to enable the WMI driver core to perform this size check internally. Signed-off-by: Armin Wolf --- drivers/platform/wmi/core.c | 10 ++++++---- drivers/platform/x86/intel/wmi/sbl-fw-update.c | 7 +------ drivers/platform/x86/wmi-bmof.c | 2 +- include/linux/wmi.h | 3 ++- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c index a1a612f33233..87b0e54dde5a 100644 --- a/drivers/platform/wmi/core.c +++ b/drivers/platform/wmi/core.c @@ -565,13 +565,15 @@ EXPORT_SYMBOL_GPL(wmidev_block_query); * @wdev: A wmi bus device from a driver * @instance: Instance index * @out: WMI buffer to fill + * @min_size: Minimum size of the result data in bytes * - * Query a WMI data block, the caller must free the resulting data inside = @out. - * Said data is guaranteed to be aligned on a 8-byte boundary. + * Query a WMI data block, the caller must free the resulting data inside = @out + * using kfree(). Said data is guaranteed to be aligned on a 8-byte bounda= ry. * * Return: 0 on success or a negative error code on failure. */ -int wmidev_query_block(struct wmi_device *wdev, u8 instance, struct wmi_bu= ffer *out) +int wmidev_query_block(struct wmi_device *wdev, u8 instance, struct wmi_bu= ffer *out, + size_t min_size) { union acpi_object *obj; int ret; @@ -580,7 +582,7 @@ int wmidev_query_block(struct wmi_device *wdev, u8 inst= ance, struct wmi_buffer * if (!obj) return -EIO; =20 - ret =3D wmi_unmarshal_acpi_object(obj, out, 0); + ret =3D wmi_unmarshal_acpi_object(obj, out, min_size); kfree(obj); =20 return ret; diff --git a/drivers/platform/x86/intel/wmi/sbl-fw-update.c b/drivers/platf= orm/x86/intel/wmi/sbl-fw-update.c index 3716ccaaed6a..62c9c7f1842b 100644 --- a/drivers/platform/x86/intel/wmi/sbl-fw-update.c +++ b/drivers/platform/x86/intel/wmi/sbl-fw-update.c @@ -28,15 +28,10 @@ static int get_fwu_request(struct device *dev, u32 *out) __le32 *result; int ret; =20 - ret =3D wmidev_query_block(to_wmi_device(dev), 0, &buffer); + ret =3D wmidev_query_block(to_wmi_device(dev), 0, &buffer, sizeof(*result= )); if (ret < 0) return ret; =20 - if (buffer.length < sizeof(*result)) { - kfree(buffer.data); - return -ENODATA; - } - result =3D buffer.data; *out =3D le32_to_cpu(*result); kfree(result); diff --git a/drivers/platform/x86/wmi-bmof.c b/drivers/platform/x86/wmi-bmo= f.c index e3a126de421b..6623cf60e4b4 100644 --- a/drivers/platform/x86/wmi-bmof.c +++ b/drivers/platform/x86/wmi-bmof.c @@ -62,7 +62,7 @@ static int wmi_bmof_probe(struct wmi_device *wdev, const = void *context) if (!buffer) return -ENOMEM; =20 - ret =3D wmidev_query_block(wdev, 0, buffer); + ret =3D wmidev_query_block(wdev, 0, buffer, 0); if (ret < 0) return ret; =20 diff --git a/include/linux/wmi.h b/include/linux/wmi.h index 858398beb01a..da94580572a9 100644 --- a/include/linux/wmi.h +++ b/include/linux/wmi.h @@ -73,7 +73,8 @@ int wmidev_invoke_method(struct wmi_device *wdev, u8 inst= ance, u32 method_id, int wmidev_invoke_procedure(struct wmi_device *wdev, u8 instance, u32 meth= od_id, const struct wmi_buffer *in); =20 -int wmidev_query_block(struct wmi_device *wdev, u8 instance, struct wmi_bu= ffer *out); +int wmidev_query_block(struct wmi_device *wdev, u8 instance, struct wmi_bu= ffer *out, + size_t min_size); =20 int wmidev_set_block(struct wmi_device *wdev, u8 instance, const struct wm= i_buffer *in); =20 --=20 2.39.5 From nobody Sun Jun 21 06:30:04 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D84A53932F8; Mon, 6 Apr 2026 21:17:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510249; cv=none; b=YeUcb2yLL7a4WVkBovqqo4C+kVy5IGjcJeZ43TGNjXi/gzkQtM6NDdJVbSkOh7g91avoMYCI+RQx7YRStxWmJZZ1p+wxJ0ctM0U572mrA89KF6DwfwG+nkWib1CthHC/ZQczHVTswYgCpc5cgh2UvryxLL8UjIw7J6m9/w8Feks= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775510249; c=relaxed/simple; bh=ttJ8SvSxR/RjC95uSY4S/rNKXqtakwl+yiRcTXk+XYI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=HPQJjLGeuSz4jwwR4SnU/p2a+BWjXrYCdlX17FeGCgYTSwqaQSUhxHUotQ43sQ/sls1hOb3xdBf6FaJYE5KSnOrPEawEd2AxLCAFm7CaOIhLIiN0kTNfytKuuYLRRk5vHf2NItx8hYR3JKC93MEDzlLubY0ZmJhoBao1XoFQYd8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=uLyQMsaT; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="uLyQMsaT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1775510238; x=1776115038; i=w_armin@gmx.de; bh=fv8bPPROsUknmy+9S0UYADRcI9Wfh0gm23V4QcQHP9k=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=uLyQMsaTW9ArpN2xMuX292iWbQIh2V91xkoOCG8ALy/cgAt9cbFXMA+A91c2wEXh n4mu74Udq7aLW3oyukzQfFLvXqqeNFSw2Lnhjv2EJRENWE84BfBJvyABJ5Dr+tTIv Jb7OsNAD2cDuh4Gm4jA6ipXbLs/Cu0+AHNvAXhwYNk6HP3xlKtPPBMqEID5SIp45h CmuCNxy/V33JYe7Xtxj5Wgdl7Zr/zp6o3Gw+aepbBVtRAwcL1IHgtafK1lrtRGIkC iEXh6UTd1qe/Brt55iWibiMnFoScEQD8frXQ8tw5YQxkbGXWKCmI98VA8LPgfgBSm t5DrD4RNgQjXszOZWg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mzyuc-1vEKym0gXm-00rKFM; Mon, 06 Apr 2026 23:17:18 +0200 From: Armin Wolf To: hansg@kernel.org Cc: ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/6] platform/wmi: Replace .no_notify_data with .min_event_size Date: Mon, 6 Apr 2026 22:32:37 +0200 Message-Id: <20260406203237.2970-7-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260406203237.2970-1-W_Armin@gmx.de> References: <20260406203237.2970-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:gHMqHXmGrJYU2CK0sYFpkHuhU4oY83YS2GqkKTUhC8FTGwhlsPz CRdy6WfJw571Wch+vVpXPeSOxotI+/t4LXqaavKTNp77TFkRPS8SOR4FyjJX9Yi0NXQ8yKA LsmYyi+ladNsTdPxrbrqS/9e0y3Gsc/iT2Jv2VNqGy+CRz4Sg4AKYAx8eFPLcMYQaLDoEKv ESYlyqKv7YvLpfnVUBH7w== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:jl/iLwPvAOo=;pxqNLfXnAFmIANSZV7upS36Utpm 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 p8 Content-Type: text/plain; charset="utf-8" WMI drivers using the buffer-based WMI API are expected to reject undersized event payloads. Extend the WMI driver core to allow such drivers to specify their minimum supported event payload size. Also remove the now redundant .no_notify_data field. Signed-off-by: Armin Wolf --- Documentation/wmi/driver-development-guide.rst | 8 +++++--- drivers/platform/wmi/core.c | 12 ++++++++---- drivers/platform/x86/bitland-mifs-wmi.c | 8 ++------ drivers/platform/x86/dell/dell-wmi-base.c | 1 + drivers/platform/x86/lenovo/ideapad-laptop.c | 1 + drivers/platform/x86/lenovo/wmi-camera.c | 1 + drivers/platform/x86/lenovo/wmi-events.c | 1 + drivers/platform/x86/lenovo/ymc.c | 1 + drivers/platform/x86/lenovo/yogabook.c | 2 +- drivers/platform/x86/redmi-wmi.c | 1 + drivers/platform/x86/uniwill/uniwill-wmi.c | 1 + drivers/platform/x86/xiaomi-wmi.c | 1 + include/linux/wmi.h | 7 +++++-- 13 files changed, 29 insertions(+), 16 deletions(-) diff --git a/Documentation/wmi/driver-development-guide.rst b/Documentation= /wmi/driver-development-guide.rst index 5b94402874c4..387f508d57ad 100644 --- a/Documentation/wmi/driver-development-guide.rst +++ b/Documentation/wmi/driver-development-guide.rst @@ -71,7 +71,7 @@ to matching WMI devices using a struct wmi_device_id tabl= e: .remove =3D foo_remove, /* optional, devres is preferred */ .shutdown =3D foo_shutdown, /* optional, called during shutdow= n */ .notify_new =3D foo_notify, /* optional, for event handling */ - .no_notify_data =3D true, /* optional, enables events contai= ning no additional data */ + .min_event_size =3D X, /* optional, simplifies event payl= oad size verification */ .no_singleton =3D true, /* required for new WMI drivers */ }; module_wmi_driver(foo_driver); @@ -142,8 +142,10 @@ right before and after calling its remove() or shutdow= n() callback. However WMI driver developers should be aware that multiple WMI events can= be received concurrently, so any locking (if necessary) needs to be provided by the WMI driver itsel= f. =20 -In order to be able to receive WMI events containing no additional event d= ata, -the ``no_notify_data`` flag inside struct wmi_driver should be set to ``tr= ue``. +The WMI driver can furthermore instruct the WMI driver core to automatical= ly reject WMI events +that contain a undersized event payload by populating the ``min_event_size= `` field inside +struct wmi_driver. Setting this field to 0 will thus enable the WMI driver= to receive WMI events +without any event payload. =20 Take a look at drivers/platform/x86/xiaomi-wmi.c for an example WMI event = driver. =20 diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c index 87b0e54dde5a..7df50c8238e5 100644 --- a/drivers/platform/wmi/core.c +++ b/drivers/platform/wmi/core.c @@ -1040,7 +1040,7 @@ static int wmi_dev_probe(struct device *dev) } =20 if (wdriver->notify || wdriver->notify_new) { - if (test_bit(WMI_NO_EVENT_DATA, &wblock->flags) && !wdriver->no_notify_d= ata) + if (test_bit(WMI_NO_EVENT_DATA, &wblock->flags) && wdriver->min_event_si= ze) return -ENODEV; } =20 @@ -1398,10 +1398,14 @@ static int wmi_get_notify_data(struct wmi_block *wb= lock, union acpi_object **obj static void wmi_notify_driver(struct wmi_block *wblock, union acpi_object = *obj) { struct wmi_driver *driver =3D to_wmi_driver(wblock->dev.dev.driver); + struct wmi_buffer dummy =3D { + .length =3D 0, + .data =3D ZERO_SIZE_PTR, + }; struct wmi_buffer buffer; int ret; =20 - if (!obj && !driver->no_notify_data) { + if (!obj && driver->min_event_size) { dev_warn(&wblock->dev.dev, "Event contains no event data\n"); return; } @@ -1411,11 +1415,11 @@ static void wmi_notify_driver(struct wmi_block *wbl= ock, union acpi_object *obj) =20 if (driver->notify_new) { if (!obj) { - driver->notify_new(&wblock->dev, NULL); + driver->notify_new(&wblock->dev, &dummy); return; } =20 - ret =3D wmi_unmarshal_acpi_object(obj, &buffer, 0); + ret =3D wmi_unmarshal_acpi_object(obj, &buffer, driver->min_event_size); if (ret < 0) { dev_warn(&wblock->dev.dev, "Failed to unmarshal event data: %d\n", ret); return; diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index 78639407d67e..b0d06a80e89e 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -734,15 +734,10 @@ static void bitland_mifs_wmi_notify(struct wmi_device= *wdev, const struct wmi_buffer *buffer) { struct bitland_mifs_wmi_data *data =3D dev_get_drvdata(&wdev->dev); - const struct bitland_mifs_event *event; + const struct bitland_mifs_event *event =3D buffer->data; struct bitland_fan_notify_data fan_data; u8 brightness; =20 - if (buffer->length < sizeof(*event)) - return; - - event =3D buffer->data; - /* Validate event type */ if (event->event_type !=3D WMI_EVENT_TYPE_HOTKEY) return; @@ -830,6 +825,7 @@ static struct wmi_driver bitland_mifs_wmi_driver =3D { .pm =3D pm_sleep_ptr(&bitland_mifs_wmi_pm_ops), }, .id_table =3D bitland_mifs_wmi_id_table, + .min_event_size =3D sizeof(struct bitland_mifs_event), .probe =3D bitland_mifs_wmi_probe, .notify_new =3D bitland_mifs_wmi_notify, }; diff --git a/drivers/platform/x86/dell/dell-wmi-base.c b/drivers/platform/x= 86/dell/dell-wmi-base.c index e7a411ae9ca1..2a5804efd3ea 100644 --- a/drivers/platform/x86/dell/dell-wmi-base.c +++ b/drivers/platform/x86/dell/dell-wmi-base.c @@ -825,6 +825,7 @@ static struct wmi_driver dell_wmi_driver =3D { .name =3D "dell-wmi", }, .id_table =3D dell_wmi_id_table, + .min_event_size =3D sizeof(u16), .probe =3D dell_wmi_probe, .remove =3D dell_wmi_remove, .notify =3D dell_wmi_notify, diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platfor= m/x86/lenovo/ideapad-laptop.c index ae1ebb071fab..4fbc904f1fc3 100644 --- a/drivers/platform/x86/lenovo/ideapad-laptop.c +++ b/drivers/platform/x86/lenovo/ideapad-laptop.c @@ -2340,6 +2340,7 @@ static struct wmi_driver ideapad_wmi_driver =3D { .name =3D "ideapad_wmi", }, .id_table =3D ideapad_wmi_ids, + .min_event_size =3D sizeof(u32), .probe =3D ideapad_wmi_probe, .notify =3D ideapad_wmi_notify, }; diff --git a/drivers/platform/x86/lenovo/wmi-camera.c b/drivers/platform/x8= 6/lenovo/wmi-camera.c index eb60fb9a5b3f..89ecbce60bf4 100644 --- a/drivers/platform/x86/lenovo/wmi-camera.c +++ b/drivers/platform/x86/lenovo/wmi-camera.c @@ -134,6 +134,7 @@ static struct wmi_driver lenovo_wmi_driver =3D { .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, }, .id_table =3D lenovo_wmi_id_table, + .min_event_size =3D sizeof(u8), .no_singleton =3D true, .probe =3D lenovo_wmi_probe, .notify =3D lenovo_wmi_notify, diff --git a/drivers/platform/x86/lenovo/wmi-events.c b/drivers/platform/x8= 6/lenovo/wmi-events.c index 0994cd7dd504..4a6a2c82413a 100644 --- a/drivers/platform/x86/lenovo/wmi-events.c +++ b/drivers/platform/x86/lenovo/wmi-events.c @@ -183,6 +183,7 @@ static struct wmi_driver lwmi_events_driver =3D { .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, }, .id_table =3D lwmi_events_id_table, + .min_event_size =3D sizeof(u32), .probe =3D lwmi_events_probe, .notify =3D lwmi_events_notify, .no_singleton =3D true, diff --git a/drivers/platform/x86/lenovo/ymc.c b/drivers/platform/x86/lenov= o/ymc.c index 470d53e3c9d2..1b73a55f1b89 100644 --- a/drivers/platform/x86/lenovo/ymc.c +++ b/drivers/platform/x86/lenovo/ymc.c @@ -153,6 +153,7 @@ static struct wmi_driver lenovo_ymc_driver =3D { .name =3D "lenovo-ymc", }, .id_table =3D lenovo_ymc_wmi_id_table, + .min_event_size =3D sizeof(u32), .probe =3D lenovo_ymc_probe, .notify =3D lenovo_ymc_notify, }; diff --git a/drivers/platform/x86/lenovo/yogabook.c b/drivers/platform/x86/= lenovo/yogabook.c index 69887de36c9b..1a4b2ab1f35d 100644 --- a/drivers/platform/x86/lenovo/yogabook.c +++ b/drivers/platform/x86/lenovo/yogabook.c @@ -411,8 +411,8 @@ static struct wmi_driver yogabook_wmi_driver =3D { .name =3D "yogabook-wmi", .pm =3D pm_sleep_ptr(&yogabook_pm_ops), }, - .no_notify_data =3D true, .id_table =3D yogabook_wmi_id_table, + .min_event_size =3D 0, .probe =3D yogabook_wmi_probe, .remove =3D yogabook_wmi_remove, .notify =3D yogabook_wmi_notify, diff --git a/drivers/platform/x86/redmi-wmi.c b/drivers/platform/x86/redmi-= wmi.c index e5cb348e3a39..58898630eda6 100644 --- a/drivers/platform/x86/redmi-wmi.c +++ b/drivers/platform/x86/redmi-wmi.c @@ -141,6 +141,7 @@ static struct wmi_driver redmi_wmi_driver =3D { .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, }, .id_table =3D redmi_wmi_id_table, + .min_event_size =3D 32, .probe =3D redmi_wmi_probe, .notify =3D redmi_wmi_notify, .no_singleton =3D true, diff --git a/drivers/platform/x86/uniwill/uniwill-wmi.c b/drivers/platform/= x86/uniwill/uniwill-wmi.c index 31d9c39f14ab..097882f10b1e 100644 --- a/drivers/platform/x86/uniwill/uniwill-wmi.c +++ b/drivers/platform/x86/uniwill/uniwill-wmi.c @@ -77,6 +77,7 @@ static struct wmi_driver uniwill_wmi_driver =3D { .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, }, .id_table =3D uniwill_wmi_id_table, + .min_event_size =3D sizeof(u32), .notify =3D uniwill_wmi_notify, .no_singleton =3D true, }; diff --git a/drivers/platform/x86/xiaomi-wmi.c b/drivers/platform/x86/xiaom= i-wmi.c index badf9e42e015..3874f3336a0d 100644 --- a/drivers/platform/x86/xiaomi-wmi.c +++ b/drivers/platform/x86/xiaomi-wmi.c @@ -83,6 +83,7 @@ static struct wmi_driver xiaomi_wmi_driver =3D { .name =3D "xiaomi-wmi", }, .id_table =3D xiaomi_wmi_id_table, + .min_event_size =3D 0, .probe =3D xiaomi_wmi_probe, .notify_new =3D xiaomi_wmi_notify, .no_singleton =3D true, diff --git a/include/linux/wmi.h b/include/linux/wmi.h index da94580572a9..2d242575a8b3 100644 --- a/include/linux/wmi.h +++ b/include/linux/wmi.h @@ -91,7 +91,7 @@ u8 wmidev_instance_count(struct wmi_device *wdev); * struct wmi_driver - WMI driver structure * @driver: Driver model structure * @id_table: List of WMI GUIDs supported by this driver - * @no_notify_data: Driver supports WMI events which provide no event data + * @min_event_size: Minimum event payload size supported by this driver * @no_singleton: Driver can be instantiated multiple times * @probe: Callback for device binding * @remove: Callback for device unbinding @@ -101,11 +101,14 @@ u8 wmidev_instance_count(struct wmi_device *wdev); * * This represents WMI drivers which handle WMI devices. The data inside t= he buffer * passed to the @notify_new callback is guaranteed to be aligned on a 8-b= yte boundary. + * The minimum supported size for said buffer can be specified using @min_= event_size. + * WMI drivers that still use the deprecated @notify callback can still se= t @min_event_size + * to 0 in order to signal that they support WMI events which provide no e= vent data. */ struct wmi_driver { struct device_driver driver; const struct wmi_device_id *id_table; - bool no_notify_data; + size_t min_event_size; bool no_singleton; =20 int (*probe)(struct wmi_device *wdev, const void *context); --=20 2.39.5