lkml.org 
[lkml]   [2022]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 021/207] drivers/base: Fix unsigned comparison to -1 in CPUMAP_FILE_MAX_BYTES
    Date
    From: Phil Auld <pauld@redhat.com>

    commit d7f06bdd6ee87fbefa05af5f57361d85e7715b11 upstream.

    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")
    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>
    Reported-by: feng xiangjun <fengxj325@gmail.com>
    Signed-off-by: Phil Auld <pauld@redhat.com>
    Signed-off-by: Yury Norov <yury.norov@gmail.com>
    Link: https://lore.kernel.org/r/20220906203542.1796629-1-pauld@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    include/linux/cpumask.h | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    --- a/include/linux/cpumask.h
    +++ b/include/linux/cpumask.h
    @@ -1083,9 +1083,10 @@ cpumap_print_list_to_buf(char *buf, cons
    * 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)


    \
     
     \ /
      Last update: 2022-09-26 13:41    [W:3.684 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site