Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/netinet



On Sun, Nov 09, 2008 at 06:35:33PM +0100, Christoph Egger wrote:
> Manuel Bouyer wrote:
> > Module Name:        src
> > Committed By:       bouyer
> > Date:               Sun Nov  9 17:32:38 UTC 2008
> > 
> > Modified Files:
> >     src/sys/netinet: tcp_timer.c
> > 
> > Log Message:
> > Fix kern/39769: race condition in TCP timers
> > When a TCP timer is disarmed (with callout_stop()) in the general case
> > callout_invoking() isn't checked, so the timer handler could be called run
> > when the current interrupt handler exits, athough the timer is disarmed.
> > This case cause bad things like TCPT_REXMT and TCPT_PERSIST being both 
> > pending,
> > causing a panic (see the PR for details).
> > Close the issue by aborting the handler if the timer is not 
> > callout_expired().
> > (the EXPIRED flag being cleared by callout_stop()).
> 
> Does this also fix PR 39655 (the TCP part) ?

It's not clear. The only way the timers could have callout_destroyed is if
tcp_close had already been called. If tcp_timer_2msl() is called at the
wrong time it could maybe do it.
I didn't look at the path in details to see if the extra call to tcp_close()
could be from e.g. tcp_input().

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--


Home | Main Index | Thread Index | Old Index