Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 31 Jul 2008 12:32:46 +0200
From:      Patrick =?ISO-8859-15?Q?Lamaizi=E8re?= <patfbsd@davenulle.org>
To:        Pawel Jakub Dawidek <pjd@FreeBSD.org>
Cc:        current@freebsd.org
Subject:   Re: Recent Padlock changes break ssh
Message-ID:  <20080731123246.365d0b1f@baby-jane-lamaiziere-net.local>
In-Reply-To: <20080722081449.GA3241@garage.freebsd.pl>
References:  <E1KLA49-0000W2-I1@clue.co.za> <20080722081449.GA3241@garage.freebsd.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
Le Tue, 22 Jul 2008 10:14:49 +0200,
Pawel Jakub Dawidek <pjd@FreeBSD.org> a écrit :

Hello,

> Could you try this patch? Those are the only changes that could
> eventually change the behaviour.
> 
> 	http://people.freebsd.org/~pjd/patches/padlock.c.patch
> 

I think that one problem is that the session id (ses->ses_id) is not
updated when a free session is reused. The session id is set to zero by
bzero() in padlock_freesession(). So we can have several active
sessions with the same ses->ses_id == 0 if the sessions are reused.

padlock_freession()
 	padlock_hash_free(ses);
 	bzero(ses, sizeof(*ses));
 	ses->ses_used = 0;
	TAILQ_INSERT_HEAD(&sc->sc_sessions, ses, ses_next);

and in padlock_newsession()
	/*
	 * Free sessions goes first, so if first session is used, we
need to
	 * allocate one.
	 */
	ses = TAILQ_FIRST(&sc->sc_sessions);
	if (ses == NULL || ses->ses_used)
		ses = NULL;
	else {
		TAILQ_REMOVE(&sc->sc_sessions, ses, ses_next);
		ses->ses_used = 1;
+		ses->ses_id = sc->sc_sid++;
		TAILQ_INSERT_TAIL(&sc->sc_sessions, ses, ses_next);
	}


Regards.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080731123246.365d0b1f>