diff options
Diffstat (limited to 'net/xfrm')
| -rw-r--r-- | net/xfrm/xfrm_user.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index 98420bf914ce..a7e27e1140dd 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
| @@ -412,7 +412,11 @@ static inline int xfrm_replay_verify_len(struct xfrm_replay_state_esn *replay_es | |||
| 412 | up = nla_data(rp); | 412 | up = nla_data(rp); |
| 413 | ulen = xfrm_replay_state_esn_len(up); | 413 | ulen = xfrm_replay_state_esn_len(up); |
| 414 | 414 | ||
| 415 | if (nla_len(rp) < ulen || xfrm_replay_state_esn_len(replay_esn) != ulen) | 415 | /* Check the overall length and the internal bitmap length to avoid |
| 416 | * potential overflow. */ | ||
| 417 | if (nla_len(rp) < ulen || | ||
| 418 | xfrm_replay_state_esn_len(replay_esn) != ulen || | ||
| 419 | replay_esn->bmp_len != up->bmp_len) | ||
| 416 | return -EINVAL; | 420 | return -EINVAL; |
| 417 | 421 | ||
| 418 | if (up->replay_window > up->bmp_len * sizeof(__u32) * 8) | 422 | if (up->replay_window > up->bmp_len * sizeof(__u32) * 8) |
