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]"

Reply via email to