diff options
author | John Baldwin <jhb@FreeBSD.org> | 2000-12-15 19:41:27 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2000-12-15 19:41:27 +0000 |
commit | 216af8221ed4f3da2df4de2c799f80ebdee0dd39 (patch) | |
tree | 746ca89c538ca292e1f2c1d63c33b98f06bbf034 /sys/compat/linux/linux_util.c | |
parent | 48ecc0129d60b7b3049cbf425f004c9532695606 (diff) | |
download | src-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.c | 13 |
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; } |