include/linux/cpumask.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
As PAGE_SIZE is unsigned long, -1 > PAGE_SIZE when NR_CPUS <= 3.
This leads to very large file sizes:
topology$ ls -l
total 0
-r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 core_cpus
-r--r--r-- 1 root root 4096 Sep 5 11:59 core_cpus_list
-r--r--r-- 1 root root 4096 Sep 5 10:58 core_id
-r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 core_siblings
-r--r--r-- 1 root root 4096 Sep 5 11:59 core_siblings_list
-r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 die_cpus
-r--r--r-- 1 root root 4096 Sep 5 11:59 die_cpus_list
-r--r--r-- 1 root root 4096 Sep 5 11:59 die_id
-r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 package_cpus
-r--r--r-- 1 root root 4096 Sep 5 11:59 package_cpus_list
-r--r--r-- 1 root root 4096 Sep 5 10:58 physical_package_id
-r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 thread_siblings
-r--r--r-- 1 root root 4096 Sep 5 11:59 thread_siblings_list
Adjust the inequality to catch the case when NR_CPUS is configured
to a small value.
Fixes: 7ee951acd31a ("drivers/base: fix userspace break from using bin_attributes for cpumap and cpulist")
Reported-by: feng xiangjun <fengxj325@gmail.com>
Signed-off-by: Phil Auld <pauld@redhat.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Yury Norov <yury.norov@gmail.com>
Cc: stable@vger.kernel.org
Cc: feng xiangjun <fengxj325@gmail.com>
---
v2: Remove the +/-1 completely from the test since it will produce the
same results, and remove some extra parentheses.
include/linux/cpumask.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
index bd047864c7ac..e8ad12b5b9d2 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
@@ -1127,9 +1127,10 @@ cpumap_print_list_to_buf(char *buf, const struct cpumask *mask,
* cover a worst-case of every other cpu being on one of two nodes for a
* very large NR_CPUS.
*
- * Use PAGE_SIZE as a minimum for smaller configurations.
+ * Use PAGE_SIZE as a minimum for smaller configurations while avoiding
+ * unsigned comparison to -1.
*/
-#define CPUMAP_FILE_MAX_BYTES ((((NR_CPUS * 9)/32 - 1) > PAGE_SIZE) \
+#define CPUMAP_FILE_MAX_BYTES (((NR_CPUS * 9)/32 > PAGE_SIZE) \
? (NR_CPUS * 9)/32 - 1 : PAGE_SIZE)
#define CPULIST_FILE_MAX_BYTES (((NR_CPUS * 7)/2 > PAGE_SIZE) ? (NR_CPUS * 7)/2 : PAGE_SIZE)
--
2.31.1
On Tue, Sep 06, 2022 at 04:35:42PM -0400, Phil Auld wrote:
> As PAGE_SIZE is unsigned long, -1 > PAGE_SIZE when NR_CPUS <= 3.
> This leads to very large file sizes:
>
> topology$ ls -l
> total 0
> -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 core_cpus
> -r--r--r-- 1 root root 4096 Sep 5 11:59 core_cpus_list
> -r--r--r-- 1 root root 4096 Sep 5 10:58 core_id
> -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 core_siblings
> -r--r--r-- 1 root root 4096 Sep 5 11:59 core_siblings_list
> -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 die_cpus
> -r--r--r-- 1 root root 4096 Sep 5 11:59 die_cpus_list
> -r--r--r-- 1 root root 4096 Sep 5 11:59 die_id
> -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 package_cpus
> -r--r--r-- 1 root root 4096 Sep 5 11:59 package_cpus_list
> -r--r--r-- 1 root root 4096 Sep 5 10:58 physical_package_id
> -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 thread_siblings
> -r--r--r-- 1 root root 4096 Sep 5 11:59 thread_siblings_list
>
> Adjust the inequality to catch the case when NR_CPUS is configured
> to a small value.
>
> Fixes: 7ee951acd31a ("drivers/base: fix userspace break from using bin_attributes for cpumap and cpulist")
> Reported-by: feng xiangjun <fengxj325@gmail.com>
> Signed-off-by: Phil Auld <pauld@redhat.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> Cc: Yury Norov <yury.norov@gmail.com>
> Cc: stable@vger.kernel.org
> Cc: feng xiangjun <fengxj325@gmail.com>
Applied on bitmap-for-next. Thanks!
> ---
>
> v2: Remove the +/-1 completely from the test since it will produce the
> same results, and remove some extra parentheses.
>
> include/linux/cpumask.h | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
> index bd047864c7ac..e8ad12b5b9d2 100644
> --- a/include/linux/cpumask.h
> +++ b/include/linux/cpumask.h
> @@ -1127,9 +1127,10 @@ cpumap_print_list_to_buf(char *buf, const struct cpumask *mask,
> * cover a worst-case of every other cpu being on one of two nodes for a
> * very large NR_CPUS.
> *
> - * Use PAGE_SIZE as a minimum for smaller configurations.
> + * Use PAGE_SIZE as a minimum for smaller configurations while avoiding
> + * unsigned comparison to -1.
> */
> -#define CPUMAP_FILE_MAX_BYTES ((((NR_CPUS * 9)/32 - 1) > PAGE_SIZE) \
> +#define CPUMAP_FILE_MAX_BYTES (((NR_CPUS * 9)/32 > PAGE_SIZE) \
> ? (NR_CPUS * 9)/32 - 1 : PAGE_SIZE)
> #define CPULIST_FILE_MAX_BYTES (((NR_CPUS * 7)/2 > PAGE_SIZE) ? (NR_CPUS * 7)/2 : PAGE_SIZE)
>
> --
> 2.31.1
On Tue, Sep 06, 2022 at 01:59:53PM -0700 Yury Norov wrote:
> On Tue, Sep 06, 2022 at 04:35:42PM -0400, Phil Auld wrote:
> > As PAGE_SIZE is unsigned long, -1 > PAGE_SIZE when NR_CPUS <= 3.
> > This leads to very large file sizes:
> >
> > topology$ ls -l
> > total 0
> > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 core_cpus
> > -r--r--r-- 1 root root 4096 Sep 5 11:59 core_cpus_list
> > -r--r--r-- 1 root root 4096 Sep 5 10:58 core_id
> > -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 core_siblings
> > -r--r--r-- 1 root root 4096 Sep 5 11:59 core_siblings_list
> > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 die_cpus
> > -r--r--r-- 1 root root 4096 Sep 5 11:59 die_cpus_list
> > -r--r--r-- 1 root root 4096 Sep 5 11:59 die_id
> > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 package_cpus
> > -r--r--r-- 1 root root 4096 Sep 5 11:59 package_cpus_list
> > -r--r--r-- 1 root root 4096 Sep 5 10:58 physical_package_id
> > -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 thread_siblings
> > -r--r--r-- 1 root root 4096 Sep 5 11:59 thread_siblings_list
> >
> > Adjust the inequality to catch the case when NR_CPUS is configured
> > to a small value.
> >
> > Fixes: 7ee951acd31a ("drivers/base: fix userspace break from using bin_attributes for cpumap and cpulist")
> > Reported-by: feng xiangjun <fengxj325@gmail.com>
> > Signed-off-by: Phil Auld <pauld@redhat.com>
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > Cc: Yury Norov <yury.norov@gmail.com>
> > Cc: stable@vger.kernel.org
> > Cc: feng xiangjun <fengxj325@gmail.com>
>
> Applied on bitmap-for-next. Thanks!
>
Great, thanks!
> > ---
> >
> > v2: Remove the +/-1 completely from the test since it will produce the
> > same results, and remove some extra parentheses.
> >
> > include/linux/cpumask.h | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
> > index bd047864c7ac..e8ad12b5b9d2 100644
> > --- a/include/linux/cpumask.h
> > +++ b/include/linux/cpumask.h
> > @@ -1127,9 +1127,10 @@ cpumap_print_list_to_buf(char *buf, const struct cpumask *mask,
> > * cover a worst-case of every other cpu being on one of two nodes for a
> > * very large NR_CPUS.
> > *
> > - * Use PAGE_SIZE as a minimum for smaller configurations.
> > + * Use PAGE_SIZE as a minimum for smaller configurations while avoiding
> > + * unsigned comparison to -1.
> > */
> > -#define CPUMAP_FILE_MAX_BYTES ((((NR_CPUS * 9)/32 - 1) > PAGE_SIZE) \
> > +#define CPUMAP_FILE_MAX_BYTES (((NR_CPUS * 9)/32 > PAGE_SIZE) \
> > ? (NR_CPUS * 9)/32 - 1 : PAGE_SIZE)
> > #define CPULIST_FILE_MAX_BYTES (((NR_CPUS * 7)/2 > PAGE_SIZE) ? (NR_CPUS * 7)/2 : PAGE_SIZE)
> >
> > --
> > 2.31.1
>
--
On Tue, Sep 06, 2022 at 06:19:23PM -0400, Phil Auld wrote:
> On Tue, Sep 06, 2022 at 01:59:53PM -0700 Yury Norov wrote:
> > On Tue, Sep 06, 2022 at 04:35:42PM -0400, Phil Auld wrote:
> > > As PAGE_SIZE is unsigned long, -1 > PAGE_SIZE when NR_CPUS <= 3.
> > > This leads to very large file sizes:
> > >
> > > topology$ ls -l
> > > total 0
> > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 core_cpus
> > > -r--r--r-- 1 root root 4096 Sep 5 11:59 core_cpus_list
> > > -r--r--r-- 1 root root 4096 Sep 5 10:58 core_id
> > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 core_siblings
> > > -r--r--r-- 1 root root 4096 Sep 5 11:59 core_siblings_list
> > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 die_cpus
> > > -r--r--r-- 1 root root 4096 Sep 5 11:59 die_cpus_list
> > > -r--r--r-- 1 root root 4096 Sep 5 11:59 die_id
> > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 package_cpus
> > > -r--r--r-- 1 root root 4096 Sep 5 11:59 package_cpus_list
> > > -r--r--r-- 1 root root 4096 Sep 5 10:58 physical_package_id
> > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 thread_siblings
> > > -r--r--r-- 1 root root 4096 Sep 5 11:59 thread_siblings_list
> > >
> > > Adjust the inequality to catch the case when NR_CPUS is configured
> > > to a small value.
> > >
> > > Fixes: 7ee951acd31a ("drivers/base: fix userspace break from using bin_attributes for cpumap and cpulist")
> > > Reported-by: feng xiangjun <fengxj325@gmail.com>
> > > Signed-off-by: Phil Auld <pauld@redhat.com>
> > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > > Cc: Yury Norov <yury.norov@gmail.com>
> > > Cc: stable@vger.kernel.org
> > > Cc: feng xiangjun <fengxj325@gmail.com>
> >
> > Applied on bitmap-for-next. Thanks!
> >
>
> Great, thanks!
This is hitting people already and causing problems, so I'll go add it
to my tree as well to get it to Linus quicker. Here's one report of the
problem:
https://github.com/util-linux/util-linux/issues/1810
thanks,
greg k-h
On Thu, Sep 22, 2022 at 01:02:45PM +0200 Greg Kroah-Hartman wrote:
> On Tue, Sep 06, 2022 at 06:19:23PM -0400, Phil Auld wrote:
> > On Tue, Sep 06, 2022 at 01:59:53PM -0700 Yury Norov wrote:
> > > On Tue, Sep 06, 2022 at 04:35:42PM -0400, Phil Auld wrote:
> > > > As PAGE_SIZE is unsigned long, -1 > PAGE_SIZE when NR_CPUS <= 3.
> > > > This leads to very large file sizes:
> > > >
> > > > topology$ ls -l
> > > > total 0
> > > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 core_cpus
> > > > -r--r--r-- 1 root root 4096 Sep 5 11:59 core_cpus_list
> > > > -r--r--r-- 1 root root 4096 Sep 5 10:58 core_id
> > > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 core_siblings
> > > > -r--r--r-- 1 root root 4096 Sep 5 11:59 core_siblings_list
> > > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 die_cpus
> > > > -r--r--r-- 1 root root 4096 Sep 5 11:59 die_cpus_list
> > > > -r--r--r-- 1 root root 4096 Sep 5 11:59 die_id
> > > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 11:59 package_cpus
> > > > -r--r--r-- 1 root root 4096 Sep 5 11:59 package_cpus_list
> > > > -r--r--r-- 1 root root 4096 Sep 5 10:58 physical_package_id
> > > > -r--r--r-- 1 root root 18446744073709551615 Sep 5 10:10 thread_siblings
> > > > -r--r--r-- 1 root root 4096 Sep 5 11:59 thread_siblings_list
> > > >
> > > > Adjust the inequality to catch the case when NR_CPUS is configured
> > > > to a small value.
> > > >
> > > > Fixes: 7ee951acd31a ("drivers/base: fix userspace break from using bin_attributes for cpumap and cpulist")
> > > > Reported-by: feng xiangjun <fengxj325@gmail.com>
> > > > Signed-off-by: Phil Auld <pauld@redhat.com>
> > > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > > Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> > > > Cc: Yury Norov <yury.norov@gmail.com>
> > > > Cc: stable@vger.kernel.org
> > > > Cc: feng xiangjun <fengxj325@gmail.com>
> > >
> > > Applied on bitmap-for-next. Thanks!
> > >
> >
> > Great, thanks!
>
> This is hitting people already and causing problems, so I'll go add it
> to my tree as well to get it to Linus quicker. Here's one report of the
> problem:
> https://github.com/util-linux/util-linux/issues/1810
>
Arrgh! Thanks Greg. I stopped watching it when it got merged above but yeah,
this needs to get in soon and then get into any stable trees that got the first
one. Sorry about that!
Cheers,
Phil
> thanks,
>
> greg k-h
>
--
© 2016 - 2026 Red Hat, Inc.