summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormanu <manu@FreeBSD.org>2017-10-03 08:29:46 +0000
committermanu <manu@FreeBSD.org>2017-10-03 08:29:46 +0000
commit863da891811d3188bedc68580cb245c27c8367d5 (patch)
tree37bda38a674a57b3a3b86208718adb84727738d1
parente5f88890a0641bce34bdbee1cb26b62a9077fd60 (diff)
downloadFreeBSD-src-stable/11.zip
FreeBSD-src-stable/11.tar.gz
MFC r324007, r324012, r324014stable/11
r324007: mountd: Replace malloc+strcpy to strdup Reviewed by: bapt Sponsored by: Gandi.net Differential Revision: https://reviews.freebsd.org/D12503 r324012: mountd: Remove unneeded cast Reported by: kib X MFC With: r324007 r324014: mountd: Avoid memory leak by freeing dp_dirp Introduced in r324007, the data alloced by strdup was never free'ed. While here, remove cast to caddr_t when freeing dp. Reported by: bde X MFC With: r324007
-rw-r--r--usr.sbin/mountd/mountd.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c
index d893387..9111b58 100644
--- a/usr.sbin/mountd/mountd.c
+++ b/usr.sbin/mountd/mountd.c
@@ -101,7 +101,7 @@ struct dirlist {
struct dirlist *dp_right;
int dp_flag;
struct hostlist *dp_hosts; /* List of hosts this dir exported to */
- char dp_dirp[1]; /* Actually malloc'd to size of dir */
+ char *dp_dirp;
};
/* dp_flag bits */
#define DP_DEFSET 0x1
@@ -1525,12 +1525,8 @@ get_exportlist_one(void)
if (ep == (struct exportlist *)NULL) {
ep = get_exp();
ep->ex_fs = fsb.f_fsid;
- ep->ex_fsdir = (char *)malloc
- (strlen(fsb.f_mntonname) + 1);
- if (ep->ex_fsdir)
- strcpy(ep->ex_fsdir,
- fsb.f_mntonname);
- else
+ ep->ex_fsdir = strdup(fsb.f_mntonname);
+ if (ep->ex_fsdir == NULL)
out_of_mem();
if (debug)
warnx(
@@ -1940,14 +1936,16 @@ add_expdir(struct dirlist **dpp, char *cp, int len)
{
struct dirlist *dp;
- dp = (struct dirlist *)malloc(sizeof (struct dirlist) + len);
+ dp = malloc(sizeof (struct dirlist));
if (dp == (struct dirlist *)NULL)
out_of_mem();
dp->dp_left = *dpp;
dp->dp_right = (struct dirlist *)NULL;
dp->dp_flag = 0;
dp->dp_hosts = (struct hostlist *)NULL;
- strcpy(dp->dp_dirp, cp);
+ dp->dp_dirp = strndup(cp, len);
+ if (dp->dp_dirp == NULL)
+ out_of_mem();
*dpp = dp;
return (dp->dp_dirp);
}
@@ -2161,7 +2159,8 @@ free_dir(struct dirlist *dp)
free_dir(dp->dp_left);
free_dir(dp->dp_right);
free_host(dp->dp_hosts);
- free((caddr_t)dp);
+ free(dp->dp_dirp);
+ free(dp);
}
}
OpenPOWER on IntegriCloud