Subject: unaligned data object from SIOCGIFCONF
To: None <tech-net@netbsd.org>
From: Jun-ichiro itojun Hagino <itojun@iijlab.net>
List: tech-net
Date: 02/20/2000 01:35:24
	With introduction of IPv6, SIOCGIFCONF can return unaligned data
	object for 64bit arch (like alpha).  Situation is like this:
	- SIOCGIFCONF returns packed structs
	- sizeof(sockaddr_in6) % 8 != 0
	- so, data object from SIOCGIFCONF can be placed at "addr % 8 != 0".

	If this raises too many problem for old binaries (those which does not
	copy data object from SIOCGIFCONF, and try to access the content
	directly with pointer), I can think of several solutions:

	(solution 1)
	- change SIOCGIFCONF to new number
	- old number should remain as OSIOCGIFCONF, which returns
	  non-large sockaddr (= not IPv6)
	(solution 2)
	- add 4-byte padding after sockaddr_in6
		this may violate RFC2553 3.3
	(solution 3 - not really a solution)
	- it was bug in the userland tools that tries to use pointers to
	  access packed struct.  they should have copied them.
	  actually the alignment assumption breaks with sockaddr_dl,
	  and several other sockaddr variants.  so IPv6 is not the wrong guy.

	I was notified from <goeran@cdg.chalmers.se> of the problem in ypbind
	and other places, and put fixes there - but I'm now wondering if how
	many of them needs fixes.
	I think solution 3 is the right way ("broken userland programs should
	be bitten"), but if it bites too many userland programs, we may better
	pick solution 1.  Thoughts? comments?

itojun