android_kernel_motorola_sm6225/arch/powerpc/kernel
Russell Currey 075a4dcdbc powerpc/iommu: Fix notifiers being shared by PCI and VIO buses
[ Upstream commit c37b6908f7b2bd24dcaaf14a180e28c9132b9c58 ]

fail_iommu_setup() registers the fail_iommu_bus_notifier struct to both
PCI and VIO buses.  struct notifier_block is a linked list node, so this
causes any notifiers later registered to either bus type to also be
registered to the other since they share the same node.

This causes issues in (at least) the vgaarb code, which registers a
notifier for PCI buses.  pci_notify() ends up being called on a vio
device, converted with to_pci_dev() even though it's not a PCI device,
and finally makes a bad access in vga_arbiter_add_pci_device() as
discovered with KASAN:

 BUG: KASAN: slab-out-of-bounds in vga_arbiter_add_pci_device+0x60/0xe00
 Read of size 4 at addr c000000264c26fdc by task swapper/0/1

 Call Trace:
   dump_stack_lvl+0x1bc/0x2b8 (unreliable)
   print_report+0x3f4/0xc60
   kasan_report+0x244/0x698
   __asan_load4+0xe8/0x250
   vga_arbiter_add_pci_device+0x60/0xe00
   pci_notify+0x88/0x444
   notifier_call_chain+0x104/0x320
   blocking_notifier_call_chain+0xa0/0x140
   device_add+0xac8/0x1d30
   device_register+0x58/0x80
   vio_register_device_node+0x9ac/0xce0
   vio_bus_scan_register_devices+0xc4/0x13c
   __machine_initcall_pseries_vio_device_init+0x94/0xf0
   do_one_initcall+0x12c/0xaa8
   kernel_init_freeable+0xa48/0xba8
   kernel_init+0x64/0x400
   ret_from_kernel_thread+0x5c/0x64

Fix this by creating separate notifier_block structs for each bus type.

Fixes: d6b9a81b2a ("powerpc: IOMMU fault injection")
Reported-by: Nageswara R Sastry <rnsastry@linux.ibm.com>
Signed-off-by: Russell Currey <ruscur@russell.cc>
Tested-by: Nageswara R Sastry <rnsastry@linux.ibm.com>
Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>
[mpe: Add #ifdef to fix CONFIG_IBMVIO=n build]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230322035322.328709-1-ruscur@russell.cc
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-09-23 10:48:06 +02:00
..
trace powerpc: consolidate -mno-sched-epilog into FTRACE flags 2019-01-13 09:51:05 +01:00
vdso32 powerpc: Fix vDSO clock_getres() 2019-12-17 20:35:40 +01:00
vdso64 powerpc: Fix vDSO clock_getres() 2019-12-17 20:35:40 +01:00
.gitignore
align.c powerpc/sstep: Introduce GETTYPE macro 2018-06-03 21:19:40 +10:00
asm-offsets.c powerpc/32: add stack protector support 2023-08-30 16:31:52 +02:00
audit.c
btext.c powerpc/btext: add missing of_node_put 2022-01-27 09:04:28 +01:00
cacheinfo.c powerpc/cacheinfo: add cacheinfo_teardown, cacheinfo_rebuild 2020-01-27 14:50:55 +01:00
cacheinfo.h powerpc/cacheinfo: add cacheinfo_teardown, cacheinfo_rebuild 2020-01-27 14:50:55 +01:00
compat_audit.c
cpu_setup_6xx.S powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
cpu_setup_44x.S
cpu_setup_fsl_booke.S powerpc/mm: move platform specific mmu-xxx.h in platform directories 2023-08-30 16:31:44 +02:00
cpu_setup_pa6t.S
cpu_setup_power.S powerpc/64s: Don't init FSCR_DSCR in __init_FSCR() 2020-09-03 11:24:16 +02:00
cpu_setup_ppc970.S
cputable.c powerpc: fix hardware PMU exception bug on PowerVM compatibility mode systems 2020-03-11 14:15:12 +01:00
crash.c powerpc: remove kdump.h from page.h 2018-07-30 22:47:53 +10:00
crash_dump.c
dbell.c KVM: PPC: Book3S HV: use smp_mb() when setting/clearing host_ipi flag 2020-01-09 10:19:08 +01:00
dma-iommu.c powerpc/dma: Fix dma_map_ops::get_required_mask 2020-09-23 12:11:02 +02:00
dma-swiotlb.c
dma.c PCI: Call dma_debug_add_bus() for pci_bus_type from PCI core 2018-07-30 15:58:01 -05:00
dt_cpu_ftrs.c powerpc/64s: Don't let DT CPU features set FSCR_DSCR 2020-06-22 09:05:29 +02:00
eeh.c powerpc/eeh: Fix EEH handling for hugepages in ioremap space. 2021-05-22 10:59:20 +02:00
eeh_cache.c powerpc/eeh: Fix misleading comment in __eeh_addr_cache_get_device() 2018-03-27 23:44:58 +11:00
eeh_dev.c
eeh_driver.c powerpc/powernv/iov: Ensure the pdn for VFs always contains a valid PE number 2020-02-24 08:34:36 +01:00
eeh_event.c powerpc/eeh: Manage EEH_PE_RECOVERING inside eeh_handle_normal_event() 2018-03-27 23:44:58 +11:00
eeh_pe.c powerpc/eeh: Fix use of EEH_PE_KEEP on wrong field 2019-12-01 09:16:18 +01:00
eeh_sysfs.c
entry_32.S powerpc/32: Clear on-stack exception marker upon exception return 2019-03-23 20:10:07 +01:00
entry_64.S powerpc/book3s64: Fix link stack flush on context switch 2019-12-01 09:17:46 +01:00
epapr_hcalls.S
epapr_paravirt.c
exceptions-64e.S powerpc/fsl: Fix the flush of branch predictor. 2019-04-03 06:26:20 +02:00
exceptions-64s.S powerpc/64s: flush L1D after user accesses 2020-11-22 10:02:26 +01:00
fadump.c powerpc/fadump: Do not allow hot-remove memory from fadump reserved area. 2019-02-12 19:47:16 +01:00
firmware.c
fpu.S powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
fsl_booke_entry_mapping.S
head_8xx.S powerpc/8xx: Fix software emulation interrupt 2021-03-04 09:39:47 +01:00
head_32.S powerpc/32s: Fix assembler warning about r0 2023-09-23 10:47:59 +02:00
head_40x.S powerpc/405: move PPC405_ERR77 in asm-405.h 2018-07-30 22:48:13 +10:00
head_44x.S
head_64.S powerpc/64: Set up a kernel stack for secondaries before cpu_restore() 2020-12-30 11:25:51 +01:00
head_booke.h powerpc/fsl: Fixed warning: orphan section `__btb_flush_fixup' 2019-04-03 06:26:20 +02:00
head_fsl_booke.S powerpc/fsl: Flush the branch predictor at each kernel entry (32 bit) 2019-04-03 06:26:20 +02:00
hw_breakpoint.c perf/arch/powerpc: Implement hw_breakpoint_arch_parse() 2018-06-26 09:07:55 +02:00
idle.c powerpc/idle: Fix return value of __setup() handler 2022-06-14 16:59:24 +02:00
idle_6xx.S powerpc/mm: Switch obsolete dssall to .long 2022-06-25 11:49:17 +02:00
idle_book3e.S powerpc/64s: make PACA_IRQ_HARD_DIS track MSR[EE] closely 2018-07-24 22:03:14 +10:00
idle_book3s.S powerpc/powernv/idle: Restore AMR/UAMOR/AMOR after idle 2020-04-17 10:48:53 +02:00
idle_e500.S powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
idle_power4.S powerpc/64s: Fix PACA_IRQ_HARD_DIS accounting in idle_power4() 2018-08-14 15:36:02 +10:00
ima_kexec.c
io-workarounds.c
io.c
iomap.c powerpc: iomap.c: introduce io{read|write}64_{lo_hi|hi_lo} 2018-04-05 14:59:26 +10:00
iommu.c powerpc/iommu: Fix notifiers being shared by PCI and VIO buses 2023-09-23 10:48:06 +02:00
irq.c powerpc/irq: fix stack overflow verification 2019-12-31 16:36:32 +01:00
isa-bridge.c
jump_label.c jump_label: move 'asm goto' support test to Kconfig 2019-06-04 08:02:34 +02:00
kexec_elf_64.c kernel/kexec_file.c: allow archs to set purgatory load address 2018-04-13 17:10:28 -07:00
kgdb.c powerpc/kgdb: add kgdb_arch_set/remove_breakpoint() 2020-01-27 14:50:00 +01:00
kprobes-ftrace.c bpf/error-inject/kprobes: Clear current_kprobe and enable preempt in kprobe 2018-06-21 12:33:19 +02:00
kprobes.c powerpc/kprobes: Fix kprobe Oops happens in booke 2021-08-26 08:36:39 -04:00
kvm.c powerpc/kvm: Fix kvm_use_magic_page 2022-04-15 14:14:40 +02:00
kvm_emul.S powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
l2cr_6xx.S powerpc/mm: Switch obsolete dssall to .long 2022-06-25 11:49:17 +02:00
legacy_serial.c powerpc: Look for "stdout-path" when setting up legacy consoles 2018-12-19 19:19:52 +01:00
machine_kexec.c powerpc: Set crashkernel offset to mid of RMA region 2022-04-15 14:15:01 +02:00
machine_kexec_32.c
machine_kexec_64.c powerpc/64/kexec: fix race in kexec when XIVE is shutdown 2018-05-10 23:25:08 +10:00
machine_kexec_file_64.c powerpc/kexec: Use common error handling code in setup_new_fdt() 2018-08-10 22:12:36 +10:00
Makefile powerpc/32: add stack protector support 2023-08-30 16:31:52 +02:00
mce.c powerpc/mce: Schedule work from irq_work 2019-10-11 18:20:49 +02:00
mce_power.c powerpc/mm/mce: Keep irqs disabled during lockless page table walk 2020-01-27 14:51:14 +01:00
misc.S powerpc/misc: merge reloc_offset() and add_reloc_offset() 2018-06-04 00:39:17 +10:00
misc_32.S powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
misc_64.S powerpc: Allow flush_icache_range to work across ranges >4GB 2019-12-17 20:35:16 +01:00
module.c powerpc64/module elfv1: Set opd addresses after module relocation 2018-11-13 11:08:50 -08:00
module.lds
module_32.c powerpc/sparse: Fix plain integer as NULL pointer warning 2018-05-25 12:04:38 +10:00
module_64.c powerpc/module64: Fix comment in R_PPC64_ENTRY handling 2021-09-22 11:47:47 +02:00
msi.c powerpc/msi: Fix NULL pointer access in teardown code 2018-12-19 19:19:52 +01:00
nvram_64.c pstore: Convert buf_lock to semaphore 2019-06-11 12:20:52 +02:00
of_platform.c
optprobes.c
optprobes_head.S
paca.c Merge branch 'topic/paca' into next 2018-03-31 09:09:36 +11:00
pci-common.c powerpc/pci: Fix get_phb_number() locking 2022-08-25 11:15:41 +02:00
pci-hotplug.c
pci_32.c powerpc: Remove -Wattribute-alias pragmas 2018-06-25 23:21:13 +09:00
pci_64.c powerpc: Remove -Wattribute-alias pragmas 2018-06-25 23:21:13 +09:00
pci_dn.c powerpc/pci_dn: Add missing of_node_put() 2022-10-26 13:19:34 +02:00
pci_of_scan.c powerpc/pci/of: Parse unassigned resources 2020-05-10 10:30:06 +02:00
pmc.c
ppc32.h
ppc_save_regs.S powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
proc_powerpc.c
process.c powerpc: Enable execve syscall exit tracepoint 2022-07-02 16:27:36 +02:00
prom.c powerpc/64: Init jump labels before parse_early_param() 2022-08-25 11:15:47 +02:00
prom_init.c powerpc/prom_init: Fix improper check of prom_getprop() 2022-01-27 09:04:22 +01:00
prom_init_check.sh powerpc/mm/radix: Update command line parsing for disable_radix 2018-04-04 16:59:50 +10:00
prom_parse.c
ptrace.c powerpc/32: Fix overread/overwrite of thread_struct via ptrace 2022-06-14 16:59:39 +02:00
ptrace32.c
reloc_32.S
reloc_64.S
rtas-proc.c powerpc updates for 4.18 2018-06-07 10:23:33 -07:00
rtas-rtc.c powerpc: use time64_t in read_persistent_clock 2018-06-03 20:43:33 +10:00
rtas.c powerpc/rtas: use memmove for potentially overlapping buffer copy 2023-05-17 11:13:18 +02:00
rtas_flash.c powerpc/rtas_flash: allow user copy to flash block cache objects 2023-08-30 16:31:47 +02:00
rtas_pci.c
rtasd.c powerpc/pseries: Remove prrn_work workqueue 2019-04-20 09:16:01 +02:00
security.c powerpc/security: Add a helper to query stf_barrier type 2021-11-26 11:36:17 +01:00
setup-common.c powerpc/64: Set up a kernel stack for secondaries before cpu_restore() 2020-12-30 11:25:51 +01:00
setup.h powerpc/tau: Synchronize function prototypes and body 2018-05-25 12:04:43 +10:00
setup_32.c powerpc/32: Include setup.h header file to fix warnings 2018-08-10 22:12:38 +10:00
setup_64.c powerpc/64s: flush L1D after user accesses 2020-11-22 10:02:26 +01:00
signal.c powerpc/tm: Fix clearing MSR[TS] in current when reclaiming on signal delivery 2020-02-28 16:38:48 +01:00
signal.h powerpc/syscalls: signal_{32, 64} - switch to SYSCALL_DEFINE 2018-05-10 23:25:13 +10:00
signal_32.c powerpc/tm: Fix clearing MSR[TS] in current when reclaiming on signal delivery 2020-02-28 16:38:48 +01:00
signal_64.c powerpc/64/tm: Don't let userspace set regs->trap via sigreturn 2020-04-17 10:48:53 +02:00
smp-tbsync.c
smp.c powerpc: handle kdump appropriately with crash_kexec_post_notifiers option 2022-01-27 09:04:29 +01:00
stacktrace.c powerpc/stacktrace: Include linux/delay.h 2021-09-22 11:48:01 +02:00
suspend.c
swsusp.c
swsusp_32.S powerpc/mm: Switch obsolete dssall to .long 2022-06-25 11:49:17 +02:00
swsusp_64.c
swsusp_asm64.S powerpc/mm: Switch obsolete dssall to .long 2022-06-25 11:49:17 +02:00
swsusp_booke.S
sys_ppc32.c powerpc/syscalls: kill ppc32_select() 2018-05-10 23:25:15 +10:00
syscalls.c powerpc: Remove -Wattribute-alias pragmas 2018-06-25 23:21:13 +09:00
sysfs.c powerpc: Warn about use of smt_snooze_delay 2020-11-05 11:08:51 +01:00
systbl.S powerpc/syscalls: Add COMPAT_SPU_NEW() macro 2018-05-10 23:25:14 +10:00
systbl_chk.c powerpc/syscalls: Add COMPAT_SPU_NEW() macro 2018-05-10 23:25:14 +10:00
systbl_chk.sh powerpc: Make it clearer that systbl check errors are errors 2018-05-10 23:25:16 +10:00
tau_6xx.c powerpc/tau: Disable TAU between measurements 2020-10-30 10:38:19 +01:00
time.c Revert "powerpc/64: irq_work avoid interrupt when called with hardware irqs enabled" 2020-04-29 16:31:14 +02:00
tm.S powerpc/tm: Avoid possible userspace r1 corruption on reclaim 2018-09-25 22:51:32 +10:00
traps.c exit: Add and use make_task_dead. 2023-02-06 07:49:45 +01:00
udbg.c
udbg_16550.c
uprobes.c
vdso.c powerpc/vdso: Fix vdso cpu truncation 2020-08-19 08:14:57 +02:00
vecemu.c powerpc: Add a missing include header 2018-05-25 12:04:46 +10:00
vector.S powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
vmlinux.lds.S powerpc/32: Include .branch_lt in data section 2023-09-23 10:47:59 +02:00
watchdog.c powerpc/watchdog: Fix missed watchdog reset due to memory ordering race 2022-01-27 09:04:29 +01:00