IPSEC: Fix catch-22 with algorithm IDs above 31
commitec6c4d0ac90344251c631a58493ac680a19eca8a
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 25 Apr 2008 08:41:47 +0000 (25 01:41 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 1 May 2008 21:44:33 +0000 (1 14:44 -0700)
tree078bf592de02e48e95a4f3e8ff174c858bf67e73
parentdc2ee1a436bee6ada5afeedb62dc015ed5553f3d
IPSEC: Fix catch-22 with algorithm IDs above 31

[ Upstream commit: c5d18e984a313adf5a1a4ae69e0b1d93cf410229 ]

As it stands it's impossible to use any authentication algorithms
with an ID above 31 portably.  It just happens to work on x86 but
fails miserably on ppc64.

The reason is that we're using a bit mask to check the algorithm
ID but the mask is only 32 bits wide.

After looking at how this is used in the field, I have concluded
that in the long term we should phase out state matching by IDs
because this is made superfluous by the reqid feature.  For current
applications, the best solution IMHO is to allow all algorithms when
the bit masks are all ~0.

The following patch does exactly that.

This bug was identified by IBM when testing on the ppc64 platform
using the NULL authentication algorithm which has an ID of 251.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
include/net/xfrm.h
net/key/af_key.c
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_user.c