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: [email protected]
Reporter: [email protected]
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.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"