summaryrefslogtreecommitdiffstats
path: root/sys/compat/svr4
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-07-19 19:03:03 +0000
committerjhb <jhb@FreeBSD.org>2006-07-19 19:03:03 +0000
commit1dccc9f17aa2ad80007dd564c30daa2292a7ae84 (patch)
tree2e07b9f7dadec408604596c4ca057b058f2ed6bb /sys/compat/svr4
parent3d1ab82c4816a3893e91906910592cde15970307 (diff)
downloadFreeBSD-src-1dccc9f17aa2ad80007dd564c30daa2292a7ae84.zip
FreeBSD-src-1dccc9f17aa2ad80007dd564c30daa2292a7ae84.tar.gz
Add conditional VFS Giant locking to svr4_sys_resolvepath() and mark it
MPSAFE.
Diffstat (limited to 'sys/compat/svr4')
-rw-r--r--sys/compat/svr4/svr4_misc.c5
-rw-r--r--sys/compat/svr4/syscalls.master2
2 files changed, 5 insertions, 2 deletions
diff --git a/sys/compat/svr4/svr4_misc.c b/sys/compat/svr4/svr4_misc.c
index 953a31d..fea3608 100644
--- a/sys/compat/svr4/svr4_misc.c
+++ b/sys/compat/svr4/svr4_misc.c
@@ -1600,12 +1600,14 @@ svr4_sys_resolvepath(td, uap)
struct nameidata nd;
int error, *retval = td->td_retval;
unsigned int ncopy;
+ int vfslocked;
- NDINIT(&nd, LOOKUP, NOFOLLOW | SAVENAME, UIO_USERSPACE,
+ NDINIT(&nd, LOOKUP, NOFOLLOW | SAVENAME | MPSAFE, UIO_USERSPACE,
uap->path, td);
if ((error = namei(&nd)) != 0)
return error;
+ vfslocked = NDHASGIANT(&nd);
ncopy = min(uap->bufsiz, strlen(nd.ni_cnd.cn_pnbuf) + 1);
if ((error = copyout(nd.ni_cnd.cn_pnbuf, uap->buf, ncopy)) != 0)
@@ -1615,5 +1617,6 @@ svr4_sys_resolvepath(td, uap)
bad:
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(nd.ni_vp);
+ VFS_UNLOCK_GIANT(vfslocked);
return error;
}
diff --git a/sys/compat/svr4/syscalls.master b/sys/compat/svr4/syscalls.master
index ba7af09..a5d6a94 100644
--- a/sys/compat/svr4/syscalls.master
+++ b/sys/compat/svr4/syscalls.master
@@ -320,7 +320,7 @@
206 AUE_NULL UNIMPL schedctl
207 AUE_NULL UNIMPL pset
208 AUE_NULL UNIMPL whoknows
-209 AUE_NULL STD { int svr4_sys_resolvepath(const char *path, \
+209 AUE_NULL MSTD { int svr4_sys_resolvepath(const char *path, \
char *buf, size_t bufsiz); }
210 AUE_NULL UNIMPL signotifywait
211 AUE_NULL UNIMPL lwp_sigredirect
OpenPOWER on IntegriCloud