Song Ma found a memory leak in the if2ip code if you pass in an interface

name longer than the name field of the ifreq struct (typically 6 bytes), as
then it wouldn't close the used dummy socket.
This commit is contained in:
Daniel Stenberg
2007-04-12 20:09:19 +00:00
parent ea74b4b8e1
commit c38c339480
2 changed files with 9 additions and 1 deletions

View File

@@ -6,6 +6,12 @@
Changelog Changelog
Daniel S (12 April 2007)
- Song Ma found a memory leak in the if2ip code if you pass in an interface
name longer than the name field of the ifreq struct (typically 6 bytes), as
then it wouldn't close the used dummy socket. Bug #1698974
(http://curl.haxx.se/bug/view.cgi?id=1698974)
Version 7.16.2 (11 April 2007) Version 7.16.2 (11 April 2007)
Yang Tse (10 April 2007) Yang Tse (10 April 2007)

View File

@@ -98,8 +98,10 @@ char *Curl_if2ip(const char *interface, char *buf, int buf_size)
struct ifreq req; struct ifreq req;
size_t len = strlen(interface); size_t len = strlen(interface);
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
if(len >= sizeof(req.ifr_name)) if(len >= sizeof(req.ifr_name)) {
sclose(dummy);
return NULL; /* this can't be a fine interface name */ return NULL; /* this can't be a fine interface name */
}
memcpy(req.ifr_name, interface, len+1); memcpy(req.ifr_name, interface, len+1);
req.ifr_addr.sa_family = AF_INET; req.ifr_addr.sa_family = AF_INET;
#ifdef IOCTL_3_ARGS #ifdef IOCTL_3_ARGS