virt_to_phys outside array bounds warning (GCC 12.1.0)

Bagas Sanjaya bagasdotme at gmail.com
Wed Jun 8 01:39:54 PDT 2022


Hi everyone,

When cross-compiling arm 5.19-rc1 kernel using GCC 12.1.0 (armv7 with neon
fpu, multi_v7_defconfig), I got outside array bounds warning pointing to
virt_to_phys() macro:

  DTC     arch/arm/boot/dts/am335x-evm.dtb
In file included from ./arch/arm/include/asm/page.h:163,
                 from ./arch/arm/include/asm/thread_info.h:14,
                 from ./include/linux/thread_info.h:60,
                 from ./include/asm-generic/preempt.h:5,
                 from ./arch/arm/include/generated/asm/preempt.h:1,
                 from ./include/linux/preempt.h:78,
                 from ./include/linux/spinlock.h:55,
                 from ./include/linux/wait.h:9,
                 from ./include/linux/wait_bit.h:8,
                 from ./include/linux/fs.h:6,
                 from ./include/linux/proc_fs.h:10,
                 from ./include/linux/efi.h:19,
                 from arch/arm/kernel/setup.c:7:
In function 'request_standard_resources',
    inlined from 'setup_arch' at arch/arm/kernel/setup.c:1158:2:
./arch/arm/include/asm/memory.h:311:22: warning: array subscript -1 is outside array bounds of 'char[2147483647]' [-Warray-bounds]
  311 | #define virt_to_phys virt_to_phys
arch/arm/kernel/setup.c:855:31: note: in expansion of macro 'virt_to_phys'
  855 |         kernel_code.end     = virt_to_phys(__init_begin - 1);
      |                               ^~~~~~~~~~~~
In file included from ./include/linux/pid_namespace.h:7,
                 from ./include/linux/ptrace.h:10,
                 from ./include/linux/elfcore.h:11,
                 from ./include/linux/crash_core.h:6,
                 from ./include/linux/kexec.h:18,
                 from arch/arm/kernel/setup.c:20:
./include/linux/mm.h: In function 'setup_arch':
./include/linux/mm.h:2500:21: note: at offset -1 into object '__init_begin' of size [0, 2147483647]
 2500 |         extern char __init_begin[], __init_end[];
      |                     ^~~~~~~~~~~~
In function 'request_standard_resources',
    inlined from 'setup_arch' at arch/arm/kernel/setup.c:1158:2:
./arch/arm/include/asm/memory.h:311:22: warning: array subscript -1 is outside array bounds of 'char[2147483647]' [-Warray-bounds]
  311 | #define virt_to_phys virt_to_phys
arch/arm/kernel/setup.c:857:31: note: in expansion of macro 'virt_to_phys'
  857 |         kernel_data.end     = virt_to_phys(_end - 1);
      |                               ^~~~~~~~~~~~
In file included from ./arch/arm/include/asm/sections.h:5,
                 from ./include/linux/interrupt.h:21,
                 from ./include/linux/rtc.h:17,
                 from ./include/linux/efi.h:20:
./include/asm-generic/sections.h: In function 'setup_arch':
./include/asm-generic/sections.h:41:13: note: at offset -1 into object '_end' of size [0, 2147483647]
   41 | extern char _end[];
      |             ^~~~

Thanks.

Reported-by: Bagas Sanjaya <bagasdotme at gmail.com>

-- 
An old man doll... just what I always wanted! - Clara



More information about the linux-arm-kernel mailing list