|
@@ -573,7 +573,8 @@ static inline int check_entry_size_and_hooks(struct arpt_entry *e,
|
|
|
int err;
|
|
|
|
|
|
if ((unsigned long)e % __alignof__(struct arpt_entry) != 0 ||
|
|
|
- (unsigned char *)e + sizeof(struct arpt_entry) >= limit) {
|
|
|
+ (unsigned char *)e + sizeof(struct arpt_entry) >= limit ||
|
|
|
+ (unsigned char *)e + e->next_offset > limit) {
|
|
|
duprintf("Bad offset %p\n", e);
|
|
|
return -EINVAL;
|
|
|
}
|
|
@@ -1232,7 +1233,8 @@ check_compat_entry_size_and_hooks(struct compat_arpt_entry *e,
|
|
|
|
|
|
duprintf("check_compat_entry_size_and_hooks %p\n", e);
|
|
|
if ((unsigned long)e % __alignof__(struct compat_arpt_entry) != 0 ||
|
|
|
- (unsigned char *)e + sizeof(struct compat_arpt_entry) >= limit) {
|
|
|
+ (unsigned char *)e + sizeof(struct compat_arpt_entry) >= limit ||
|
|
|
+ (unsigned char *)e + e->next_offset > limit) {
|
|
|
duprintf("Bad offset %p, limit = %p\n", e, limit);
|
|
|
return -EINVAL;
|
|
|
}
|