diff options
author | KATO Takenori <kato@FreeBSD.org> | 1998-02-07 01:36:24 +0000 |
---|---|---|
committer | KATO Takenori <kato@FreeBSD.org> | 1998-02-07 01:36:24 +0000 |
commit | ca6f8688241081f3f673c72326bdc558b8025555 (patch) | |
tree | f1963b141fddbd9dfcc5732f2b4c6cddebe498fa /sys/miscfs/umapfs | |
parent | 39ca14f0327c8478ea1362452e4ac02304fd2ca0 (diff) | |
download | src-ca6f8688241081f3f673c72326bdc558b8025555.tar.gz src-ca6f8688241081f3f673c72326bdc558b8025555.zip |
Fixed pagefault when cred == NOCRED.
PR: 5632
Notes
Notes:
svn path=/head/; revision=33146
Diffstat (limited to 'sys/miscfs/umapfs')
-rw-r--r-- | sys/miscfs/umapfs/umap_subr.c | 5 | ||||
-rw-r--r-- | sys/miscfs/umapfs/umap_vnops.c | 33 |
2 files changed, 24 insertions, 14 deletions
diff --git a/sys/miscfs/umapfs/umap_subr.c b/sys/miscfs/umapfs/umap_subr.c index a74b3eb10215..549d3e4b0b03 100644 --- a/sys/miscfs/umapfs/umap_subr.c +++ b/sys/miscfs/umapfs/umap_subr.c @@ -35,7 +35,7 @@ * * @(#)umap_subr.c 8.9 (Berkeley) 5/14/95 * - * $Id: umap_subr.c,v 1.10 1997/02/22 09:40:37 peter Exp $ + * $Id: umap_subr.c,v 1.11 1997/08/02 14:32:24 bde Exp $ */ #include <sys/param.h> @@ -356,6 +356,9 @@ umap_mapids(v_mount, credp) uid_t uid; gid_t gid; + if (credp == NOCRED) + return; + unentries = MOUNTTOUMAPMOUNT(v_mount)->info_nentries; usermap = &(MOUNTTOUMAPMOUNT(v_mount)->info_mapdata[0][0]); gnentries = MOUNTTOUMAPMOUNT(v_mount)->info_gnentries; diff --git a/sys/miscfs/umapfs/umap_vnops.c b/sys/miscfs/umapfs/umap_vnops.c index 0f97a9aa5b2e..f37e4c748840 100644 --- a/sys/miscfs/umapfs/umap_vnops.c +++ b/sys/miscfs/umapfs/umap_vnops.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)umap_vnops.c 8.6 (Berkeley) 5/22/95 - * $Id: umap_vnops.c,v 1.21 1997/10/15 10:04:48 phk Exp $ + * $Id: umap_vnops.c,v 1.22 1997/10/21 21:08:17 roberto Exp $ */ /* @@ -149,7 +149,8 @@ umap_bypass(ap) /* Save old values */ savecredp = (*credpp); - (*credpp) = crdup(savecredp); + if (savecredp != NOCRED) + (*credpp) = crdup(savecredp); credp = *credpp; if (umap_bug_bypass && credp->cr_uid != 0) @@ -176,7 +177,9 @@ umap_bypass(ap) compcredp = (*compnamepp)->cn_cred; savecompcredp = compcredp; - compcredp = (*compnamepp)->cn_cred = crdup(savecompcredp); + if (savecompcredp != NOCRED) + (*compnamepp)->cn_cred = crdup(savecompcredp); + compcredp = (*compnamepp)->cn_cred; if (umap_bug_bypass && compcredp->cr_uid != 0) printf("umap_bypass: component credit user was %ld, group %ld\n", @@ -238,11 +241,13 @@ umap_bypass(ap) printf("umap_bypass: returning-user was %ld\n", credp->cr_uid); - crfree(credp); - (*credpp) = savecredp; - if (umap_bug_bypass && credpp && (*credpp)->cr_uid != 0) - printf("umap_bypass: returning-user now %ld\n\n", - (*credpp)->cr_uid); + if (savecredp != NOCRED) { + crfree(credp); + (*credpp) = savecredp; + if (umap_bug_bypass && credpp && (*credpp)->cr_uid != 0) + printf("umap_bypass: returning-user now %ld\n\n", + (*credpp)->cr_uid); + } } if (descp->vdesc_componentname_offset != VDESC_NO_OFFSET) { @@ -250,11 +255,13 @@ umap_bypass(ap) printf("umap_bypass: returning-component-user was %ld\n", compcredp->cr_uid); - crfree(compcredp); - (*compnamepp)->cn_cred = savecompcredp; - if (umap_bug_bypass && credpp && (*credpp)->cr_uid != 0) - printf("umap_bypass: returning-component-user now %ld\n", - compcredp->cr_uid); + if (savecompcredp != NOCRED) { + crfree(compcredp); + (*compnamepp)->cn_cred = savecompcredp; + if (umap_bug_bypass && credpp && (*credpp)->cr_uid != 0) + printf("umap_bypass: returning-component-user now %ld\n", + compcredp->cr_uid); + } } return (error); |