aboutsummaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux_util.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2000-12-15 19:41:27 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2000-12-15 19:41:27 +0000
commit216af8221ed4f3da2df4de2c799f80ebdee0dd39 (patch)
tree746ca89c538ca292e1f2c1d63c33b98f06bbf034 /sys/compat/linux/linux_util.c
parent48ecc0129d60b7b3049cbf425f004c9532695606 (diff)
downloadsrc-216af8221ed4f3da2df4de2c799f80ebdee0dd39.tar.gz
src-216af8221ed4f3da2df4de2c799f80ebdee0dd39.zip
Lock access to proc members.
Glanced over by: marcel
Notes
Notes: svn path=/head/; revision=70061
Diffstat (limited to 'sys/compat/linux/linux_util.c')
-rw-r--r--sys/compat/linux/linux_util.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/compat/linux/linux_util.c b/sys/compat/linux/linux_util.c
index 6399805a3037..f4fe8d7d4925 100644
--- a/sys/compat/linux/linux_util.c
+++ b/sys/compat/linux/linux_util.c
@@ -62,6 +62,7 @@ linux_emul_find(p, sgp, prefix, path, pbuf, cflag)
struct nameidata ndroot;
struct vattr vat;
struct vattr vatroot;
+ struct ucred *uc;
int error;
char *ptr, *buf, *cp;
size_t sz, len;
@@ -140,12 +141,18 @@ linux_emul_find(p, sgp, prefix, path, pbuf, cflag)
return error;
}
- if ((error = VOP_GETATTR(nd.ni_vp, &vat, p->p_ucred, p)) != 0) {
+ PROC_LOCK(p);
+ uc = p->p_ucred;
+ crhold(uc);
+ PROC_UNLOCK(p);
+ if ((error = VOP_GETATTR(nd.ni_vp, &vat, uc, p)) != 0) {
+ crfree(uc);
goto bad;
}
- if ((error = VOP_GETATTR(ndroot.ni_vp, &vatroot, p->p_ucred, p))
- != 0) {
+ error = VOP_GETATTR(ndroot.ni_vp, &vatroot, uc, p);
+ crfree(uc);
+ if (error != 0) {
goto bad;
}