diff options
author | kato <kato@FreeBSD.org> | 1998-02-07 01:36:24 +0000 |
---|---|---|
committer | kato <kato@FreeBSD.org> | 1998-02-07 01:36:24 +0000 |
commit | 0511880d25a97d12093ac2652b29266fa6f86f9e (patch) | |
tree | 3eb678342c3f7ae36eaf678b061dff7215956926 /sys/fs/umapfs | |
parent | 3fac3de4d10d3f56b44d3b1414f4c1da5049e48d (diff) | |
download | FreeBSD-src-0511880d25a97d12093ac2652b29266fa6f86f9e.zip FreeBSD-src-0511880d25a97d12093ac2652b29266fa6f86f9e.tar.gz |
Fixed pagefault when cred == NOCRED.
PR: 5632
Diffstat (limited to 'sys/fs/umapfs')
-rw-r--r-- | sys/fs/umapfs/umap_subr.c | 5 | ||||
-rw-r--r-- | sys/fs/umapfs/umap_vnops.c | 33 |
2 files changed, 24 insertions, 14 deletions
diff --git a/sys/fs/umapfs/umap_subr.c b/sys/fs/umapfs/umap_subr.c index a74b3eb..549d3e4 100644 --- a/sys/fs/umapfs/umap_subr.c +++ b/sys/fs/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/fs/umapfs/umap_vnops.c b/sys/fs/umapfs/umap_vnops.c index 0f97a9a..f37e4c7 100644 --- a/sys/fs/umapfs/umap_vnops.c +++ b/sys/fs/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); |