UNIX domain sockets on nullfs still broken?
Robert Watson
rwatson at FreeBSD.org
Thu Dec 10 09:47:55 UTC 2009
On Thu, 10 Dec 2009, Robert Watson wrote:
> On Mon, 30 Nov 2009, xorquewasp at googlemail.com wrote:
>
>> jackd (audio/jack) creates a directory in /tmp with a UNIX domain socket in
>> it. Clients connect to this socket to communicate with the server.
>
> We currently support the sharing of UNIX domain sockets between file system
> layers on either nullfs or unionfs. In the former case, this is a bug, and
Should read "neither ... nor".
Robert N M Watson
Computer Laboratory
University of Cambridge
> in the latter case, it is a feature.
>
> The specific nature of the bug is that you can't just copy the socket pointer
> between layers in the vnode stack without additional reference counting (and
> other similar state propagation), so if we allowed inter-layer access it
> would lead to use-after-free panics and similar sorts of problems.
>
> This occurs, BTW, because the socket pointer is directly in struct vnode, and
> not queried by a VOP, which could be forwarded by nullfs down a layer. The
> fixes here aren't easy, so I would anticipate UNIX domain sockets not working
> across nullfs layers for some time to come. It's not immediately clear to me
> which approach is the best way to fix it, since it likely requires UNIX
> domain sockets to learn about stacked file systems in some form, which will
> significantly complicate an already complicated relationship.
>
> Robert N M Watson
> Computer Laboratory
> University of Cambridge
>
>>
>> $ jackd -d oss -r 44100 -p 128
>> $ ls -alF /tmp/jack-11001/default
>> total 4
>> drwx------ 2 xw wheel 512 30 Nov 14:19 ./
>> drwx------ 3 xw wheel 512 30 Nov 14:19 ../
>> prw-r--r-- 1 xw wheel 0 30 Nov 14:19 jack-ack-fifo-54211-0|
>> prw-r--r-- 1 xw wheel 0 30 Nov 14:19 jack-ack-fifo-54211-1|
>> prw-r--r-- 1 xw wheel 0 30 Nov 14:19 jack-ack-fifo-54211-2|
>> srwxr-xr-x 1 xw wheel 0 30 Nov 14:19 jack_0=
>> srwxr-xr-x 1 xw wheel 0 30 Nov 14:19 jack_ack_0=
>>
>> $ sudo mount_nullfs /tmp/ /jail/k4m/tmp
>>
>> In the jail:
>>
>> k4m$ ls -alF /tmp/jack-11001/default
>> drwx------ 2 xw wheel 512 30 Nov 14:19 ./
>> drwx------ 3 xw wheel 512 30 Nov 14:19 ../
>> prw-r--r-- 1 xw wheel 0 30 Nov 14:19 jack-ack-fifo-54211-0|
>> prw-r--r-- 1 xw wheel 0 30 Nov 14:19 jack-ack-fifo-54211-1|
>> prw-r--r-- 1 xw wheel 0 30 Nov 14:19 jack-ack-fifo-54211-2|
>> srwxr-xr-x 1 xw wheel 0 30 Nov 14:19 jack_0=
>> srwxr-xr-x 1 xw wheel 0 30 Nov 14:19 jack_ack_0=
>>
>> k4m$ ktrace jack_showtime
>> jack server not running?
>>
>> k4m$ kdump | grep '/tmp/jack-11001'
>> 76030 initial thread STRU struct sockaddr { AF_LOCAL,
>> /tmp/jack-11001/default/jack_0 }
>> 76030 initial thread NAMI "/tmp/jack-11001/default/jack_0"
>> 76030 initial thread RET connect -1 errno 61 Connection refused
>>
>> $ uname -a
>> FreeBSD viper.internal.network 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov
>> 21 15:02:08 UTC 2009
>> root at mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>>
>> xw
>> _______________________________________________
>> freebsd-hackers at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>>
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>
More information about the freebsd-hackers
mailing list