From 051819b84758e212ecd632e9bd6f47e70f37aa3a Mon Sep 17 00:00:00 2001 From: rwatson Date: Sat, 5 Jul 2008 13:10:10 +0000 Subject: Introduce a new lock, hostname_mtx, and use it to synchronize access to global hostname and domainname variables. Where necessary, copy to or from a stack-local buffer before performing copyin() or copyout(). A few uses, such as in cd9660 and daemon_saver, remain under-synchronized and will require further updates. Correct a bug in which a failed copyin() of domainname would leave domainname potentially corrupted. MFC after: 3 weeks --- sys/nlm/nlm_advlock.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'sys/nlm/nlm_advlock.c') diff --git a/sys/nlm/nlm_advlock.c b/sys/nlm/nlm_advlock.c index fb8b5a7..5d1cc83 100644 --- a/sys/nlm/nlm_advlock.c +++ b/sys/nlm/nlm_advlock.c @@ -230,7 +230,9 @@ nlm_advlock_internal(struct vnode *vp, void *id, int op, struct flock *fl, sa = nmp->nm_nam; memcpy(&ss, sa, sa->sa_len); sa = (struct sockaddr *) &ss; + mtx_lock(&hostname_mtx); strcpy(servername, nmp->nm_hostname); + mtx_unlock(&hostname_mtx); fhlen = np->n_fhsize; memcpy(&fh.fh_bytes, np->n_fhp, fhlen); timo.tv_sec = nmp->nm_timeo / NFS_HZ; @@ -1218,7 +1220,9 @@ nlm_init_lock(struct flock *fl, int flags, int svid, return (EOVERFLOW); } + mtx_lock(&hostname_mtx); snprintf(oh_space, 32, "%d@%s", svid, hostname); + mtx_unlock(&hostname_mtx); oh_len = strlen(oh_space); memset(lock, 0, sizeof(*lock)); -- cgit v1.1