# git rev-parse -q --verify e376ca093587eafd840bb0f9df04090e2a54249c^{commit} e376ca093587eafd840bb0f9df04090e2a54249c already have revision, skipping fetch # git checkout -q -f -B kisskb e376ca093587eafd840bb0f9df04090e2a54249c # git clean -qxdf # < git log -1 # commit e376ca093587eafd840bb0f9df04090e2a54249c # Author: Naveen N. Rao # Date: Tue Apr 21 23:05:45 2020 +0530 # # powerpc/module_64: Use special stub for _mcount() with -mprofile-kernel # # Since commit c55d7b5e64265f ("powerpc: Remove STRICT_KERNEL_RWX # incompatibility with RELOCATABLE"), powerpc kernels with # -mprofile-kernel can crash in certain scenarios with a trace like below: # # BUG: Unable to handle kernel instruction fetch (NULL pointer?) # Faulting instruction address: 0x00000000 # Oops: Kernel access of bad area, sig: 11 [#1] # LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=256 DEBUG_PAGEALLOC NUMA PowerNV # # NIP [0000000000000000] 0x0 # LR [c0080000102c0048] ext4_iomap_end+0x8/0x30 [ext4] # Call Trace: # iomap_apply+0x20c/0x920 (unreliable) # iomap_bmap+0xfc/0x160 # ext4_bmap+0xa4/0x180 [ext4] # bmap+0x4c/0x80 # jbd2_journal_init_inode+0x44/0x1a0 [jbd2] # ext4_load_journal+0x440/0x860 [ext4] # ext4_fill_super+0x342c/0x3ab0 [ext4] # mount_bdev+0x25c/0x290 # ext4_mount+0x28/0x50 [ext4] # legacy_get_tree+0x4c/0xb0 # vfs_get_tree+0x4c/0x130 # do_mount+0xa18/0xc50 # sys_mount+0x158/0x180 # system_call+0x5c/0x68 # # The NIP points to NULL, or a random location (data even), while the LR # always points to the LEP of a function (with an offset of 8), indicating # that something went wrong with ftrace. However, ftrace is not # necessarily active when such crashes occur. # # The kernel OOPS sometimes follows a warning from ftrace indicating that # some module functions could not be patched with a nop. Other times, if a # module is loaded early during boot, instruction patching can fail due to # a separate bug, but the error is not reported due to missing error # reporting. # # In all the above cases when instruction patching fails, ftrace will be # disabled but certain kernel module functions will be left with default # calls to _mcount(). This is not a problem with ELFv1. However, with # -mprofile-kernel, the default stub is problematic since it depends on a # valid module TOC in r2. If the kernel (or a different module) calls into # a function that does not use the TOC, the function won't have a prologue # to setup the module TOC. When that function calls into _mcount(), we # will end up in the relocation stub that will use the previous TOC, and # end up trying to jump into a random location. From the above trace: # # iomap_apply+0x20c/0x920 [kernel TOC] # | # V # ext4_iomap_end+0x8/0x30 [no GEP == kernel TOC] # | # V # _mcount() stub # [uses kernel TOC -> random entry] # # To address this, let's change over to using the special stub that is # used for ftrace_[regs_]caller() for _mcount(). This ensures that we are # not dependent on a valid module TOC in r2 for default _mcount() # handling. # # Reported-by: Qian Cai # Signed-off-by: Naveen N. Rao # Tested-by: Qian Cai # Signed-off-by: Michael Ellerman # Link: https://lore.kernel.org/r/8affd4298d22099bbd82544fab8185700a6222b1.1587488954.git.naveen.n.rao@linux.vnet.ibm.com # < /opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --version # < git log --format=%s --max-count=1 e376ca093587eafd840bb0f9df04090e2a54249c # < make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-next_mpc85xx_smp_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- mpc85xx_smp_defconfig # < make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-next_mpc85xx_smp_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- help # make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-next_mpc85xx_smp_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- olddefconfig # make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-next_mpc85xx_smp_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- In file included from /kisskb/src/include/linux/kernel.h:11:0, from /kisskb/src/include/linux/list.h:9, from /kisskb/src/include/linux/module.h:12, from /kisskb/src/drivers/net/ethernet/freescale/fs_enet/mac-scc.c:15: /kisskb/src/drivers/net/ethernet/freescale/fs_enet/mac-scc.c: In function 'allocate_bd': /kisskb/src/include/linux/err.h:22:49: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO) ^ /kisskb/src/include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ /kisskb/src/drivers/net/ethernet/freescale/fs_enet/mac-scc.c:139:6: note: in expansion of macro 'IS_ERR_VALUE' if (IS_ERR_VALUE(fep->ring_mem_addr)) ^ /kisskb/src/arch/powerpc/boot/dts/fsl/mpc8541cds.dts:330.3-21: Warning (pci_device_bus_num): /pci@e0008000/i8259@19000:bus-range: PCI bus number 1 out of range, expected (0 - 0) /kisskb/src/arch/powerpc/boot/dts/fsl/mpc8555cds.dts:330.3-21: Warning (pci_device_bus_num): /pci@e0008000/i8259@19000:bus-range: PCI bus number 1 out of range, expected (0 - 0) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd45840) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) INFO: Uncompressed kernel (size 0xd3503c) overlaps the address of the wrapper(0x400000) INFO: Fixing the link_address of wrapper to (0xe00000) Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:53 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6483341 Bytes = 6331.39 KiB = 6.18 MiB Load Address: 00000000 Entry Point: 00000000 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:55 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513817 Bytes = 6361.15 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:55 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513776 Bytes = 6361.11 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:55 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513900 Bytes = 6361.23 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:55 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513814 Bytes = 6361.15 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e00314 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:55 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6514368 Bytes = 6361.69 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6514380 Bytes = 6361.70 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513844 Bytes = 6361.18 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e00314 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513777 Bytes = 6361.11 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513827 Bytes = 6361.16 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e00314 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513852 Bytes = 6361.18 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e00314 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513825 Bytes = 6361.16 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e00314 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513870 Bytes = 6361.20 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513991 Bytes = 6361.32 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:56 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513856 Bytes = 6361.19 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Image Name: Linux-5.7.0-rc2-14860-ge376ca093 Created: Sat May 30 06:01:57 2020 Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 6513863 Bytes = 6361.19 KiB = 6.21 MiB Load Address: 00e00000 Entry Point: 00e002a4 Completed OK # rm -rf /kisskb/build/powerpc-next_mpc85xx_smp_defconfig_powerpc-gcc5 # Build took: 0:02:06.871112