diff -up rpcbind-1.2.5/src/rpcbind.c.orig rpcbind-1.2.5/src/rpcbind.c --- rpcbind-1.2.5/src/rpcbind.c.orig 2020-02-06 14:19:34.199330296 -0500 +++ rpcbind-1.2.5/src/rpcbind.c 2020-02-06 14:20:19.069973902 -0500 @@ -350,7 +350,7 @@ init_transport(struct netconfig *nconf) { int fd = -1; struct t_bind taddr; - struct addrinfo hints, *res; + struct addrinfo hints, *res = NULL; struct __rpc_sockinfo si; SVCXPRT *my_xprt = NULL; int status; /* bound checking ? */ @@ -827,8 +827,12 @@ got_socket: } #endif + if (res != NULL) + freeaddrinfo(res); return (0); error: + if (res != NULL) + freeaddrinfo(res); close(fd); return (1); } diff -up rpcbind-1.2.5/src/rpcb_stat.c.orig rpcbind-1.2.5/src/rpcb_stat.c --- rpcbind-1.2.5/src/rpcb_stat.c.orig 2018-08-15 10:51:19.000000000 -0400 +++ rpcbind-1.2.5/src/rpcb_stat.c 2020-02-06 14:20:19.073973959 -0500 @@ -151,7 +151,7 @@ rpcbs_rmtcall(rpcvers_t rtype, rpcproc_t rpcbs_rmtcalllist *rl; struct netconfig *nconf; - if (rtype > RPCBVERS_STAT) + if (rtype >= RPCBVERS_STAT) return; for (rl = inf[rtype].rmtinfo; rl; rl = rl->next) { diff -up rpcbind-1.2.5/src/rpcinfo.c.orig rpcbind-1.2.5/src/rpcinfo.c --- rpcbind-1.2.5/src/rpcinfo.c.orig 2020-02-06 14:19:34.193330210 -0500 +++ rpcbind-1.2.5/src/rpcinfo.c 2020-02-06 14:20:19.073973959 -0500 @@ -693,11 +693,11 @@ reply_proc (res, who, nconf) } if (!(uaddr = taddr2uaddr (nconf, who))) { - uaddr = UNKNOWN; + printf ("%s\t%s\n", UNKNOWN, hostname); + } else { + printf ("%s\t%s\n", uaddr, hostname); + free ((char *) uaddr); } - printf ("%s\t%s\n", uaddr, hostname); - if (strcmp (uaddr, UNKNOWN)) - free ((char *) uaddr); return (FALSE); } diff -up rpcbind-1.2.5/src/util.c.orig rpcbind-1.2.5/src/util.c --- rpcbind-1.2.5/src/util.c.orig 2020-02-06 14:20:51.564439986 -0500 +++ rpcbind-1.2.5/src/util.c 2020-02-06 14:20:39.994274027 -0500 @@ -322,13 +322,20 @@ network_init() /* * Now join the RPC ipv6 multicast group on all interfaces. */ - if (getifaddrs(&ifp) < 0) + if (getifaddrs(&ifp) < 0) { + freeaddrinfo (res); return; - + } mreq6.ipv6mr_interface = 0; inet_pton(AF_INET6, RPCB_MULTICAST_ADDR, &mreq6.ipv6mr_multiaddr); s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); + if (s < 0) { + if (debugging) + fprintf(stderr, "socket(AF_INET6) failed: %s\n", strerror(errno)); + freeaddrinfo (res); + return; + } /* * Loop through all interfaces. For each IPv6 multicast-capable @@ -351,9 +358,9 @@ network_init() if (debugging) perror("setsockopt v6 multicast"); } + close(s); #endif - - /* close(s); */ + freeaddrinfo (res); } struct sockaddr *