kernel_optimize_test/scripts
Alex Smith 91ad11d7cc recordmcount/MIPS: Fix possible incorrect mcount_loc table entries in modules
On MIPS calls to _mcount in modules generate 2 instructions to load
the _mcount address (and therefore 2 relocations). The mcount_loc
table should only reference the first of these, so the second is
filtered out by checking the relocation offset and ignoring ones that
immediately follow the previous one seen.

However if a module has an _mcount call at offset 0, the second
relocation would not be filtered out due to old_r_offset == 0
being taken to mean that the current relocation is the first one
seen, and both would end up in the mcount_loc table.

This results in ftrace_make_nop() patching both (adjacent)
instructions to branches over the _mcount call sequence like so:

  0xffffffffc08a8000:  04 00 00 10     b       0xffffffffc08a8014
  0xffffffffc08a8004:  04 00 00 10     b       0xffffffffc08a8018
  0xffffffffc08a8008:  2d 08 e0 03     move    at,ra
  ...

The second branch is in the delay slot of the first, which is
defined to be unpredictable - on the platform on which this bug was
encountered, it triggers a reserved instruction exception.

Fix by initializing old_r_offset to ~0 and using that instead of 0
to determine whether the current relocation is the first seen.

Signed-off-by: Alex Smith <alex.smith@imgtec.com>
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/7098/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2014-06-26 10:48:19 +01:00
..
basic kbuild: trivial - use tabs for code indent where possible 2014-06-10 14:00:53 +02:00
coccinelle coccicheck: Add unneeded return variable test 2014-06-10 14:36:30 +02:00
dtc kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
genksyms
kconfig Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-06-12 21:29:20 -07:00
ksymoops
mod Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-06-12 21:29:20 -07:00
package Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-06-12 21:29:20 -07:00
rt-tester kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
selinux kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
tracing
.gitignore
analyze_suspend.py
asn1_compiler.c
bin2c.c
bloat-o-meter
bootgraph.pl
checkincludes.pl
checkkconfigsymbols.sh
checkpatch.pl scripts/checkpatch.pl: device_initcall is not the only __initcall substitute 2014-06-04 16:54:20 -07:00
checkstack.pl kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
checksyscalls.sh
checkversion.pl
cleanfile
cleanpatch
coccicheck
config kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
conmakehash.c
decode_stacktrace.sh decode_stacktrace: make stack dump output useful again 2014-06-10 15:29:43 -07:00
decodecode
depmod.sh
diffconfig
docproc.c kbuild: trivial - use tabs for code indent where possible 2014-06-10 14:00:53 +02:00
export_report.pl
extract-ikconfig
extract-vmlinux
gcc-goto.sh
gcc-ld
gcc-version.sh
gcc-x86_32-has-stack-protector.sh
gcc-x86_64-has-stack-protector.sh
gen_initramfs_list.sh
get_maintainer.pl
gfp-translate
headerdep.pl
headers_check.pl
headers_install.sh
headers.sh kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
kallsyms.c kbuild: trivial - use tabs for code indent where possible 2014-06-10 14:00:53 +02:00
Kbuild.include
kernel-doc
ld-version.sh
Lindent
link-vmlinux.sh
Makefile kbuild: do not add "selinux" to subdir- twice 2014-06-09 23:24:59 +02:00
Makefile.asm-generic kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
Makefile.build
Makefile.clean
Makefile.extrawarn
Makefile.fwinst
Makefile.headersinst
Makefile.help
Makefile.host Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-06-12 21:29:20 -07:00
Makefile.lib
Makefile.modbuiltin
Makefile.modinst
Makefile.modpost
Makefile.modsign
makelst
markup_oops.pl kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
mkcompile_h
mkmakefile
mksysmap kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
mkuboot.sh
mkversion
module-common.lds
namespace.pl
objdiff scripts: objdiff: support directories for the augument of record command 2014-06-10 14:59:33 +02:00
patch-kernel
pnmtologo.c kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
profile2linkerlist.pl
recordmcount.c Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-06-12 21:29:20 -07:00
recordmcount.h recordmcount/MIPS: Fix possible incorrect mcount_loc table entries in modules 2014-06-26 10:48:19 +01:00
recordmcount.pl
setlocalversion
show_delta kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
sign-file
sortextable.c
sortextable.h
tags.sh kbuild: trivial - use tabs for code indent where possible 2014-06-10 14:00:53 +02:00
unifdef.c
ver_linux
xz_wrap.sh