linux/arch/mips
Maciej W. Rozycki 1c80327ded MIPS: DEC: Prevent initial console buffer from landing in XKPHYS
commit 7fb13fd351 upstream.

In 64-bit configurations calling the initial console output handler from
a kernel thread other than the initial one will result in a situation
where the stack has been placed in the XKPHYS 64-bit memory segment and
consequently so has been the buffer allocated there that is used as the
argument corresponding to the `%s' output conversion specifier for the
firmware's printf() entry point.

This 64-bit address will then be truncated by 32-bit firmware, resulting
in an attempt to access the wrong memory location, which in turn will
cause all kinds of unpredictable behaviour, such as a kernel crash:

  Console: colour dummy device 160x64
  Calibrating delay loop... 49.36 BogoMIPS (lpj=192512)
  pid_max: default: 32768 minimum: 301
  CPU 0 Unable to handle kernel paging request at virtual address 000000000203bd00, epc == ffffffffbfc08364, ra == ffffffffbfc08800
  Oops[#1]:
  CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc2-00254-gfb649bda6f56-dirty #121
  $ 0   : 0000000000000000 0000000000000001 0000000000000023 ffffffff80684ba0
  $ 4   : 000000000203bd00 ffffffffbfc0f3b4 ffffffffffffffff 0000000000000073
  $ 8   : 0a303d7469000000 0000000000000000 0000000000000073 ffffffffbfc0f473
  $12   : 0000000000000002 0000000000000000 ffffffff80684c1c 0000000000000000
  $16   : 0000000000000000 ffffffff80596dc9 0000000000000000 ffffffffbfc09240
  $20   : ffffffff80684c40 ffffffffbfc0f400 000000000000002d 000000000000002b
  $24   : ffffffffffffffbf 000000000203bd00
  $28   : ffffffff805f0000 ffffffff80684b58 0000000000000030 ffffffffbfc08800
  Hi    : 0000000000000000
  Lo    : 0000000000000aa8
  epc   : ffffffffbfc08364 0xffffffffbfc08364
  ra    : ffffffffbfc08800 0xffffffffbfc08800
  Status: 140120e2        KX SX UX KERNEL EXL
  Cause : 00000008 (ExcCode 02)
  BadVA : 000000000203bd00
  PrId  : 00000430 (R4000SC)
  Modules linked in:
  Process swapper (pid: 0, threadinfo=(____ptrval____), task=(____ptrval____), tls=0000000000000000)
  Stack : 0000000000000000 0000000000000000 0000000000000000 0000004d0000004d
          80684cc0806a2a40 80596dc80000004d 8061000000000000 bfc0850c80684c38
          0000000000000000 000000000203bd00 0000000000000000 0000000000000000
          0000000000000000 00000000bfc0f3b4 0000000000000000 0000000000000000
          0000000000000000 0000000000000000 0000000000000000 0000000000000000
          0000000000000000 0000000000000000 0000000000000000 0000000000000000
          0000002500000000 0000000000000000 0000000000000000 802c1a7400000000
          0203bd0080596dc8 0203bd4d69000000 6c61632000000018 5f746567646e6172
          6c616320625f6d6f 5f736e5f6d6f7266 206361323778302b 303d74696e726320
          806a0a38806b0000 806a0a38806b0000 00000000806b0000 80683c58806b0000
          ...
  Call Trace:

  Code: a082ffff  03e00008  00601021 <80820000> 00001821  10400005  24840001  80820000  24630001

  ---[ end trace 0000000000000000 ]---
  Kernel panic - not syncing: Fatal exception in interrupt

  KN04 V2.1k    (PC: 0xa0026768, SP: 0x806848e8)
  >>

In this case the pointer in $4 was truncated from 0x980000000203bd00 to
0x000000000203bd00.

This may happen when no final console driver has been enabled in the
configuration and consequently the initial console continues being used
late into bootstrap or with an upcoming change that will switch the zs
driver to use a platform device, which in turn will make the console
handover happen only after other kernel threads have already been
started.

Fix the issue by making the buffer static and initdata, and therefore
placed in the CKSEG0 32-bit compatibility segment, observing that the
console output handler is called with the console lock held, implying
no need for this code to be reentrant.  Add an assertion to verify the
buffer actually has been placed in a compatibility segment.

Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Cc: stable@vger.kernel.org # v2.6.12+
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-07-04 13:39:39 +02:00
..
alchemy MIPS: Alchemy: Fix an out-of-bound access in db1550_dev_setup() 2024-01-25 14:52:50 -08:00
ar7 mips: ar7: convert to CONFIG_COMMON_CLK 2021-06-08 17:00:09 +02:00
ath25 mips: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:40 +01:00
ath79 MIPS: of: Introduce helper function to get DTB 2021-02-04 13:34:51 +01:00
bcm47xx MIPS: BCM47XX: Cast memcmp() of function to (void *) 2022-10-26 12:35:30 +02:00
bcm63xx MIPS: BCM63xx: Add check for NULL for clk in clk_enable 2022-12-31 13:14:05 +01:00
bmips mips: bmips: BCM6358: make sure CBR is correctly set 2024-07-05 09:14:29 +02:00
boot mips: lantiq: danube: add missing device_type in pci node 2025-12-07 06:09:20 +09:00
cavium-octeon MIPS: OCTEON: warn only once if deprecated link status is being used 2022-12-31 13:14:05 +01:00
cobalt MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
configs Remove DECnet support from kernel 2023-06-21 15:59:15 +02:00
crypto lib/crypto: mips/chacha: Fix clang build and remove unneeded byteswap 2025-08-28 16:24:27 +02:00
dec MIPS: DEC: Prevent initial console buffer from landing in XKPHYS 2026-07-04 13:39:39 +02:00
fw MIPS: fw: Allow firmware to pass a empty env 2023-05-11 23:00:17 +09:00
generic MIPS: generic/yamon-dt: fix uninitialized variable error 2021-11-25 09:48:36 +01:00
include MIPS: Always record SEGBITS in cpu_data.vmbits 2026-06-01 17:35:03 +02:00
ingenic MIPS: Kconfig: ingenic: Ensure MACH_INGENIC_GENERIC selects all SoCs 2021-06-01 11:44:47 +02:00
jazz MIPS/jazzdma: return error code from jazz_dma_map_sg() 2021-08-09 17:13:05 +02:00
kernel MIPS: Always record SEGBITS in cpu_data.vmbits 2026-06-01 17:35:03 +02:00
kvm MIPS: KVM: Fix a build warning about variable set but not used 2023-12-03 07:31:23 +01:00
lantiq mips: lantiq: xway: sysctrl: rename stp clock 2025-12-07 06:09:20 +09:00
lib MIPS: Fix the GCC version check for `__multi3' workaround 2026-04-18 10:33:32 +02:00
loongson2ef MIPS: Prefer cc-option for additions to cflags 2025-06-27 11:05:21 +01:00
loongson32 MIPS: Loongson32: Fix PHY-mode being left unspecified 2022-09-28 11:11:48 +02:00
loongson64 Makefile.compiler: replace cc-ifversion with compiler-specific macros 2025-12-07 06:09:32 +09:00
math-emu mips/math-emu: fix emulation of the prefx instruction 2025-03-13 12:50:28 +01:00
mm MIPS: mm: Rewrite TLB uniquification for the hidden bit feature 2026-06-01 17:35:04 +02:00
mti-malta MIPS: Malta: Fix !EVA SOC-it PCI MMIO 2025-12-07 06:09:31 +09:00
n64 mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
net bpf, mips: Validate conditional branch offsets 2021-09-15 21:38:16 +02:00
netlogic mips: netlogic: fix kernel-doc complaints in fmn-config.c 2021-07-22 11:48:06 +02:00
pci MIPS: Octeron: remove source file executable bit 2024-08-19 05:45:06 +02:00
pic32 MIPS: pic32: treat port as signed integer 2022-12-02 17:41:02 +01:00
power mips: check for dsp presence only once before save/restore 2019-10-07 10:58:53 -07:00
ralink mips: ralink: mt7621: do not use kzalloc too early 2022-12-31 13:14:04 +01:00
rb532 MIPS: rb532: Fix MMIO UART resource registration 2026-03-04 07:20:35 -05:00
sgi-ip22 bus: Make remove callback return void 2021-07-21 11:53:42 +02:00
sgi-ip27 memblock: allow to specify flags with memblock_add_node() 2023-12-20 15:17:33 +01:00
sgi-ip30 MIPS: ip30: ip30-console: Add missing include 2024-08-19 05:45:21 +02:00
sgi-ip32 kernel.h: split out panic and oops helpers 2021-07-01 11:06:04 -07:00
sibyte MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
sni MIPS: sni: Fix the build 2021-11-25 09:48:28 +01:00
tools MIPS: tools: Fix resource leak in elf-entry.c 2020-05-24 09:29:48 +02:00
txx9 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
vdso mips: Add -std= flag specified in KBUILD_CFLAGS to vdso CFLAGS 2025-06-27 11:05:27 +01:00
vr41xx MIPS: Remove repetitive increase irq_err_count 2022-06-29 09:03:24 +02:00
Kbuild MIPS: Fix "make clean" error due to recent changes 2020-05-13 13:20:22 +02:00
Kbuild.platforms MIPS: fix duplicated slashes for Platform file path 2021-11-18 19:17:14 +01:00
Kconfig MIPS: Loongson64: Enable DMA noncoherent support 2023-12-13 18:36:50 +01:00
Kconfig.debug tracing: Refactor TRACE_IRQFLAGS_SUPPORT in Kconfig 2021-08-16 11:37:21 -04:00
Makefile mips: Include KBUILD_CPPFLAGS in CHECKFLAGS invocation 2025-06-27 11:05:21 +01:00
Makefile.postlink MIPS: fix indentation of the 'RELOCS' message 2020-01-20 15:37:30 -08:00