summaryrefslogtreecommitdiff
path: root/usr/src/lib/libshare/nfs/libshare_nfs.c
diff options
context:
space:
mode:
authorKeith M Wesolowski <wesolows@foobazco.org>2014-06-16 17:13:14 +0000
committerKeith M Wesolowski <wesolows@foobazco.org>2014-06-16 17:13:14 +0000
commit5d5d7ec4bd43f2308e033025f87e4551c0af9129 (patch)
tree4658aee12f4b0b2093aecfd8b7391101797ae790 /usr/src/lib/libshare/nfs/libshare_nfs.c
parente021287ac435bc7b10008214f771978c6361dcd8 (diff)
parent33392354a001a7e6e504717bd3f249456d36cc00 (diff)
downloadillumos-joyent-5d5d7ec4bd43f2308e033025f87e4551c0af9129.tar.gz
[illumos-gate merge]
commit 33392354a001a7e6e504717bd3f249456d36cc00 4911 illumos-gate perl package version is fixed commit 3253d86fb73285619825921040bf0262898cf3f8 4917 libshare_nfs: s_rootnames leaks commit 6020a1b764797bc75c5b6bb622762df54ebc0ff3 4910 libshare_nfs: Memory leak in fill_security_from_secopts() Conflicts: usr/src/cmd/perl/Makefile.perl usr/src/Makefile.master (perl)
Diffstat (limited to 'usr/src/lib/libshare/nfs/libshare_nfs.c')
-rw-r--r--usr/src/lib/libshare/nfs/libshare_nfs.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/usr/src/lib/libshare/nfs/libshare_nfs.c b/usr/src/lib/libshare/nfs/libshare_nfs.c
index ccfd7f2990..3d781980ce 100644
--- a/usr/src/lib/libshare/nfs/libshare_nfs.c
+++ b/usr/src/lib/libshare/nfs/libshare_nfs.c
@@ -1042,14 +1042,17 @@ cleanup_export(struct exportdata *export)
{
int i;
- if (export->ex_index != NULL)
- free(export->ex_index);
- if (export->ex_secinfo != NULL) {
- for (i = 0; i < export->ex_seccnt; i++)
- if (export->ex_secinfo[i].s_rootnames != NULL)
- free(export->ex_secinfo[i].s_rootnames);
- free(export->ex_secinfo);
+ free(export->ex_index);
+
+ for (i = 0; i < export->ex_seccnt; i++) {
+ struct secinfo *s = &export->ex_secinfo[i];
+
+ while (s->s_rootcnt > 0)
+ free(s->s_rootnames[--s->s_rootcnt]);
+
+ free(s->s_rootnames);
}
+ free(export->ex_secinfo);
}
/*
@@ -1085,6 +1088,8 @@ get_rootnames(seconfig_t *sec, char *list, int *count)
for (i = 0; i < c; i++) {
host = strtok(list, ":");
if (!nfs_get_root_principal(sec, host, &a[i])) {
+ while (i > 0)
+ free(a[--i]);
free(a);
a = NULL;
break;
@@ -1151,7 +1156,7 @@ fill_security_from_secopts(struct secinfo *sp, sa_security_t secopts)
* such as RO/RW
*/
if (sp->s_secinfo.sc_rpcnum == AUTH_UNIX)
- continue;
+ break;
/* not AUTH_UNIX */
if (value != NULL) {
sp->s_rootnames = get_rootnames(&sp->s_secinfo,