|
@@ -1923,6 +1923,9 @@ parse_ipsecrequests(struct xfrm_policy *xp, struct sadb_x_policy *pol)
|
|
|
int len = pol->sadb_x_policy_len*8 - sizeof(struct sadb_x_policy);
|
|
int len = pol->sadb_x_policy_len*8 - sizeof(struct sadb_x_policy);
|
|
|
struct sadb_x_ipsecrequest *rq = (void*)(pol+1);
|
|
struct sadb_x_ipsecrequest *rq = (void*)(pol+1);
|
|
|
|
|
|
|
|
|
|
+ if (pol->sadb_x_policy_len * 8 < sizeof(struct sadb_x_policy))
|
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
+
|
|
|
while (len >= sizeof(struct sadb_x_ipsecrequest)) {
|
|
while (len >= sizeof(struct sadb_x_ipsecrequest)) {
|
|
|
if ((err = parse_ipsecrequest(xp, rq)) < 0)
|
|
if ((err = parse_ipsecrequest(xp, rq)) < 0)
|
|
|
return err;
|
|
return err;
|