Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Oct 2001 21:43:55 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        <current@freebsd.org>
Cc:        <stable@freebsd.org>, <dillon@freebsd.org>, <alfred@freebsd.org>
Subject:   coredump() broken for nfs filesystems
Message-ID:  <20011015211333.B576-100000@delplex.bde.org>

next in thread | raw e-mail | index | archive | help
coredump() now usually creates empty core files for nfs filesystems.
This seems to be caused by the changes in rev.1.132 (-current) and
rev.1.72.2.9 (RELENG_4), and braindamage in nfs_dolock():

Index: kern_sig.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_sig.c,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -2 -r1.131 -r1.132
--- kern_sig.c	6 Sep 2001 22:20:41 -0000	1.131
+++ kern_sig.c	8 Sep 2001 20:02:32 -0000	1.132
> ...
@@ -1896,6 +1898,17 @@
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 	vp = nd.ni_vp;
+
+	VOP_UNLOCK(vp, 0, p);
+	lf.l_whence = SEEK_SET;
+	lf.l_start = 0;
+	lf.l_len = 0;
+	lf.l_type = F_WRLCK;
+	error = VOP_ADVLOCK(vp, (caddr_t)p, F_SETLK, &lf, F_FLOCK);
+	if (error)
+		goto out2;
+

This usually goes to out2 with error EOPNOTSUPP if the core file is on
an nfs filesystem.

From nfs_dolock():

%	/*
%	 * XXX Hack to temporarily allow this process (regardless of it's creds)
%	 * to open the fifo we need to write to. vn_open() really should
%	 * take a ucred (and once it does, this code should be fixed to use
%	 * proc0's ucred.
%	 */
%	saved_uid = p->p_ucred->cr_uid;
%	p->p_ucred->cr_uid = 0;		/* temporarly run the vn_open as root */
%
%	fmode = FFLAGS(O_WRONLY);
%	error = vn_open(&nd, &fmode, 0);

This vn_open() usually fails, because root is usually mapped so has even
less write permission than most users.  I don't see how nfs write locks can
work for syscalls either.

%	p->p_ucred->cr_uid = saved_uid;
%	if (error != 0) {
%		return (error == ENOENT ? EOPNOTSUPP : error);
%	}

EOPNOTSUPP is a strange error for foot shooting.

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011015211333.B576-100000>