linux/arch/mips
Gregory CLEMENT e3e33ac2eb MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 bits
[ Upstream commit 36dac9a3dd ]

Since commit e424054000 ("MIPS: Tracing: Reduce the overhead of
dynamic Function Tracer"), the macro UASM_i_LA_mostly has been used,
and this macro can generate more than 2 instructions. At the same
time, the code in ftrace assumes that no more than 2 instructions can
be generated, which is why it stores them in an int[2] array. However,
as previously noted, the macro UASM_i_LA_mostly (and now UASM_i_LA)
causes a buffer overflow when _mcount is beyond 32 bits. This leads to
corruption of the variables located in the __read_mostly section.

This corruption was observed because the variable
__cpu_primary_thread_mask was corrupted, causing a hang very early
during boot.

This fix prevents the corruption by avoiding the generation of
instructions if they could exceed 2 instructions in
length. Fortunately, insn_la_mcount is only used if the instrumented
code is located outside the kernel code section, so dynamic ftrace can
still be used, albeit in a more limited scope. This is still
preferable to corrupting memory and/or crashing the kernel.

Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2026-01-08 10:14:13 +01:00
..
alchemy MIPS: Remove unused function dump_au1000_dma_channel() in dma.c 2024-08-29 10:38:18 +02:00
ath25 MIPS: ath25: Constify static irq_domain_ops 2022-02-22 09:39:03 +01:00
ath79 MIPS: ath79: remove obsolete ATH79_DEV_* configs 2023-03-17 10:28:04 +01:00
bcm47xx mips: bmips: setup: make CBR address configurable 2024-06-27 10:44:32 +02:00
bcm63xx gpiolib: legacy: Kill GPIOF_INIT_* definitions 2024-09-02 11:47:06 +02:00
bmips mips: bmips: setup: make CBR address configurable 2024-06-27 10:44:32 +02:00
boot mips: lantiq: danube: rename stp node on EASY50712 reference board 2025-11-13 15:34:17 -05:00
cavium-octeon Just cleanups and fixes 2024-01-17 11:20:50 -08:00
cobalt MIPS: Cobalt: Fix missing prototypes 2024-01-22 10:32:21 +01:00
configs mips: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM 2024-09-10 00:36:52 +02:00
crypto lib/crypto: mips/chacha: Fix clang build and remove unneeded byteswap 2025-08-28 16:30:55 +02:00
dec MIPS: dec: Declare which_prom() as static 2025-04-25 10:48:06 +02:00
fw MIPS: fw arc: Fix missing prototypes 2024-01-22 11:12:01 +01:00
generic mips: generic: add fdt fixup for Realtek reference board 2024-07-12 13:12:13 +02:00
include MIPS: vpe-mt: add missing prototypes for vpe_{alloc,start,stop,free} 2025-08-20 18:30:42 +02:00
ingenic MIPS: Kconfig: ingenic: Ensure MACH_INGENIC_GENERIC selects all SoCs 2021-06-01 11:44:47 +02:00
jazz mips/jazz: remove unused jazz_handle_int() declaration 2024-08-29 10:39:00 +02:00
kernel MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 bits 2026-01-08 10:14:13 +01:00
kvm KVM: MIPS: Rename virtualization {en,dis}abling APIs to match common KVM 2024-09-04 11:02:33 -04:00
lantiq mips: lantiq: xway: sysctrl: rename stp clock 2025-11-13 15:34:17 -05:00
lib mips: implement xor_unlock_is_negative_byte 2023-10-18 14:34:17 -07:00
loongson2ef MIPS: Fix typos 2024-01-08 10:39:12 +01:00
loongson32 MIPS: loongson32: Remove dma.h and nand.h 2023-10-06 10:10:13 +02:00
loongson64 MIPS: Loongson64: remove ROM Size unit in boardinfo 2025-02-17 10:05:18 +01:00
math-emu mips/math-emu: fix emulation of the prefx instruction 2025-02-17 10:05:19 +01:00
mm MIPS: mm: kmalloc tlb_vpn array to avoid stack overflow 2025-12-07 06:24:58 +09:00
mobileye MIPS: mobileye: Add EyeQ6H support 2024-06-11 10:15:50 +02:00
mti-malta MIPS: Malta: Fix !EVA SOC-it PCI MMIO 2025-12-01 11:43:24 +01:00
n64 mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
net bpf: Take return from set_memory_rox() into account with bpf_jit_binary_lock_ro() 2024-03-14 19:28:52 -07:00
pci MIPS: pci-legacy: Override pci_address_to_pio 2025-02-17 10:05:19 +01:00
pic32 MIPS: Fixup explicit DT include clean-up 2023-07-28 11:41:09 +02:00
power mips: suspend: include linux/suspend.h as needed 2023-12-10 17:21:41 -08:00
ralink MIPS: ralink: Fix missing get_c0_perfcount_int prototype 2024-08-29 10:29:28 +02:00
rb532 MIPS: RB532: Declare prom_setup_cmdline() and rb532_gpio_init() static 2024-04-15 10:21:52 +02:00
sgi-ip22 MIPS: Fix a reference leak bug in ip22_check_gio() 2026-01-08 10:14:04 +01:00
sgi-ip27 arch, mm: move definition of node_data to generic code 2024-09-03 21:15:28 -07:00
sgi-ip30 MIPS: ip30: ip30-console: Add missing include 2024-06-19 13:09:35 +02:00
sgi-ip32 MIPS: sgi-ip32: Fix missing prototypes 2024-01-22 11:12:19 +01:00
sibyte mips: sibyte: add missing MODULE_DESCRIPTION() macro 2024-07-23 09:47:40 +02:00
sni vgacon: clean up global screen_info instances 2023-10-17 10:17:02 +02:00
tools MIPS: fix typos in comments 2022-05-04 22:22:59 +02:00
txx9 mips: txx9: make txx9_sramc_subsys const 2024-02-20 13:36:34 +01:00
vdso mips: Add -std= flag specified in KBUILD_CFLAGS to vdso CFLAGS 2025-06-27 11:11:24 +01:00
Kbuild MIPS: Share generic kernel code with other architecture 2024-02-20 13:36:25 +01:00
Kbuild.platforms MIPS: mobileye: Add EyeQ6H support 2024-06-11 10:15:50 +02:00
Kconfig Revert "MIPS: csrc-r4k: Select HAVE_UNSTABLE_SCHED_CLOCK if SMP && 64BIT" 2025-02-17 10:05:19 +01:00
Kconfig.debug tracing: Refactor TRACE_IRQFLAGS_SUPPORT in Kconfig 2021-08-16 11:37:21 -04:00
Makefile MIPS: Fix fallback march for SB1 2024-07-15 18:16:23 +02:00
Makefile.postlink kbuild: remove ARCH_POSTLINK from module builds 2023-10-28 21:10:08 +09:00