1
0
mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2026-01-12 09:32:12 +00:00
Waiman Long a431dbbc54 mm/sparsemem: fix 'mem_section' will never be NULL gcc 12 warning
The gcc 12 compiler reports a "'mem_section' will never be NULL" warning
on the following code:

    static inline struct mem_section *__nr_to_section(unsigned long nr)
    {
    #ifdef CONFIG_SPARSEMEM_EXTREME
        if (!mem_section)
                return NULL;
    #endif
        if (!mem_section[SECTION_NR_TO_ROOT(nr)])
                return NULL;
       :

It happens with CONFIG_SPARSEMEM_EXTREME off.  The mem_section definition
is

    #ifdef CONFIG_SPARSEMEM_EXTREME
    extern struct mem_section **mem_section;
    #else
    extern struct mem_section mem_section[NR_SECTION_ROOTS][SECTIONS_PER_ROOT];
    #endif

In the !CONFIG_SPARSEMEM_EXTREME case, mem_section is a static
2-dimensional array and so the check "!mem_section[SECTION_NR_TO_ROOT(nr)]"
doesn't make sense.

Fix this warning by moving the "!mem_section[SECTION_NR_TO_ROOT(nr)]"
check up inside the CONFIG_SPARSEMEM_EXTREME block and adding an
explicit NR_SECTION_ROOTS check to make sure that there is no
out-of-bound array access.

Link: https://lkml.kernel.org/r/20220331180246.2746210-1-longman@redhat.com
Fixes: 3e347261a80b ("sparsemem extreme implementation")
Signed-off-by: Waiman Long <longman@redhat.com>
Reported-by: Justin Forbes <jforbes@redhat.com>
Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Rafael Aquini <aquini@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2022-04-08 14:20:36 -10:00
..
2022-04-01 09:37:18 -07:00
2022-04-01 10:26:09 -07:00
2022-03-30 10:36:41 -07:00
2022-03-25 13:56:18 -07:00
2022-03-24 13:13:26 -07:00
2022-03-23 18:08:03 +01:00
2022-03-25 13:35:34 -07:00
2022-03-23 19:58:38 +01:00
2022-03-28 17:29:53 -07:00
2022-03-25 13:35:34 -07:00
2022-03-29 18:55:37 -07:00
2022-03-25 12:14:39 -07:00
2022-03-24 19:37:53 -07:00
2022-03-26 11:51:46 -07:00
2022-03-31 11:43:01 -07:00
2022-03-24 13:13:26 -07:00
2022-03-24 19:37:53 -07:00
2022-03-28 17:29:53 -07:00
2022-04-01 14:40:44 -04:00
2022-03-31 15:49:36 -07:00
2022-04-03 12:26:01 -07:00
2022-03-22 17:03:12 -07:00
2022-03-22 18:26:56 -07:00
2022-03-26 12:01:35 -07:00
2022-03-23 14:35:59 -07:00
2022-03-22 17:03:12 -07:00
2022-03-22 17:03:12 -07:00
2022-04-01 14:40:44 -04:00
2022-03-29 18:55:37 -07:00
2022-03-29 18:55:37 -07:00
2022-04-01 16:26:57 -07:00
2022-03-24 19:06:45 -07:00
2022-04-01 13:45:08 -04:00
2022-03-25 13:02:05 -07:00
2022-03-28 17:29:53 -07:00
2022-03-23 19:58:41 +01:00
2022-03-23 12:33:21 -07:00
2022-03-22 15:57:11 -07:00
2022-03-24 13:13:26 -07:00
2022-03-23 18:03:08 -07:00
2022-03-28 16:53:00 -04:00
2022-04-01 13:40:44 -07:00