Fix rpcbind init after r300941.

- getaddrinfo() sets res = NULL on failure and freeaddrinfo() always
  dereferences its argument, so we should only free the address list after
  a successful call.
- Address a second potential leak caused by getaddrinfo(AF_INET6)
  overwriting the address list returned by getaddrinfo(AF_INET).

X-MFC-With:	r300941
This commit is contained in:
Mark Johnston 2016-05-29 19:46:34 +00:00
parent 6180f50bbb
commit 5656b5057e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=300972

View File

@ -338,6 +338,7 @@ network_init(void)
exit(1); exit(1);
} }
memcpy(local_in4, res->ai_addr, sizeof *local_in4); memcpy(local_in4, res->ai_addr, sizeof *local_in4);
freeaddrinfo(res);
} }
#ifdef INET6 #ifdef INET6
@ -354,6 +355,7 @@ network_init(void)
exit(1); exit(1);
} }
memcpy(local_in6, res->ai_addr, sizeof *local_in6); memcpy(local_in6, res->ai_addr, sizeof *local_in6);
freeaddrinfo(res);
} }
/* /*
@ -395,7 +397,6 @@ network_init(void)
freeifaddrs(ifp); freeifaddrs(ifp);
#endif #endif
freeaddrinfo(res);
/* close(s); */ /* close(s); */
} }