[IPSEC]: Verify key payload in verify_one_algo
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 19 May 2005 19:39:49 +0000 (12:39 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 19 May 2005 19:39:49 +0000 (12:39 -0700)
We need to verify that the payload contains enough data so that
attach_one_algo can copy alg_key_len bits from the payload.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_user.c

index 15ba08602aa14865e7f619e9c865f77e6bfb699d..97509011c274c7c0f1c698acc24fed817f861a2d 100644 (file)
@@ -34,14 +34,21 @@ static int verify_one_alg(struct rtattr **xfrma, enum xfrm_attr_type_t type)
 {
        struct rtattr *rt = xfrma[type - 1];
        struct xfrm_algo *algp;
+       int len;
 
        if (!rt)
                return 0;
 
-       if ((rt->rta_len - sizeof(*rt)) < sizeof(*algp))
+       len = (rt->rta_len - sizeof(*rt)) - sizeof(*algp);
+       if (len < 0)
                return -EINVAL;
 
        algp = RTA_DATA(rt);
+
+       len -= (algp->alg_key_len + 7U) / 8; 
+       if (len < 0)
+               return -EINVAL;
+
        switch (type) {
        case XFRMA_ALG_AUTH:
                if (!algp->alg_key_len &&