Re: [PATCH v5 08/14] platform/x86: dell-smbios: Add a sysfs interface for SMBIOS tokens

From: Greg KH
Date: Sat Oct 07 2017 - 02:54:22 EST


On Fri, Oct 06, 2017 at 11:59:52PM -0500, Mario Limonciello wrote:
> Currently userspace tools can access system tokens via the dcdbas
> kernel module and a SMI call that will cause the platform to execute
> SMM code.
>
> With a goal in mind of deprecating the dcdbas kernel module a different
> method for accessing these tokens from userspace needs to be created.
>
> This is intentionally marked to only be readable as root as it can
> contain sensitive information about the platform's configuration.
>
> MAINTAINERS was missing for this driver. Add myself and Pali to
> maintainers list for it.
>
> Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxxx>
> ---
> .../ABI/testing/sysfs-platform-dell-smbios | 16 ++++++
> MAINTAINERS | 7 +++
> drivers/platform/x86/dell-smbios.c | 64 ++++++++++++++++++++++
> 3 files changed, 87 insertions(+)
> create mode 100644 Documentation/ABI/testing/sysfs-platform-dell-smbios
>
> diff --git a/Documentation/ABI/testing/sysfs-platform-dell-smbios b/Documentation/ABI/testing/sysfs-platform-dell-smbios
> new file mode 100644
> index 000000000000..d97f4bd5bd91
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-platform-dell-smbios
> @@ -0,0 +1,16 @@
> +What: /sys/devices/platform/<platform>/tokens
> +Date: November 2017
> +KernelVersion: 4.15
> +Contact: "Mario Limonciello" <mario.limonciello@xxxxxxxx>
> +Description:
> + A read-only description of Dell platform tokens
> + available on the machine.
> +
> + The tokens will be displayed in the following
> + machine readable format with each token on a
> + new line:
> +
> + ID Location value
> +
> + For example token:
> + 5 5 3

That's more than "one value per file" which is what sysfs requires, so
this isn't acceptable, sorry.

> +static ssize_t tokens_show(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + size_t off = 0;
> + int to_print;
> + int i;
> +
> + to_print = min(da_num_tokens, (int)(PAGE_SIZE - 1) / 15);
> + for (i = 0; i < to_print; i++) {
> + off += scnprintf(buf+off, PAGE_SIZE-off, "%04x\t%04x\t%04x\n",
> + da_tokens[i].tokenID, da_tokens[i].location,
> + da_tokens[i].value);

Huge hint, if you are checking for the max size of the buffer for sysfs,
something is really wrong, and you need to redo your design.

thanks,

greg k-h