Date: Sun, 23 Aug 2015 18:51:16 +0000 From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 202600] [patch] ndp(8): fix unaligned accesses Message-ID: <bug-202600-8@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202600 Bug ID: 202600 Summary: [patch] ndp(8): fix unaligned accesses Product: Base System Version: 11.0-CURRENT Hardware: Any OS: Any Status: New Keywords: patch Severity: Affects Some People Priority: --- Component: bin Assignee: freebsd-bugs@FreeBSD.org Reporter: naddy@FreeBSD.org Keywords: patch Created attachment 160262 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=160262&action=edit ndp.c diff ndp -p performs unaligned accesses on architectures that require strict alignment for 64-bit types (e.g. sparc64). Even if we trap these on FreeBSD rather than sending SIGBUS, this should be fixed. The sysctl used to pass the prefix list uses a packed format: one struct in6_prefix, several struct sockaddr_in6, one struct in6_prefix, several struct sockaddr_in6, ... This was fine when both structs had the same alignment requirement (int32_t). However, there is a time_t in in6_prefix which has pushed that struct's alignment to int64_t. The attached patch is taken from NetBSD (Martin Husemann): http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.sbin/ndp/ndp.c.diff?r1=1.41&r2=1.42 "Simplify code to print the router/prefix list: use memcpy and local structs properly aligned on the stack to decode the binary format passed by the kernel - instead of (bogusly) assuming the format will obey all local alignement requirements." The kernel side of this was fixed independently in r235681. -- You are receiving this mail because: You are the assignee for the bug.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-202600-8>