linux-uconsole/arch/mips
Nick Desaulniers 1499054da8 mips: avoid explicit UB in assignment of mips_io_port_base
[ Upstream commit 12051b318b ]

The code in question is modifying a variable declared const through
pointer manipulation.  Such code is explicitly undefined behavior, and
is the lone issue preventing malta_defconfig from booting when built
with Clang:

If an attempt is made to modify an object defined with a const-qualified
type through use of an lvalue with non-const-qualified type, the
behavior is undefined.

LLVM is removing such assignments. A simple fix is to not declare
variables const that you plan on modifying.  Limiting the scope would be
a better method of preventing unwanted writes to such a variable.

Further, the code in question mentions "compiler bugs" without any links
to bug reports, so it is difficult to know if the issue is resolved in
GCC. The patch was authored in 2006, which would have been GCC 4.0.3 or
4.1.1. The minimal supported version of GCC in the Linux kernel is
currently 4.6.

For what its worth, there was UB before the commit in question, it just
added a barrier and got lucky IRT codegen. I don't think there's any
actual compiler bugs related, just runtime bugs due to UB.

Link: https://github.com/ClangBuiltLinux/linux/issues/610
Fixes: 966f4406d9 ("[MIPS] Work around bad code generation for <asm/io.h>.")
Reported-by: Nathan Chancellor <natechancellor@gmail.com>
Debugged-by: Nathan Chancellor <natechancellor@gmail.com>
Suggested-by: Eli Friedman <efriedma@quicinc.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Tested-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: ralf@linux-mips.org
Cc: jhogan@kernel.org
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: Hassan Naveed <hnaveed@wavecomp.com>
Cc: Stephen Kitt <steve@sk2.org>
Cc: Serge Semin <fancer.lancer@gmail.com>
Cc: Mike Rapoport <rppt@linux.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: linux-mips@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: clang-built-linux@googlegroups.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-01-27 14:51:07 +01:00
..
alchemy mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
ar7 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
ath25 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
ath79 Revert "MIPS: perf: ath79: Fix perfcount IRQ assignment" 2019-06-11 12:20:53 +02:00
bcm47xx MIPS: BCM47XX: Enable USB power on Netgear WNDR3400v3 2019-11-20 18:45:35 +01:00
bcm63xx MIPS: BCM63XX: drop unused and broken DSP platform device 2020-01-27 14:50:10 +01:00
bmips MIPS: bmips: remove unnecessary call to register "simple-bus" 2018-06-24 09:27:27 -07:00
boot MIPS: Prevent link failure with kcov instrumentation 2020-01-17 19:47:15 +01:00
cavium-octeon MIPS: OCTEON: cvmx_pko_mem_debug8: use oldest forward compatible definition 2019-12-13 08:52:26 +01:00
cobalt
configs USB: rio500: Remove Rio 500 kernel driver 2019-10-17 13:44:47 -07:00
crypto MIPS: crypto: Add crc32 and crc32c hw accelerated module 2018-02-19 20:50:36 +00:00
dec MIPS: Convert update_persistent_clock() to update_persistent_clock64() 2018-05-14 23:58:23 +01:00
emma
fw MIPS: fw: sni: Fix out of bounds init of o32 stack 2019-11-06 13:06:04 +01:00
generic MIPS: Remove obsolete MIPS checks for DST node "chosen@0" 2018-08-06 09:50:33 -07:00
include mips: avoid explicit UB in assignment of mips_io_port_base 2020-01-27 14:51:07 +01:00
jazz MIPS: jazz: fix 64bit build 2019-02-27 10:08:53 +01:00
jz4740 MIPS: lb60: Fix pin mappings 2019-07-28 08:29:28 +02:00
kernel mips: avoid explicit UB in assignment of mips_io_port_base 2020-01-27 14:51:07 +01:00
kvm KVM: s390: Do not report unusabled IDs via KVM_CAP_MAX_VCPU_ID 2019-06-09 09:17:18 +02:00
lantiq MIPS: lantiq: Fix bitfield masking 2019-08-06 19:06:48 +02:00
lasat kbuild: rename LDFLAGS to KBUILD_LDFLAGS 2018-08-24 08:22:08 +09:00
lib MIPS: memset: Fix CPU_DADDI_WORKAROUNDS `small_fixup' regression 2018-10-05 09:41:39 -07:00
loongson32 MIPS: Loongson: Merge load addresses 2018-07-30 18:59:01 -07:00
loongson64 mips: Loongson: Fix the link time qualifier of 'serial_exit()' 2019-10-29 09:19:35 +01:00
math-emu MIPS: math-emu: Write-protect delay slot emulation pages 2019-01-09 17:38:47 +01:00
mm MIPS: tlbex: Fix build_restore_pagemask KScratch restore 2019-10-29 09:19:47 +01:00
mti-malta MIPS: Malta: Use PIIX4 poweroff driver to power down 2018-06-24 09:27:27 -07:00
net bpf, mips: Limit to 33 tail calls 2020-01-12 12:17:12 +01:00
netlogic mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
oprofile MIPS: perf: More robustly probe for the presence of per-tc counters 2018-05-15 15:16:16 +01:00
paravirt mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
pci MIPS: OCTEON: don't set octeon_dma_bar_type if PCI is disabled 2019-02-15 08:10:11 +01:00
pic32 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
pistachio MIPS: pistachio: Build uImage.gz by default 2019-06-11 12:20:53 +02:00
pmcs-msp71xx
pnx833x
power
ralink MIPS: ralink: Select CONFIG_CPU_MIPSR2_IRQ_VI on MT7620/8 2019-02-12 19:47:17 +01:00
rb532
sgi-ip22
sgi-ip27 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
sgi-ip32 MIPS: IP32: use generic dma noncoherent ops 2018-06-24 09:27:27 -07:00
sibyte MIPS: SiByte: Enable swiotlb for SWARM, LittleSur and BigSur 2019-01-26 09:32:35 +01:00
sni MIPS: sni: Remove the read_persistent_clock() 2018-05-14 23:58:25 +01:00
tools
txx9 mips: txx9: fix iounmap related issue 2019-11-20 18:46:04 +01:00
vdso MIPS: Disable Loongson MMI instructions for kernel build 2019-10-17 13:45:31 -07:00
vr41xx MIPS: Annotate cpu_wait implementations with __cpuidle 2018-06-28 14:18:54 -07:00
Kbuild
Kbuild.platforms
Kconfig MIPS: SiByte: Enable ZONE_DMA32 for LittleSur 2019-12-13 08:51:20 +01:00
Kconfig.debug Kconfig: consolidate the "Kernel hacking" menu 2018-08-02 08:06:48 +09:00
Makefile MIPS: have "plain" make calls build dtbs for selected platforms 2019-07-10 09:53:48 +02:00
Makefile.postlink