summaryrefslogtreecommitdiffstats
path: root/sys/miscfs/umapfs
diff options
context:
space:
mode:
authorkato <kato@FreeBSD.org>1998-02-07 01:36:24 +0000
committerkato <kato@FreeBSD.org>1998-02-07 01:36:24 +0000
commit0511880d25a97d12093ac2652b29266fa6f86f9e (patch)
tree3eb678342c3f7ae36eaf678b061dff7215956926 /sys/miscfs/umapfs
parent3fac3de4d10d3f56b44d3b1414f4c1da5049e48d (diff)
downloadFreeBSD-src-0511880d25a97d12093ac2652b29266fa6f86f9e.zip
FreeBSD-src-0511880d25a97d12093ac2652b29266fa6f86f9e.tar.gz
Fixed pagefault when cred == NOCRED.
PR: 5632
Diffstat (limited to 'sys/miscfs/umapfs')
-rw-r--r--sys/miscfs/umapfs/umap_subr.c5
-rw-r--r--sys/miscfs/umapfs/umap_vnops.c33
2 files changed, 24 insertions, 14 deletions
diff --git a/sys/miscfs/umapfs/umap_subr.c b/sys/miscfs/umapfs/umap_subr.c
index a74b3eb..549d3e4 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 0f97a9a..f37e4c7 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);
OpenPOWER on IntegriCloud