Date: Wed, 27 Feb 2002 13:04:59 -0800 From: Rob Braun <bbraun@FreeBSD.ORG> To: freebsd-net@FreeBSD.ORG Subject: proposed changes to getnameinfo() implementation Message-ID: <200202272105.g1RL50J21344@lh.synack.net>
next in thread | raw e-mail | index | archive | help
getnameinfo() takes a struct sockaddr pointer, and a length parameter for the amount of memory pointed to by the struct sockaddr pointer. The current FreeBSD implementation of getnameinfo() does 2 problematic checks against the length parameter. First, it makes sure the length parameter is equal to the length specified in the passed in sockaddr structure. This is problematic because the length parameter refers to the amount of memory pointed to by the first parameter, and the struct sockaddr sa_len field is used to specify the size of the sockaddr structure, since there are different types of sockaddr structures with different lengths. I propose to change this exact match comparison to ensure that the length passed in is at least what the sa_len field is. This will allow a larger structure to be passed in than the size of the sockaddr structure for the desired protocol. The second comparison is similar to the first. The passed in length field is compared to the size of the sockaddr structure for the address family you're using. Again, I propose to make sure that the passed in length is at least as large as the known structure length. With these changes, it still ensure that enough memory is available to proceed, but it also allows more memory than is needed. Rob diff -u -d -b -w -u -d -r1.7 getnameinfo.c --- getnameinfo.c 2001/02/15 10:35:54 1.7 +++ getnameinfo.c 2002/02/27 20:48:14 @@ -119,7 +119,7 @@ if (sa == NULL) return ENI_NOSOCKET; - if (sa->sa_len != salen) + if (sa->sa_len > salen) return ENI_SALEN; family = sa->sa_family; @@ -131,7 +131,7 @@ return ENI_FAMILY; found: - if (salen != afd->a_socklen) + if (salen < afd->a_socklen) return ENI_SALEN; /* network byte order */ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202272105.g1RL50J21344>