Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/rpcbind Handle memory allocations and error exit co...



details:   https://anonhg.NetBSD.org/src/rev/4f2d69c078e3
branches:  trunk
changeset: 995737:4f2d69c078e3
user:      christos <christos%NetBSD.org@localhost>
date:      Thu Jan 03 19:04:21 2019 +0000

description:
Handle memory allocations and error exit codes consistently.

diffstat:

 usr.sbin/rpcbind/check_bound.c  |   4 ++--
 usr.sbin/rpcbind/rpcb_stat.c    |   6 +++---
 usr.sbin/rpcbind/rpcb_svc_4.c   |   4 ++--
 usr.sbin/rpcbind/rpcb_svc_com.c |   6 +++---
 usr.sbin/rpcbind/rpcbind.c      |  35 +++++++++++++++++++++++------------
 usr.sbin/rpcbind/util.c         |  13 ++++++++-----
 6 files changed, 41 insertions(+), 27 deletions(-)

diffs (245 lines):

diff -r 88af007f4249 -r 4f2d69c078e3 usr.sbin/rpcbind/check_bound.c
--- a/usr.sbin/rpcbind/check_bound.c    Thu Jan 03 18:28:21 2019 +0000
+++ b/usr.sbin/rpcbind/check_bound.c    Thu Jan 03 19:04:21 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: check_bound.c,v 1.7 2017/08/16 08:44:40 christos Exp $ */
+/*     $NetBSD: check_bound.c,v 1.8 2019/01/03 19:04:21 christos Exp $ */
 /*     $FreeBSD: head/usr.sbin/rpcbind/check_bound.c 300942 2016-05-29 06:01:18Z ngie $ */
 
 /*-
@@ -125,7 +125,7 @@
        newnconf = getnetconfigent(nconf->nc_netid);
        if (newnconf == NULL)
                return (-1);
-       fdl = malloc(sizeof(struct fdlist));
+       fdl = malloc(sizeof(*fdl));
        if (fdl == NULL) {
                freenetconfigent(newnconf);
                syslog(LOG_ERR, "no memory!");
diff -r 88af007f4249 -r 4f2d69c078e3 usr.sbin/rpcbind/rpcb_stat.c
--- a/usr.sbin/rpcbind/rpcb_stat.c      Thu Jan 03 18:28:21 2019 +0000
+++ b/usr.sbin/rpcbind/rpcb_stat.c      Thu Jan 03 19:04:21 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: rpcb_stat.c,v 1.6 2017/08/16 08:44:40 christos Exp $   */
+/*     $NetBSD: rpcb_stat.c,v 1.7 2019/01/03 19:04:21 christos Exp $   */
 /* $FreeBSD: head/usr.sbin/rpcbind/rpcb_stat.c 301605 2016-06-08 12:45:22Z ngie $ */
 
 /*-
@@ -125,7 +125,7 @@
        if (nconf == NULL) {
                return;
        }
-       al = (rpcbs_addrlist *) malloc(sizeof (rpcbs_addrlist));
+       al = malloc(sizeof(*al));
        if (al == NULL) {
                return;
        }
@@ -174,7 +174,7 @@
        if (nconf == NULL) {
                return;
        }
-       rl = (rpcbs_rmtcalllist *) malloc(sizeof (rpcbs_rmtcalllist));
+       rl = malloc(sizeof(*rl));
        if (rl == NULL) {
                return;
        }
diff -r 88af007f4249 -r 4f2d69c078e3 usr.sbin/rpcbind/rpcb_svc_4.c
--- a/usr.sbin/rpcbind/rpcb_svc_4.c     Thu Jan 03 18:28:21 2019 +0000
+++ b/usr.sbin/rpcbind/rpcb_svc_4.c     Thu Jan 03 19:04:21 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: rpcb_svc_4.c,v 1.8 2017/08/16 08:44:40 christos Exp $  */
+/*     $NetBSD: rpcb_svc_4.c,v 1.9 2019/01/03 19:04:21 christos Exp $  */
 /* $FreeBSD: head/usr.sbin/rpcbind/rpcb_svc_4.c 258564 2013-11-25 16:44:02Z hrs $ */
 
 /*-
@@ -387,7 +387,7 @@
                /*
                 * Add it to rlist.
                 */
-               rp = malloc(sizeof(rpcb_entry_list));
+               rp = malloc(sizeof(*rp));
                if (rp == NULL)
                        goto fail;
                a = &rp->rpcb_entry_map;
diff -r 88af007f4249 -r 4f2d69c078e3 usr.sbin/rpcbind/rpcb_svc_com.c
--- a/usr.sbin/rpcbind/rpcb_svc_com.c   Thu Jan 03 18:28:21 2019 +0000
+++ b/usr.sbin/rpcbind/rpcb_svc_com.c   Thu Jan 03 19:04:21 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: rpcb_svc_com.c,v 1.20 2017/08/16 08:44:40 christos Exp $       */
+/*     $NetBSD: rpcb_svc_com.c,v 1.21 2019/01/03 19:04:21 christos Exp $       */
 /*     $FreeBSD: head/usr.sbin/rpcbind/rpcb_svc_com.c 301770 2016-06-09 22:25:00Z pfg $ */
 
 /*-
@@ -179,7 +179,7 @@
        /*
         * add to the end of the list
         */
-       rbl = malloc(sizeof(RPCBLIST));
+       rbl = malloc(sizeof(*rbl));
        if (rbl == NULL)
                return (FALSE);
        a = &(rbl->rpcb_map);
@@ -1460,7 +1460,7 @@
        /*
         * add to END of list
         */
-       pml = malloc(sizeof(struct pmaplist));
+       pml = malloc(sizeof(*pml));
        if (pml == NULL) {
                (void) syslog(LOG_ERR, "rpcbind: no memory!\n");
                return (1);
diff -r 88af007f4249 -r 4f2d69c078e3 usr.sbin/rpcbind/rpcbind.c
--- a/usr.sbin/rpcbind/rpcbind.c        Thu Jan 03 18:28:21 2019 +0000
+++ b/usr.sbin/rpcbind/rpcbind.c        Thu Jan 03 19:04:21 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: rpcbind.c,v 1.25 2017/08/21 17:01:04 christos Exp $    */
+/*     $NetBSD: rpcbind.c,v 1.26 2019/01/03 19:04:21 christos Exp $    */
 
 /*-
  * Copyright (c) 2009, Sun Microsystems, Inc.
@@ -175,10 +175,11 @@
 #ifndef RPCBIND_RUMP
        /* Check that another rpcbind isn't already running. */
        if ((rpcbindlockfd = open(RPCBINDDLOCK, O_RDONLY|O_CREAT, 0444)) == -1)
-               err(1, "%s", RPCBINDDLOCK);
+               err(EXIT_FAILURE, "%s", RPCBINDDLOCK);
 
        if (flock(rpcbindlockfd, LOCK_EX|LOCK_NB) == -1 && errno == EWOULDBLOCK)
-               errx(1, "another rpcbind is already running. Aborting");
+               errx(EXIT_FAILURE,
+                   "another rpcbind is already running. Aborting");
 
        if (geteuid()) /* This command allowed only to root */
                errx(EXIT_FAILURE, "Sorry. You are not superuser\n");
@@ -360,12 +361,18 @@
        }
 
        if (strcmp(nconf->nc_netid, "local") != 0) {
+               char **nhp;
                /*
                 * If no hosts were specified, just bind to INADDR_ANY.
                 * Otherwise  make sure 127.0.0.1 is added to the list.
                 */
                nhostsbak = nhosts + 1;
-               hosts = realloc(hosts, nhostsbak * sizeof(char *));
+               nhp = realloc(hosts, nhostsbak * sizeof(*hosts));
+               if (nhp == NULL) {
+                       syslog(LOG_ERR, "Can't grow hosts array");
+                       return 1;
+               }
+               hosts = nhp;
                if (nhostsbak == 1)
                        hosts[0] = __UNCONST("*");
                else {
@@ -583,7 +590,7 @@
                            nconf->nc_netid);
                        goto error;
                }
-               pml = malloc(sizeof (struct pmaplist));
+               pml = malloc(sizeof(*pml));
                if (pml == NULL) {
                        syslog(LOG_ERR, "Cannot allocate memory");
                        goto error;
@@ -637,7 +644,7 @@
                list_pml = pml;
 
                /* Add version 3 information */
-               pml = malloc(sizeof (struct pmaplist));
+               pml = malloc(sizeof(*pml));
                if (pml == NULL) {
                        syslog(LOG_ERR, "Cannot allocate memory");
                        goto error;
@@ -648,7 +655,7 @@
                list_pml = pml;
 
                /* Add version 4 information */
-               pml = malloc(sizeof (struct pmaplist));
+               pml = malloc(sizeof(*pml));
                if (pml == NULL) {
                        syslog(LOG_ERR, "Cannot allocate memory");
                        goto error;
@@ -742,13 +749,17 @@
 
        if (nhosts == 0)
                return;
-       bound_sa = malloc(sizeof(*bound_sa) * nhosts);
+       bound_sa = calloc(nhosts, sizeof(*bound_sa));
+       if (bound_sa == NULL)
+               err(EXIT_FAILURE, "no space for bound address array");
        memset(&hints, 0, sizeof(hints));
        hints.ai_family = PF_UNSPEC;
        for (i = 0; i < nhosts; i++)  {
                if (getaddrinfo(hosts[i], NULL, &hints, &res) != 0)
                        continue;
                bound_sa[i] = malloc(res->ai_addrlen);
+               if (bound_sa[i] == NULL)
+                   err(EXIT_FAILURE, "no space for bound address");
                memcpy(bound_sa[i], res->ai_addr, res->ai_addrlen);
        }
 }
@@ -801,7 +812,7 @@
 {
        rpcblist_ptr rbl;
 
-       rbl = malloc(sizeof(rpcblist));
+       rbl = malloc(sizeof(*rbl));
        if (rbl == NULL) {
                syslog(LOG_ERR, "Out of memory");
                return;
@@ -878,12 +889,12 @@
                        break;
                case 'h':
                        ++nhosts;
-                       hosts = realloc(hosts, nhosts * sizeof(char *));
+                       hosts = realloc(hosts, nhosts * sizeof(*hosts));
                        if (hosts == NULL)
-                               errx(1, "Out of memory");
+                               err(EXIT_FAILURE, "Can't allocate host array");
                        hosts[nhosts - 1] = strdup(optarg);
                        if (hosts[nhosts - 1] == NULL)
-                               errx(1, "Out of memory");
+                               err(EXIT_FAILURE, "Can't allocate host");
                        break;
                case 'i':
                        insecure = 1;
diff -r 88af007f4249 -r 4f2d69c078e3 usr.sbin/rpcbind/util.c
--- a/usr.sbin/rpcbind/util.c   Thu Jan 03 18:28:21 2019 +0000
+++ b/usr.sbin/rpcbind/util.c   Thu Jan 03 19:04:21 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: util.c,v 1.21 2017/08/16 08:44:40 christos Exp $       */
+/*     $NetBSD: util.c,v 1.22 2019/01/03 19:04:21 christos Exp $       */
 /* $FreeBSD: head/usr.sbin/rpcbind/util.c 300973 2016-05-29 20:28:01Z ngie $ */
 
 /*-
@@ -145,8 +145,11 @@
                        return strdup(serv_uaddr);
                }
        } else {
-               clnt_sa = (struct sockaddr *)
-                   malloc(sizeof (struct sockaddr_storage));
+               clnt_sa = malloc(sizeof(*clnt_sa));
+               if (clnt_sa == NULL) {
+                       free(serv_nbp);
+                       return NULL;
+               }
                memcpy(clnt_sa, clnt, clnt->sa_len);
        }
 
@@ -313,7 +316,7 @@
                        fprintf(stderr, "can't get local ip4 address: %s\n",
                            gai_strerror(ecode));
        } else {
-               local_in4 = (struct sockaddr_in *)malloc(sizeof *local_in4);
+               local_in4 = malloc(sizeof(*local_in4));
                if (local_in4 == NULL) {
                        if (debugging)
                                fprintf(stderr, "can't alloc local ip4 addr\n");
@@ -328,7 +331,7 @@
                        fprintf(stderr, "can't get local ip6 address: %s\n",
                            gai_strerror(ecode));
        } else {
-               local_in6 = (struct sockaddr_in6 *)malloc(sizeof *local_in6);
+               local_in6 = malloc(sizeof(*local_in6));
                if (local_in6 == NULL) {
                        if (debugging)
                                fprintf(stderr, "can't alloc local ip6 addr\n");



Home | Main Index | Thread Index | Old Index