svn commit: r290318 - head/lib/libc/net
Hiroki Sato
hrs at FreeBSD.org
Tue Nov 3 00:46:08 UTC 2015
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));
More information about the svn-src-head
mailing list