Module Name: src Committed By: kamil Date: Mon Sep 23 23:06:26 UTC 2019
Modified Files: src/sys/arch/amd64/include: types.h src/sys/arch/i386/include: types.h Log Message: Disable __NO_STRICT_ALIGNMENT on amd64/i386 for UBSan builds This change allows to pick code paths in the kernel that are tuned for alignment sensitive (and stricted in C meaning) code paths. In particular the IPv6 code uses this heavily and skips whenever possible the process of aligning of networking data. With this modification all ATF tests are executed on amd64 without triggering any UBSan reports in dmesg. In theory __NO_STRICT_ALIGNMENT could be tuned for vax and m68k, however these machines are still unsupported in LLVM sanitizers and syzkaller. sys/netinet6/scope6.c:404:6, member access within misaligned address 0xfffffaea81276086 for type 'struct in6_addr' which requires 4 byte alignment Reported-by: syzbot+a86f58d17685317b3...@syzkaller.appspotmail.com sys/net/rtsock_shared.c:629:41, member access within misaligned address 0xffffddb5db3ff04c for type 'struct rt_msghdr50' which requires 8 byte alignment Reported-by: syzbot+0a3a022bc9d2b8880...@syzkaller.appspotmail.com To generate a diff of this commit: cvs rdiff -u -r1.61 -r1.62 src/sys/arch/amd64/include/types.h cvs rdiff -u -r1.89 -r1.90 src/sys/arch/i386/include/types.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/amd64/include/types.h diff -u src/sys/arch/amd64/include/types.h:1.61 src/sys/arch/amd64/include/types.h:1.62 --- src/sys/arch/amd64/include/types.h:1.61 Sun Sep 22 10:35:12 2019 +++ src/sys/arch/amd64/include/types.h Mon Sep 23 23:06:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.61 2019/09/22 10:35:12 maxv Exp $ */ +/* $NetBSD: types.h,v 1.62 2019/09/23 23:06:26 kamil Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -74,8 +74,11 @@ typedef unsigned char __cpu_simple_lock #define __SIMPLELOCK_LOCKED 1 #define __SIMPLELOCK_UNLOCKED 0 +#if !__has_feature(undefined_behavior_sanitizer) && \ + !defined(__SANITIZE_UNDEFINED__) /* The amd64 does not have strict alignment requirements. */ #define __NO_STRICT_ALIGNMENT +#endif #define __HAVE_NEW_STYLE_BUS_H #define __HAVE_CPU_COUNTER Index: src/sys/arch/i386/include/types.h diff -u src/sys/arch/i386/include/types.h:1.89 src/sys/arch/i386/include/types.h:1.90 --- src/sys/arch/i386/include/types.h:1.89 Sat Apr 6 03:06:25 2019 +++ src/sys/arch/i386/include/types.h Mon Sep 23 23:06:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.89 2019/04/06 03:06:25 thorpej Exp $ */ +/* $NetBSD: types.h,v 1.90 2019/09/23 23:06:26 kamil Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -99,8 +99,11 @@ typedef __register_t register_t; #define __SIMPLELOCK_LOCKED 1 #define __SIMPLELOCK_UNLOCKED 0 +#if !__has_feature(undefined_behavior_sanitizer) && \ + !defined(__SANITIZE_UNDEFINED__) /* The x86 does not have strict alignment requirements. */ #define __NO_STRICT_ALIGNMENT +#endif #define __HAVE_NEW_STYLE_BUS_H #define __HAVE_CPU_DATA_FIRST