netfilter: x_tables: check for bogus target offset
We're currently asserting that targetoff + targetsize <= nextoff. Extend it to also check that targetoff is >= sizeof(xt_entry). Since this is generic code, add an argument pointing to the start of the match/target, we can then derive the base structure size from the delta. We also need the e->elems pointer in a followup change to validate matches. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
7ed2abddd2
commit
ce683e5f9d
5 changed files with 26 additions and 10 deletions
|
@ -242,7 +242,7 @@ void xt_unregister_match(struct xt_match *target);
|
|||
int xt_register_matches(struct xt_match *match, unsigned int n);
|
||||
void xt_unregister_matches(struct xt_match *match, unsigned int n);
|
||||
|
||||
int xt_check_entry_offsets(const void *base,
|
||||
int xt_check_entry_offsets(const void *base, const char *elems,
|
||||
unsigned int target_offset,
|
||||
unsigned int next_offset);
|
||||
|
||||
|
@ -494,7 +494,7 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
|
|||
unsigned int *size);
|
||||
int xt_compat_target_to_user(const struct xt_entry_target *t,
|
||||
void __user **dstptr, unsigned int *size);
|
||||
int xt_compat_check_entry_offsets(const void *base,
|
||||
int xt_compat_check_entry_offsets(const void *base, const char *elems,
|
||||
unsigned int target_offset,
|
||||
unsigned int next_offset);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue