]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/net/xfrm.h
[XFRM]: xfrm_algo_clone() allocates too much memory
[linux-2.6-omap-h63xx.git] / include / net / xfrm.h
index 58dfa82889aa498be489d11ada7a163f3277f134..1dd20cf17982663b8881f55c76440d7dd096d98d 100644 (file)
@@ -1188,10 +1188,15 @@ static inline int xfrm_aevent_is_on(void)
        return ret;
 }
 
+static inline int xfrm_alg_len(struct xfrm_algo *alg)
+{
+       return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
+}
+
 #ifdef CONFIG_XFRM_MIGRATE
 static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig)
 {
-       return (struct xfrm_algo *)kmemdup(orig, sizeof(*orig) + orig->alg_key_len, GFP_KERNEL);
+       return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL);
 }
 
 static inline void xfrm_states_put(struct xfrm_state **states, int n)