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