diff options
-rw-r--r-- | net/key/af_key.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/net/key/af_key.c b/net/key/af_key.c index 878039b9557d..26d5e63c4cc5 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c | |||
@@ -2784,12 +2784,22 @@ static struct sadb_msg *pfkey_get_base_msg(struct sk_buff *skb, int *errp) | |||
2784 | 2784 | ||
2785 | static inline int aalg_tmpl_set(struct xfrm_tmpl *t, struct xfrm_algo_desc *d) | 2785 | static inline int aalg_tmpl_set(struct xfrm_tmpl *t, struct xfrm_algo_desc *d) |
2786 | { | 2786 | { |
2787 | return t->aalgos & (1 << d->desc.sadb_alg_id); | 2787 | unsigned int id = d->desc.sadb_alg_id; |
2788 | |||
2789 | if (id >= sizeof(t->aalgos) * 8) | ||
2790 | return 0; | ||
2791 | |||
2792 | return (t->aalgos >> id) & 1; | ||
2788 | } | 2793 | } |
2789 | 2794 | ||
2790 | static inline int ealg_tmpl_set(struct xfrm_tmpl *t, struct xfrm_algo_desc *d) | 2795 | static inline int ealg_tmpl_set(struct xfrm_tmpl *t, struct xfrm_algo_desc *d) |
2791 | { | 2796 | { |
2792 | return t->ealgos & (1 << d->desc.sadb_alg_id); | 2797 | unsigned int id = d->desc.sadb_alg_id; |
2798 | |||
2799 | if (id >= sizeof(t->ealgos) * 8) | ||
2800 | return 0; | ||
2801 | |||
2802 | return (t->ealgos >> id) & 1; | ||
2793 | } | 2803 | } |
2794 | 2804 | ||
2795 | static int count_ah_combs(struct xfrm_tmpl *t) | 2805 | static int count_ah_combs(struct xfrm_tmpl *t) |