|
@@ -600,6 +600,9 @@ static u64 __skb_get_nlattr(u64 ctx, u64 A, u64 X, u64 r4, u64 r5)
|
|
|
if (skb_is_nonlinear(skb))
|
|
|
return 0;
|
|
|
|
|
|
+ if (skb->len < sizeof(struct nlattr))
|
|
|
+ return 0;
|
|
|
+
|
|
|
if (A > skb->len - sizeof(struct nlattr))
|
|
|
return 0;
|
|
|
|
|
@@ -618,11 +621,14 @@ static u64 __skb_get_nlattr_nest(u64 ctx, u64 A, u64 X, u64 r4, u64 r5)
|
|
|
if (skb_is_nonlinear(skb))
|
|
|
return 0;
|
|
|
|
|
|
+ if (skb->len < sizeof(struct nlattr))
|
|
|
+ return 0;
|
|
|
+
|
|
|
if (A > skb->len - sizeof(struct nlattr))
|
|
|
return 0;
|
|
|
|
|
|
nla = (struct nlattr *) &skb->data[A];
|
|
|
- if (nla->nla_len > A - skb->len)
|
|
|
+ if (nla->nla_len > skb->len - A)
|
|
|
return 0;
|
|
|
|
|
|
nla = nla_find_nested(nla, X);
|