From: Phil Auld <pauld@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki : --cc=" <rafael@kernel.org>,
Tian Tao <tiantao6@hisilicon.com>,
Barry Song <song.bao.hua@hisilicon.com>
Subject: [PATCH] drivers/base/node.c: fix userspace break from using bin_attributes for cpumap and cpulist
Date: Tue, 12 Jul 2022 17:43:01 -0400 [thread overview]
Message-ID: <20220712214301.809967-1-pauld@redhat.com> (raw)
Using bin_attributes with a 0 size causes fstat and friends to return that 0 size.
This breaks userspace code that retrieves the size before reading the file. Rather
than reverting 75bd50fa841 ("drivers/base/node.c: use bin_attribute to break the size
limitation of cpumap ABI") let's put in a size value at compile time. Use direct
comparison and a worst-case maximum to ensure compile time constants. For cpulist the
max is on the order of NR_CPUS * (ceil(log10(NR_CPUS)) + 1) which for 8192 is 40960.
In order to get near that you'd need a system with every other CPU on one node or
something similar. e.g. (0,2,4,... 1024,1026...). We set it to a min of PAGE_SIZE
to retain the older behavior. For cpumap, PAGE_SIZE is plenty big.
On an 80 cpu 4-node sytem (NR_CPUS == 8192)
before:
-r--r--r--. 1 root root 0 Jul 12 14:08 /sys/devices/system/node/node0/cpulist
-r--r--r--. 1 root root 0 Jul 11 17:25 /sys/devices/system/node/node0/cpumap
after:
-r--r--r--. 1 root root 40960 Jul 12 16:48 /sys/devices/system/node/node0/cpulist
-r--r--r--. 1 root root 4096 Jul 12 15:50 /sys/devices/system/node/node0/cpumap
Fixes: 75bd50fa841 ("drivers/base/node.c: use bin_attribute to break the size limitation of cpumap ABI")
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Signed-off-by: Phil Auld <pauld@redhat.com>
---
drivers/base/node.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 0ac6376ef7a1..291c69671f23 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -45,7 +45,7 @@ static inline ssize_t cpumap_read(struct file *file, struct kobject *kobj,
return n;
}
-static BIN_ATTR_RO(cpumap, 0);
+static BIN_ATTR_RO(cpumap, PAGE_SIZE);
static inline ssize_t cpulist_read(struct file *file, struct kobject *kobj,
struct bin_attribute *attr, char *buf,
@@ -66,7 +66,7 @@ static inline ssize_t cpulist_read(struct file *file, struct kobject *kobj,
return n;
}
-static BIN_ATTR_RO(cpulist, 0);
+static BIN_ATTR_RO(cpulist, (((NR_CPUS * 5) > PAGE_SIZE) ? NR_CPUS *5 : PAGE_SIZE));
/**
* struct node_access_nodes - Access class device to hold user visible
--
2.31.1
next reply other threads:[~2022-07-12 21:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-12 21:43 Phil Auld [this message]
2022-07-12 23:18 ` [PATCH] drivers/base/node.c: fix userspace break from using bin_attributes for cpumap and cpulist Barry Song
2022-07-13 11:37 ` Phil Auld
2022-07-13 12:00 ` Barry Song
2022-07-13 12:20 ` Phil Auld
2022-07-13 13:06 ` Greg Kroah-Hartman
2022-07-13 6:06 ` Greg Kroah-Hartman
2022-07-13 11:47 ` Phil Auld
2022-07-13 13:05 ` Greg Kroah-Hartman
2022-07-13 13:14 ` Phil Auld
2022-07-13 13:10 ` Phil Auld
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220712214301.809967-1-pauld@redhat.com \
--to=pauld@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=song.bao.hua@hisilicon.com \
--cc=tiantao6@hisilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.