Subject: Re: xfrm: Fix initialize repl field of struct xfrm_state

From: Steffen Klassert <[email-masked]>
Date: Mon, 21 Mar 2011 08:54:21 +0100

Thanks for catching this!

On Mon, Mar 21, 2011 at 02:49:14PM +0800, Wei Yongjun wrote:
> > Ok, thanks for the explanation.
> >
> > I think there is a simple way out of this:
> >
> > 1) Rename current xfrm_init_state to __xfrm_init_state, add
> >    "bool init_replay" argument.  Add the xfrm_init_replay()
> >    call, as in your patch, but conditionalized on this boolean.
> >
> > 2) Implement xfrm_init_state as inline, which calls
> >    __xfrm_init_state(..., true)
> >
> > 3) Replace xfrm_init_state() call in xfrm_user.c with
> >    __xfrm_init_state(..., false)
> >
> > This seems to avoid all the problems.  We don't need to touch every
> > caller, and we avoid initializing the replay state twice in xfrm_user
> >
> > Ok?
> 
> This OK, I will do this change, thanks.
> 

This looks ok for me too. I just noticed that we also need to clone the
replay_esn/preplay_esn informations and to reinitialize the sequence
number counting on XFRM MIGRATE from the original state before we
call xfrm_init_replay.

I'll fix this up once your patch is applied.

Thanks,

Steffen