nss_winbind is not thread safe, any suggestions to fix this?

Jeremy Allison jra at samba.org
Thu Sep 20 11:25:55 GMT 2007


On Thu, Sep 20, 2007 at 06:59:49PM +0800, boyang wrote:
> Hi, all:
>       libnss_winbind is not thread safe, the following steps and result
> can explain it.
>      
> To reproduce it:
> 
> write some junk code and tune the process time of winbindd:
> Two threads are used in reproduce it.
> 
> 1. at second 0, call getpwnam_r
> 2. at second 1, call getgrgid_r
> 3. at second 2, winbindd daemon process GETPWNAM request, ie, sleep(1) after    
>    receive GETPWNAM request
> 4. at second 3, thread getgrgid_r become active again after sleep(2), and
>    try to read the result(it is actually the result of getpwnam_r)
> 5. at second 4, winbindd deamon process GETGRGID request, ie sleep(3)after
> receive
>    GETGRGID request
> 6. at second 5, thread getpwnam_r become active again after sleep(5), and try
> to 
>    read the result(actually the result of getgrgid_r)
> 
> I have enlarged the time ticks to explain the race condition situation.
> Generally speaking, the response of the two request in corresponding thread can
> be messed. request 1 get the response of request2 and request2 get the response
> of request1.

Yes, if we export a _r function we must ensure it's thread-safe, even
if we merely add a 'global' mutex around the call.

Jeremy.


More information about the samba-technical mailing list