linux_dsm_epyc7002/arch/s390/kernel
Sven Schnelle 17248ea036 s390: fix __EMIT_BUG() macro
Setting a kprobe on getname_flags() failed:

$ echo 'p:tmr1 getname_flags +0(%r2):ustring' > kprobe_events
-bash: echo: write error: Invalid argument

Debugging the kprobes code showed that the address of
getname_flags() is contained in the __bug_table. Kprobes
doesn't allow to set probes at BUG() locations.

$ objdump -j  __bug_table -x build/fs/namei.o
[..]
0000000000000108 R_390_PC32        .text+0x00000000000075a8
000000000000010c R_390_PC32        .L223+0x0000000000000004

I was expecting getname_flags() to start with a BUG(), but:

7598:       e3 20 10 00 00 04       lg      %r2,0(%r1)
759e:       c0 f4 00 00 00 00       jg      759e <putname+0x7e>
75a0: R_390_PLT32DBL    kmem_cache_free+0x2
75a4:       a7 f4 00 01             j       75a6 <putname+0x86>

00000000000075a8 <getname_flags>:
75a8:       c0 04 00 00 00 00       brcl    0,75a8 <getname_flags>
75ae:       eb 6f f0 48 00 24       stmg    %r6,%r15,72(%r15)
75b4:       b9 04 00 ef             lgr     %r14,%r15
75b8:       e3 f0 ff a8 ff 71       lay     %r15,-88(%r15)

So the BUG() is actually the last opcode of the previous function.
Fix this by switching to using the MONITOR CALL (MC) instruction,
and set the entry in __bug_table to the beginning of that MC.

Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
2020-01-22 13:05:35 +01:00
..
syscalls
vdso64 s390/vdso: fix getcpu 2019-11-30 10:52:44 +01:00
.gitignore
alternative.c
asm-offsets.c s390/vdso: fix getcpu 2019-11-30 10:52:44 +01:00
audit.c
audit.h
base.S
cache.c
compat_audit.c
compat_linux.c
compat_linux.h
compat_ptrace.h
compat_signal.c signal: Remove task parameter from force_sig 2019-05-27 09:36:28 -05:00
cpcmd.c
crash_dump.c
debug.c
diag.c
dis.c s390/disassembler: don't hide instruction addresses 2019-11-12 11:24:10 +01:00
dumpstack.c s390/unwind: add stack pointer alignment sanity checks 2019-11-30 10:52:48 +01:00
early_printk.c s390/sclp: avoid using strncmp with hardcoded length 2019-08-29 15:34:58 +02:00
early.c s390: remove last diag 0x44 caller 2019-12-11 19:53:24 +01:00
ebcdic.c
entry.h s390: fix __EMIT_BUG() macro 2020-01-22 13:05:35 +01:00
entry.S
fpu.c
ftrace.c
guarded_storage.c
head64.S s390/head64: correct init_task stack setup 2019-11-30 10:52:45 +01:00
idle.c s390/idle: fix cpu idle time calculation 2019-10-31 17:26:48 +01:00
ima_arch.c
ipl_vmparm.c
ipl.c
irq.c
jump_label.c
kdebugfs.c s390: no need to check return value of debugfs_create functions 2019-01-28 15:58:55 +01:00
kexec_elf.c
kexec_image.c
kprobes.c
lgr.c
machine_kexec_file.c Merge branch 'next-lockdown' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security 2019-09-28 08:14:15 -07:00
machine_kexec_reloc.c s390/kaslr: add support for R_390_GLOB_DAT relocation type 2019-10-22 17:55:51 +02:00
machine_kexec.c s390/kaslr: store KASLR offset for early dumps 2019-11-30 10:52:45 +01:00
Makefile s390: remove compat vdso code 2019-12-01 12:48:49 +01:00
mcount.S s390/ftrace: generate traced function stack frame 2020-01-22 13:05:35 +01:00
module.c
nmi.c
nospec-branch.c
nospec-sysfs.c
os_info.c
perf_cpum_cf_common.c
perf_cpum_cf_diag.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +01:00
perf_cpum_cf_events.c
perf_cpum_cf.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +01:00
perf_cpum_sf.c s390/cpum_sf: Use DIV_ROUND_UP 2020-01-22 13:05:35 +01:00
perf_event.c s390: add error handling to perf_callchain_kernel 2019-10-31 17:20:54 +01:00
perf_regs.c
pgm_check.S s390: fix __EMIT_BUG() macro 2020-01-22 13:05:35 +01:00
process.c s390/process: avoid custom stack unwinding in get_wchan 2019-10-31 17:20:53 +01:00
processor.c processor: get rid of cpu_relax_yield 2019-06-15 12:25:55 +02:00
ptrace.c seccomp: simplify secure_computing() 2019-10-10 14:55:24 -07:00
reipl.S
relocate_kernel.S
runtime_instr.c
setup.c s390: avoid misusing CALL_ON_STACK for task stack setup 2019-11-30 10:52:45 +01:00
signal.c
smp.c s390: remove last diag 0x44 caller 2019-12-11 19:53:24 +01:00
stacktrace.c s390/livepatch: Implement reliable stack tracing for the consistency model 2019-11-30 10:52:48 +01:00
sthyi.c
suspend.c
swsusp.S
sys_s390.c s390: autogenerate compat syscall wrappers 2019-01-18 09:33:19 +01:00
sysinfo.c s390: no need to check return value of debugfs_create functions 2019-01-28 15:58:55 +01:00
time.c s390/time: remove monotonic_clock() 2019-10-31 17:20:52 +01:00
topology.c
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
traps.c s390: fix __EMIT_BUG() macro 2020-01-22 13:05:35 +01:00
unwind_bc.c s390/unwind: add stack pointer alignment sanity checks 2019-11-30 10:52:48 +01:00
uprobes.c
vdso.c s390: remove compat vdso code 2019-12-01 12:48:49 +01:00
vmlinux.lds.S vmlinux.lds.h: Replace RW_DATA_SECTION with RW_DATA 2019-11-04 15:57:41 +01:00
vtime.c sched/cputime: Rename vtime_account_system() to vtime_account_kernel() 2019-10-09 12:39:25 +02:00