Module Name:    src
Committed By:   christos
Date:           Thu Jan  3 19:26:50 UTC 2019

Modified Files:
        src/usr.sbin/rpcbind: rpcb_svc_com.c rpcbind.c

Log Message:
check strdup results too
include the function name in out of memory messages


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/usr.sbin/rpcbind/rpcb_svc_com.c
cvs rdiff -u -r1.26 -r1.27 src/usr.sbin/rpcbind/rpcbind.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/rpcb_svc_com.c
diff -u src/usr.sbin/rpcbind/rpcb_svc_com.c:1.21 src/usr.sbin/rpcbind/rpcb_svc_com.c:1.22
--- src/usr.sbin/rpcbind/rpcb_svc_com.c:1.21	Thu Jan  3 14:04:21 2019
+++ src/usr.sbin/rpcbind/rpcb_svc_com.c	Thu Jan  3 14:26:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpcb_svc_com.c,v 1.21 2019/01/03 19:04:21 christos Exp $	*/
+/*	$NetBSD: rpcb_svc_com.c,v 1.22 2019/01/03 19:26:50 christos Exp $	*/
 /*	$FreeBSD: head/usr.sbin/rpcbind/rpcb_svc_com.c 301770 2016-06-09 22:25:00Z pfg $ */
 
 /*-
@@ -306,8 +306,12 @@ delete_prog(rpcprog_t prog)
 		reg.r_prog = rbl->rpcb_map.r_prog;
 		reg.r_vers = rbl->rpcb_map.r_vers;
 		reg.r_netid = strdup(rbl->rpcb_map.r_netid);
-		(void)map_unset(&reg, rpcbind_superuser);
-		free(reg.r_netid);
+		if (reg.r_netid == NULL)
+			syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
+		else {
+			(void)map_unset(&reg, rpcbind_superuser);
+			free(reg.r_netid);
+		}
 	}
 }
 
@@ -508,16 +512,16 @@ create_rmtcall_fd(struct netconfig *ncon
 			nconf->nc_device, errno);
 		return (-1);
 	}
-	xprt = svc_tli_create(fd, 0, (struct t_bind *) 0, 0, 0);
+	xprt = svc_tli_create(fd, 0, NULL, 0, 0);
 	if (xprt == NULL) {
 		if (debugging)
 			fprintf(stderr,
-				"create_rmtcall_fd: svc_tli_create failed\n");
+				"%s: svc_tli_create failed\n", __func__);
 		return (-1);
 	}
-	rmt = malloc(sizeof(struct rmtcallfd_list));
+	rmt = malloc(sizeof(*rmt));
 	if (rmt == NULL) {
-		syslog(LOG_ERR, "create_rmtcall_fd: no memory!");
+		syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 		return (-1);
 	}
 	rmt->xprt = xprt;
@@ -813,9 +817,7 @@ rpcbproc_callit_com(struct svc_req *rqst
 		if (outbuf_alloc == NULL) {
 			if (reply_type == RPCBPROC_INDIRECT)
 				svcerr_systemerr(transp);
-			if (debugging)
-				fprintf(stderr,
-				"rpcbproc_callit_com:  No memory!\n");
+			syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 			goto error;
 		}
 		xdrmem_create(&outxdr, outbuf_alloc, sendsz, XDR_ENCODE);
@@ -1462,7 +1464,7 @@ add_pmaplist(RPCB *arg)
 	 */
 	pml = malloc(sizeof(*pml));
 	if (pml == NULL) {
-		(void) syslog(LOG_ERR, "rpcbind: no memory!\n");
+		syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 		return (1);
 	}
 	pml->pml_map = pmap;
@@ -1474,7 +1476,7 @@ add_pmaplist(RPCB *arg)
 
 		/* Attach to the end of the list */
 		for (fnd = list_pml; fnd->pml_next; fnd = fnd->pml_next)
-			;
+			continue;
 		fnd->pml_next = pml;
 	}
 	return (0);

Index: src/usr.sbin/rpcbind/rpcbind.c
diff -u src/usr.sbin/rpcbind/rpcbind.c:1.26 src/usr.sbin/rpcbind/rpcbind.c:1.27
--- src/usr.sbin/rpcbind/rpcbind.c:1.26	Thu Jan  3 14:04:21 2019
+++ src/usr.sbin/rpcbind/rpcbind.c	Thu Jan  3 14:26:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpcbind.c,v 1.26 2019/01/03 19:04:21 christos Exp $	*/
+/*	$NetBSD: rpcbind.c,v 1.27 2019/01/03 19:26:50 christos Exp $	*/
 
 /*-
  * Copyright (c) 2009, Sun Microsystems, Inc.
@@ -482,9 +482,8 @@ init_transport(struct netconfig *nconf)
 			taddr.addr.len = taddr.addr.maxlen = addrlen;
 			taddr.addr.buf = malloc(addrlen);
 			if (taddr.addr.buf == NULL) {
-				syslog(LOG_ERR,
-				    "cannot allocate memory for %s address",
-				    nconf->nc_netid);
+				syslog(LOG_ERR, "%s: Cannot allocate memory",
+				    __func__);
 				if (res != NULL)
 					freeaddrinfo(res);
 				return 1;
@@ -540,8 +539,7 @@ init_transport(struct netconfig *nconf)
 		taddr.addr.len = taddr.addr.maxlen = addrlen;
 		taddr.addr.buf = malloc(addrlen);
 		if (taddr.addr.buf == NULL) {
-			syslog(LOG_ERR, "cannot allocate memory for %s address",
-			    nconf->nc_netid);
+			syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 			if (res != NULL)
 			    freeaddrinfo(res);
 			return 1;
@@ -567,7 +565,7 @@ init_transport(struct netconfig *nconf)
 
 		my_xprt = (SVCXPRT *)svc_tli_create(fd, nconf, &taddr,
 		    RPC_MAXDATASIZE, RPC_MAXDATASIZE);
-		if (my_xprt == (SVCXPRT *)NULL) {
+		if (my_xprt == NULL) {
 			syslog(LOG_ERR, "%s: could not create service",
 			    nconf->nc_netid);
 			goto error;
@@ -592,7 +590,7 @@ init_transport(struct netconfig *nconf)
 		}
 		pml = malloc(sizeof(*pml));
 		if (pml == NULL) {
-			syslog(LOG_ERR, "Cannot allocate memory");
+			syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 			goto error;
 		}
 
@@ -609,7 +607,8 @@ init_transport(struct netconfig *nconf)
 			tcptrans = strdup(nconf->nc_netid);
 			if (tcptrans == NULL) {
 				free(pml);
-				syslog(LOG_ERR, "Cannot allocate memory");
+				syslog(LOG_ERR, "%s: Cannot allocate memory",
+				    __func__);
 				goto error;
 			}
 			pml->pml_map.pm_prot = IPPROTO_TCP;
@@ -627,7 +626,8 @@ init_transport(struct netconfig *nconf)
 			udptrans = strdup(nconf->nc_netid);
 			if (udptrans == NULL) {
 				free(pml);
-				syslog(LOG_ERR, "Cannot allocate memory");
+				syslog(LOG_ERR, "%s: Cannot allocate memory",
+				    __func__);
 				goto error;
 			}
 			pml->pml_map.pm_prot = IPPROTO_UDP;
@@ -646,7 +646,7 @@ init_transport(struct netconfig *nconf)
 		/* Add version 3 information */
 		pml = malloc(sizeof(*pml));
 		if (pml == NULL) {
-			syslog(LOG_ERR, "Cannot allocate memory");
+			syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 			goto error;
 		}
 		pml->pml_map = list_pml->pml_map;
@@ -657,7 +657,7 @@ init_transport(struct netconfig *nconf)
 		/* Add version 4 information */
 		pml = malloc(sizeof(*pml));
 		if (pml == NULL) {
-			syslog(LOG_ERR, "Cannot allocate memory");
+			syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 			goto error;
 		}
 		pml->pml_map = list_pml->pml_map;
@@ -812,9 +812,9 @@ rbllist_add(rpcprog_t prog, rpcvers_t ve
 {
 	rpcblist_ptr rbl;
 
-	rbl = malloc(sizeof(*rbl));
+	rbl = calloc(1, sizeof(*rbl));
 	if (rbl == NULL) {
-		syslog(LOG_ERR, "Out of memory");
+		syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
 		return;
 	}
 
@@ -823,6 +823,17 @@ rbllist_add(rpcprog_t prog, rpcvers_t ve
 	rbl->rpcb_map.r_netid = strdup(nconf->nc_netid);
 	rbl->rpcb_map.r_addr = taddr2uaddr(nconf, addr);
 	rbl->rpcb_map.r_owner = strdup(rpcbind_superuser);
+	if (rbl->rpcb_map.r_netid == NULL ||
+	    rbl->rpcb_map.r_addr == NULL ||
+	    rbl->rpcb_map.r_owner == NULL)
+	{
+	    free(rbl->rpcb_map.r_netid);
+	    free(rbl->rpcb_map.r_addr);
+	    free(rbl->rpcb_map.r_owner);
+	    free(rbl);
+	    syslog(LOG_ERR, "%s: Cannot allocate memory", __func__);
+	    return;
+	}
 	rbl->rpcb_next = list_rbl;	/* Attach to global list */
 	list_rbl = rbl;
 }

Reply via email to