svn commit: r226072 - head/sys/compat/linux
Jung-uk Kim
jkim at FreeBSD.org
Thu Oct 6 20:48:23 UTC 2011
Author: jkim
Date: Thu Oct 6 20:48:23 2011
New Revision: 226072
URL: http://svn.freebsd.org/changeset/base/226072
Log:
Restore the original socket address length if it was not really AF_INET6.
Modified:
head/sys/compat/linux/linux_socket.c
Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c Thu Oct 6 20:28:08 2011 (r226071)
+++ head/sys/compat/linux/linux_socket.c Thu Oct 6 20:48:23 2011 (r226072)
@@ -128,22 +128,25 @@ linux_getsockaddr(struct sockaddr **sap,
*
* Still accept addresses for which the scope id is not used.
*/
- if (oldv6size && bdom == AF_INET6) {
- sin6 = (struct sockaddr_in6 *)kosa;
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr) ||
- (!IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr) &&
- !IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr) &&
- !IN6_IS_ADDR_V4COMPAT(&sin6->sin6_addr) &&
- !IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr) &&
- !IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))) {
- sin6->sin6_scope_id = 0;
- } else {
- log(LOG_DEBUG,
- "obsolete pre-RFC2553 sockaddr_in6 rejected\n");
- error = EINVAL;
- goto out;
- }
- } else
+ if (oldv6size) {
+ if (bdom == AF_INET6) {
+ sin6 = (struct sockaddr_in6 *)kosa;
+ if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr) ||
+ (!IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr) &&
+ !IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr) &&
+ !IN6_IS_ADDR_V4COMPAT(&sin6->sin6_addr) &&
+ !IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr) &&
+ !IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))) {
+ sin6->sin6_scope_id = 0;
+ } else {
+ log(LOG_DEBUG,
+ "obsolete pre-RFC2553 sockaddr_in6 rejected\n");
+ error = EINVAL;
+ goto out;
+ }
+ } else
+ alloclen -= sizeof(u_int32_t);
+ }
#endif
if (bdom == AF_INET) {
alloclen = sizeof(struct sockaddr_in);
More information about the svn-src-head
mailing list