UBSAN uses compile-time instrumentation to catch undefined behavior (UB). Compiler inserts code that perform certain kinds of checks before operations that could cause UB. If check fails (i.e. UB detected) __ubsan_handle_* function called to print error message. So the most of the work is done by compiler. This patch just implements ubsan handlers printing errors. GCC has this capability since 4.9.x [1] (see -fsanitize=undefined option and its suboptions). However GCC 5.x has more checkers implemented [2]. Article [3] has a bit more details about UBSAN in the GCC. [1] - https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Debugging-Options.html [2] - https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html [3] - http://developerblog.redhat.com/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/ Issues which UBSAN has found thus far are: Found bugs: * out-of-bounds access -97840cb67f
("netfilter: nfnetlink: fix insufficient validation in nfnetlink_bind") undefined shifts: *d48458d4a7
("jbd2: use a better hash function for the revoke table") *10632008b9
("clockevents: Prevent shift out of bounds") * 'x << -1' shift in ext4 - http://lkml.kernel.org/r/<5444EF21.8020501@samsung.com> * undefined rol32(0) - http://lkml.kernel.org/r/<1449198241-20654-1-git-send-email-sasha.levin@oracle.com> * undefined dirty_ratelimit calculation - http://lkml.kernel.org/r/<566594E2.3050306@odin.com> * undefined roundown_pow_of_two(0) - http://lkml.kernel.org/r/<1449156616-11474-1-git-send-email-sasha.levin@oracle.com> * [WONTFIX] undefined shift in __bpf_prog_run - http://lkml.kernel.org/r/<CACT4Y+ZxoR3UjLgcNdUm4fECLMx2VdtfrENMtRRCdgHB2n0bJA@mail.gmail.com> WONTFIX here because it should be fixed in bpf program, not in kernel. signed overflows: *32a8df4e0b
("sched: Fix odd values in effective_load() calculations") * mul overflow in ntp - http://lkml.kernel.org/r/<1449175608-1146-1-git-send-email-sasha.levin@oracle.com> * incorrect conversion into rtc_time in rtc_time64_to_tm() - http://lkml.kernel.org/r/<1449187944-11730-1-git-send-email-sasha.levin@oracle.com> * unvalidated timespec in io_getevents() - http://lkml.kernel.org/r/<CACT4Y+bBxVYLQ6LtOKrKtnLthqLHcw-BMp3aqP3mjdAvr9FULQ@mail.gmail.com> * [NOTABUG] signed overflow in ktime_add_safe() - http://lkml.kernel.org/r/<CACT4Y+aJ4muRnWxsUe1CMnA6P8nooO33kwG-c8YZg=0Xc8rJqw@mail.gmail.com> [akpm@linux-foundation.org: fix unused local warning] [akpm@linux-foundation.org: fix __int128 build woes] Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sasha Levin <sasha.levin@oracle.com> Cc: Randy Dunlap <rdunlap@infradead.org> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michal Marek <mmarek@suse.cz> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Yury Gribov <y.gribov@samsung.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Konstantin Khlebnikov <koct9i@gmail.com> Cc: Kostya Serebryany <kcc@google.com> Cc: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Git-repo: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ Git-commit: c6d308534aef6c99904bf5862066360ae067abc4 [tsoni@codeaurora.org: trivial merge conflict resolution] CRs-Fixed: 969533 Change-Id: I048b9936b1120e0d375b7932c59de78d8ef8f411 Signed-off-by: Trilok Soni <tsoni@codeaurora.org> [satyap@codeaurora.org: trivial merge conflict resolution] Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
73 lines
2.1 KiB
Makefile
73 lines
2.1 KiB
Makefile
#
|
|
# arch/x86/realmode/Makefile
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
#
|
|
KASAN_SANITIZE := n
|
|
|
|
always := realmode.bin realmode.relocs
|
|
|
|
wakeup-objs := wakeup_asm.o wakemain.o video-mode.o
|
|
wakeup-objs += copy.o bioscall.o regs.o
|
|
# The link order of the video-*.o modules can matter. In particular,
|
|
# video-vga.o *must* be listed first, followed by video-vesa.o.
|
|
# Hardware-specific drivers should follow in the order they should be
|
|
# probed, and video-bios.o should typically be last.
|
|
wakeup-objs += video-vga.o
|
|
wakeup-objs += video-vesa.o
|
|
wakeup-objs += video-bios.o
|
|
|
|
realmode-y += header.o
|
|
realmode-y += trampoline_$(BITS).o
|
|
realmode-y += stack.o
|
|
realmode-y += reboot.o
|
|
realmode-$(CONFIG_ACPI_SLEEP) += $(wakeup-objs)
|
|
|
|
targets += $(realmode-y)
|
|
|
|
REALMODE_OBJS = $(addprefix $(obj)/,$(realmode-y))
|
|
|
|
sed-pasyms := -n -r -e 's/^([0-9a-fA-F]+) [ABCDGRSTVW] (.+)$$/pa_\2 = \2;/p'
|
|
|
|
quiet_cmd_pasyms = PASYMS $@
|
|
cmd_pasyms = $(NM) $(filter-out FORCE,$^) | \
|
|
sed $(sed-pasyms) | sort | uniq > $@
|
|
|
|
targets += pasyms.h
|
|
$(obj)/pasyms.h: $(REALMODE_OBJS) FORCE
|
|
$(call if_changed,pasyms)
|
|
|
|
targets += realmode.lds
|
|
$(obj)/realmode.lds: $(obj)/pasyms.h
|
|
|
|
LDFLAGS_realmode.elf := --emit-relocs -T
|
|
CPPFLAGS_realmode.lds += -P -C -I$(obj)
|
|
|
|
targets += realmode.elf
|
|
$(obj)/realmode.elf: $(obj)/realmode.lds $(REALMODE_OBJS) FORCE
|
|
$(call if_changed,ld)
|
|
|
|
OBJCOPYFLAGS_realmode.bin := -O binary
|
|
|
|
targets += realmode.bin
|
|
$(obj)/realmode.bin: $(obj)/realmode.elf $(obj)/realmode.relocs FORCE
|
|
$(call if_changed,objcopy)
|
|
@:
|
|
|
|
quiet_cmd_relocs = RELOCS $@
|
|
cmd_relocs = arch/x86/tools/relocs --realmode $< > $@
|
|
|
|
targets += realmode.relocs
|
|
$(obj)/realmode.relocs: $(obj)/realmode.elf FORCE
|
|
$(call if_changed,relocs)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
KBUILD_CFLAGS := $(LINUXINCLUDE) $(REALMODE_CFLAGS) -D_SETUP -D_WAKEUP \
|
|
-I$(srctree)/arch/x86/boot
|
|
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
|
|
GCOV_PROFILE := n
|
|
UBSAN_SANITIZE := n
|