[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Reauthentication implementation flaw due to EINTR
From: |
Da Zheng |
Subject: |
Re: Reauthentication implementation flaw due to EINTR |
Date: |
Mon, 28 Dec 2009 17:58:26 +0800 |
User-agent: |
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.5) Gecko/20091204 Thunderbird/3.0 |
Hi,
On 09-12-22 上午3:43, Samuel Thibault wrote:
> Hello,
>
> I had been noticing odd issues with sudo when it calls setresuid &
> such, it took me some time to understand that there was a flaw in the
> reauthentication implementation:
>
> sudo calls setresuid(), which calls setauth(), which (for each FD &
> such) allocates a rendez-vous port, calls io_reauthenticate() (RPC
> in the underlying FS which calls the auth_server_authenticate()
> RPC) and calls the auth_user_authenticate() RPC. These last two
> RPCs end up in auth, which uses the rendez-vous port passed along
> to make the match. Whichever arrives first leaves information and a
> condition variable for the other ; when the latter arrives, it fills its
> information and wakes the former.
>
> The issue is that currently, once the user part gets its passthrough
> port from the server part, it returns immediately, and setauth() drops
> the rendez-vous port, which actually interrupts the server RPCs because
> the rendez-vous sender right becomes dead. Quite often scheduling makes
> it so that the user is not so fast and the server has time to finish its
> duties, but due to the high usage of setresuid in sudo, one every few
> tens of sudo calls fail.
>
> The fix I'll use at least on the Debian buildds for now is to make the
> auth_user_authenticate() RPC always wait for auth_server_authenticate()
> to have called auth_server_authenticate_reply() before returning. I've
> been running that in a tight loop the whole afternoon with no issue, so
> at least it seems to work much better. However, I'd prefer to make sure
> that it works _always_ :)
I wonder if this bug causes my modified subhurd to hang in the place where
`login` is executed. In the modified subhurd, all RPCs are forwarded to `boot`.
Maybe it magnifies the problem here.
Samuel, could you send me your fix? I want to see if your patch can make it
work.
Thanks,
Zheng Da
- Re: Reauthentication implementation flaw due to EINTR, (continued)
- Re: Reauthentication implementation flaw due to EINTR, Samuel Thibault, 2009/12/30
- Re: Reauthentication implementation flaw due to EINTR, Da Zheng, 2009/12/28
- Re: Reauthentication implementation flaw due to EINTR, Samuel Thibault, 2009/12/28
- Re: Reauthentication implementation flaw due to EINTR, Samuel Thibault, 2009/12/28
- Re: Reauthentication implementation flaw due to EINTR, Da Zheng, 2009/12/28
- Re: Reauthentication implementation flaw due to EINTR, Samuel Thibault, 2009/12/28
- Re: Reauthentication implementation flaw due to EINTR, Da Zheng, 2009/12/28
- Re: Reauthentication implementation flaw due to EINTR, Samuel Thibault, 2009/12/28
Re: Reauthentication implementation flaw due to EINTR, Da Zheng, 2009/12/28
Re: Reauthentication implementation flaw due to EINTR,
Da Zheng <=