Module Name:    src
Committed By:   martin
Date:           Thu Jan 24 13:59:40 UTC 2019

Modified Files:
        src/usr.sbin/rpcbind [netbsd-8]: util.c

Log Message:
Pull up following revision(s) (requested by christos in ticket #1167):

        usr.sbin/rpcbind/util.c: revision 1.23

- fix wrong size allocation that triggers buffer overflow
- remove unneeded casts and assertions

XXX: pullup-8


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.20.8.1 src/usr.sbin/rpcbind/util.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/rpcbind/util.c
diff -u src/usr.sbin/rpcbind/util.c:1.20 src/usr.sbin/rpcbind/util.c:1.20.8.1
--- src/usr.sbin/rpcbind/util.c:1.20	Sun Nov  8 16:36:28 2015
+++ src/usr.sbin/rpcbind/util.c	Thu Jan 24 13:59:40 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.20 2015/11/08 16:36:28 christos Exp $	*/
+/*	$NetBSD: util.c,v 1.20.8.1 2019/01/24 13:59:40 martin Exp $	*/
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -128,14 +128,14 @@ addrmerge(struct netbuf *caller, char *s
 	if (serv_nbp == NULL)
 		return NULL;
 
-	serv_sa = (struct sockaddr *)serv_nbp->buf;
+	serv_sa = serv_nbp->buf;
 	if (clnt_uaddr != NULL) {
 		clnt_nbp = uaddr2taddr(nconf, clnt_uaddr);
 		if (clnt_nbp == NULL) {
 			free(serv_nbp);
 			return NULL;
 		}
-		clnt_sa = (struct sockaddr *)clnt_nbp->buf;
+		clnt_sa = clnt_nbp->buf;
 		if (clnt_sa->sa_family == AF_LOCAL) {
 			free(serv_nbp);
 			free(clnt_nbp);
@@ -143,8 +143,12 @@ addrmerge(struct netbuf *caller, char *s
 			return strdup(serv_uaddr);
 		}
 	} else {
-		clnt_sa = (struct sockaddr *)
-		    malloc(sizeof (struct sockaddr_storage));
+		clnt_sa = malloc(clnt->sa_len);
+		if (clnt_sa == NULL) {
+			free(serv_nbp);
+			free(clnt_nbp);
+			return 0;
+		}
 		memcpy(clnt_sa, clnt, clnt->sa_len);
 	}
 
@@ -262,7 +266,6 @@ found:
 		break;				
 #ifdef INET6
 	case AF_INET6:
-		assert(newsin6);
 		memcpy(newsin6, ifsin6, clnt_sa->sa_len);
 		newsin6->sin6_port = servsin6->sin6_port;
 		tbuf.maxlen = sizeof (struct sockaddr_storage);

Reply via email to