Author: hrs
Date: Tue Nov  3 00:46:06 2015
New Revision: 290318
URL: https://svnweb.freebsd.org/changeset/base/290318

Log:
  sdl->sdl_len in sockaddr_dl can be longer than
  sizeof(struct sockaddr_dl).

Modified:
  head/lib/libc/net/getnameinfo.c

Modified: head/lib/libc/net/getnameinfo.c
==============================================================================
--- head/lib/libc/net/getnameinfo.c     Tue Nov  3 00:21:23 2015        
(r290317)
+++ head/lib/libc/net/getnameinfo.c     Tue Nov  3 00:46:06 2015        
(r290318)
@@ -122,7 +122,8 @@ getnameinfo(const struct sockaddr *sa, s
        afd = find_afd(sa->sa_family);
        if (afd == NULL)
                return (EAI_FAMILY);
-       if (sa->sa_family == PF_LOCAL) {
+       switch (sa->sa_family) {
+       case PF_LOCAL:
                /*
                 * PF_LOCAL uses variable sa->sa_len depending on the
                 * content length of sun_path.  Require 1 byte in
@@ -132,8 +133,17 @@ getnameinfo(const struct sockaddr *sa, s
                    salen <= afd->a_socklen -
                        sizeofmember(struct sockaddr_un, sun_path))
                        return (EAI_FAIL);
-       } else if (salen != afd->a_socklen)
-               return (EAI_FAIL);
+               break;
+       case PF_LINK:
+               if (salen <= afd->a_socklen -
+                       sizeofmember(struct sockaddr_dl, sdl_data))
+                       return (EAI_FAIL);
+               break;
+       default:
+               if (salen != afd->a_socklen)
+                       return (EAI_FAIL);
+               break;
+       }
 
        return ((*afd->a_func)(afd, sa, salen, host, hostlen,
            serv, servlen, flags));
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to