On Wed, Mar 10, 2010 at 08:57:29AM -0800, melbogia wrote:
> Hello Jan,
> This is a 2009.06 snv_111b X86
> 
> and the exported filesystem..
> /datapool/dumps/archive -       nfs     
> sec=sys,ro,rw=shotgun.lab.example.com,root=shotgun.lab.example.com
> 
> So it's exported as read-only to everything but shotgun.lab.example.com, the 
> read-write client isn't seem to be having any problems.
> 
> >Also output of '::stack' and '::status' mdb commands on core dump
> >could help.
> 
> root at fortress:/# mdb core.mountd.1268185359
> Loading modules: [ ld.so.1 ]
> > ::stack
> in_access_list+0x69(fe99eadc, 0, 80cdf56, 0)

This piece of code has changed recently so we need to dive a bit into the 
history.

It seems the in_access_list() get called with the second parameter (called 
clnames)
set to NULL:

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/fs.d/nfs/mountd/mountd.c?r=7997%3A2477fa9c180a#1353

And the mountd segfaulted at line 1391 where the clnames is dereferenced.

The in_access_list() is called from three places in the check_client_new():

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/fs.d/nfs/mountd/mountd.c?r=7997%3A2477fa9c180a#1923

> check_client_new+0xd3(80e79b8, fe99eadc, 0, 1)

In all cases we are passing the clnames verbatim from the check_client_new()
call (it is third parameter there). And it is zero.

The check_client_new() is called from check_client() - clnames is third
parameter of check_client().

> nfsauth_access+0x13a(fe99ed34, fe99ed20, 44, 1)

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/fs.d/nfs/mountd/nfsauth.c?r=7387%3A0b3a92e31fd8#53

check_client() is called at line 106. There is missing check for NULL clnames
before the line 106.

This is already fixed in snv_117 (it is CR 6523693) as you can see in the
latest version of the nfsauth.c file:

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/fs.d/nfs/mountd/nfsauth.c#102

So the solution seems to be to update to something never than build 111b.


HTH.

> nfsauth_func+0x9c(0, fe99edbc, 44, 0, 0, 805847c)
> libc_hwcap2.so.1`__door_return+0x52()
> >
> >
> > ::status
> debugging core file of mountd (32-bit) from fortress
> file: /usr/lib/nfs/mountd
> initial argv: /usr/lib/nfs/mountd
> threading model: native threads
> status: process terminated by SIGSEGV (Segmentation Fault), addr=0

-- 
Marcel Telka
RPE, Systems

Reply via email to