diff options
author | David S. Miller <davem@davemloft.net> | 2014-02-27 16:19:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-02-27 16:19:41 -0500 |
commit | 23187212e7c3664f6a0d8ccd83b6d32c05aeafcb (patch) | |
tree | 68e3c4c32c1295bb65da6f936be890290670c992 /include | |
parent | bf439b3154ce49d81a79b14f9fab18af99018ae2 (diff) | |
parent | 3a9016f97fdc8bfbb26ff36ba8f3dc9162eb691b (diff) | |
download | op-kernel-dev-23187212e7c3664f6a0d8ccd83b6d32c05aeafcb.zip op-kernel-dev-23187212e7c3664f6a0d8ccd83b6d32c05aeafcb.tar.gz |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
Steffen Klassert says:
====================
1) Build fix for ip_vti when NET_IP_TUNNEL is not set.
We need this set to have ip_tunnel_get_stats64()
available.
2) Fix a NULL pointer dereference on sub policy usage.
We try to access a xfrm_state from the wrong array.
3) Take xfrm_state_lock in xfrm_migrate_state_find(),
we need it to traverse through the state lists.
4) Clone states properly on migration, otherwise we crash
when we migrate a state with aead algorithm attached.
5) Fix unlink race when between thread context and timer
when policies are deleted.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/xfrm.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index afa5730..fb5654a 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -1648,6 +1648,11 @@ static inline int xfrm_aevent_is_on(struct net *net) } #endif +static inline int aead_len(struct xfrm_algo_aead *alg) +{ + return sizeof(*alg) + ((alg->alg_key_len + 7) / 8); +} + static inline int xfrm_alg_len(const struct xfrm_algo *alg) { return sizeof(*alg) + ((alg->alg_key_len + 7) / 8); @@ -1686,6 +1691,12 @@ static inline int xfrm_replay_clone(struct xfrm_state *x, return 0; } +static inline struct xfrm_algo_aead *xfrm_algo_aead_clone(struct xfrm_algo_aead *orig) +{ + return kmemdup(orig, aead_len(orig), GFP_KERNEL); +} + + static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig) { return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL); |