Date: Tue, 29 Apr 2003 17:24:44 +0400 (MSD) From: Dmitry Sivachenko <mitya@demos.su> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/51583: [PATCH] allow to work with devices and sockets over nullfs Message-ID: <200304291324.h3TDOiIc000627@tear.demos.su> Resent-Message-ID: <200304291330.h3TDU4fC082924@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 51583 >Category: kern >Synopsis: [PATCH] allow to work with devices and sockets over nullfs >Confidential: no >Severity: serious >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Apr 29 06:30:03 PDT 2003 >Closed-Date: >Last-Modified: >Originator: Dmitry Sivachenko >Release: FreeBSD 5.0-CURRENT i386 >Organization: >Environment: System: FreeBSD tear.demos.su 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Tue Apr 29 10:41:13 MSD 2003 mitya@tear.demos.su:/usr/src/sys/i386/compile/TEAR i386 This problem exists on both -STABLE and -CURRENT. >Description: 1) The system may panic when accessing devices over nullfs: mount_null(fs) /dev /mnt dd if=/mnt/zero of=/tmp/t.dat The system will panic. 2) It is impossible to work with unix sockets (PF_LOCAL) over nullfs: To reproduce: start mysqld. It creates socket /tmp/mysql.sock to communicate with local mysql client. mount_null(fs) /tmp /mnt Try to use this socket: mysql -S /mnt/mysql.sock mysql Connection to mysqld will fail. >How-To-Repeat: >Fix: I am attaching patches for both -current and -stable. I am not sure how correct they are, but they do work. -STABLE: --- null_subr.c.orig Tue Apr 29 17:20:44 2003 +++ null_subr.c Tue Apr 29 16:23:19 2003 @@ -177,6 +177,10 @@ null_node_alloc(mp, lowervp, vpp) vp = *vpp; vp->v_type = lowervp->v_type; + if (vp->v_type == VCHR || vp->v_type == VBLK) + addalias(vp, lowervp->v_un.vu_spec.vu_specinfo); + else + vp->v_un = lowervp->v_un; lockinit(&xp->null_lock, PINOD, "nullnode", 0, LK_CANRECURSE); xp->null_vnode = vp; vp->v_data = xp; -CURRENT: --- null_subr.c Tue Apr 29 17:18:30 2003 +++ null_subr.c.new Tue Apr 29 17:11:37 2003 @@ -73,6 +73,7 @@ MALLOC_DEFINE(M_NULLFSNODE, "NULLFS node static struct vnode * null_hashget(struct vnode *); static struct vnode * null_hashins(struct null_node *); +extern void addalias(struct vnode *vp, dev_t nvp_rdev); /* * Initialise cache headers @@ -224,6 +225,10 @@ null_nodeget(mp, lowervp, vpp) xp->null_lowervp = lowervp; vp->v_type = lowervp->v_type; + if (vp->v_type == VCHR || vp->v_type == VBLK) + addalias(vp, lowervp->v_un.vu_spec.vu_cdev); + else + vp->v_un = lowervp->v_un; vp->v_data = xp; /* >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200304291324.h3TDOiIc000627>