Patch "netfilter: x_tables: add compat version of xt_check_entry_offsets" has been added to the 4.6-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
netfilter: x_tables: add compat version of xt_check_entry_offsets
to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
netfilter-x_tables-add-compat-version-of-xt_check_entry_offsets.patch
and it can be found in the queue-4.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
fc1221b3a163d1386d1052184202d5dc50d302d1Mon Sep 17 00:00:00 2001
From: Florian Westphal <[email protected]>
Date: Fri, 1 Apr 2016 14:17:26 +0200
Subject: netfilter: x_tables: add compat version of xt_check_entry_offsets
From: Florian Westphal <[email protected]>
commit fc1221b3a163d1386d1052184202d5dc50d302d1 upstream.
32bit rulesets have different layout and alignment requirements, so once more integrity checks get added to xt_check_entry_offsets it will reject well-formed 32bit rulesets.
--- include/linux/netfilter/x_tables.h | 3 +++ net/ipv4/netfilter/arp_tables.c | 3 ++- net/ipv4/netfilter/ip_tables.c | 3 ++- net/ipv6/netfilter/ip6_tables.c | 3 ++- net/netfilter/x_tables.c | 22 ++++++++++++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-)
include/linux/netfilter/x_tables.h +3 -0
@@ -494,6 +494,9 @@ void xt_compat_target_from_user(struct x 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, +unsigned int target_offset, +unsigned int next_offset);#endif /* CONFIG_COMPAT */ #endif /* _X_TABLES_H */
net/ipv4/netfilter/arp_tables.c +2 -1
@@ -1254,7 +1254,8 @@ check_compat_entry_size_and_hooks(structif (!arp_checkentry (&e->arp))return -EINVAL ; - ret =xt_check_entry_offsets (e, e->target_offset, e->next_offset); + ret =xt_compat_check_entry_offsets (e, e->target_offset, + e->next_offset);if (ret)return ret;
net/ipv4/netfilter/ip_tables.c +2 -1
@@ -1513,7 +1513,8 @@ check_compat_entry_size_and_hooks(structif (!ip_checkentry (&e->ip))return -EINVAL ; - ret =xt_check_entry_offsets (e, e->target_offset, e->next_offset); + ret =xt_compat_check_entry_offsets (e, + e->target_offset, e->next_offset);if (ret)return ret;
net/ipv6/netfilter/ip6_tables.c +2 -1
@@ -1525,7 +1525,8 @@ check_compat_entry_size_and_hooks(structif (!ip6_checkentry (&e->ipv6))return -EINVAL ; - ret =xt_check_entry_offsets (e, e->target_offset, e->next_offset); + ret =xt_compat_check_entry_offsets (e, + e->target_offset, e->next_offset);if (ret)return ret;
net/netfilter/x_tables.c +22 -0
@@ -539,6 +539,27 @@ int xt_compat_match_to_user(const struct return 0; }EXPORT_SYMBOL_GPL (xt_compat_match_to_user); + +int xt_compat_check_entry_offsets (const void *base, +unsigned int target_offset, +unsigned int next_offset) +{ +const struct compat_xt_entry_target *t; +const char *e = base; + +if (target_offset +sizeof (*t) > next_offset) +return -EINVAL ; + + t = (void *)(e + target_offset); +if (t->u.target_size <sizeof (*t)) +return -EINVAL ; + +if (target_offset + t->u.target_size > next_offset) +return -EINVAL ; + +return 0 ; +} +EXPORT_SYMBOL (xt_compat_check_entry_offsets);#endif /* CONFIG_COMPAT */ /**
@@ -549,6 +570,7 @@ EXPORT_SYMBOL_GPL(xt_compat_match_to_use* @next_offset: the arp/ip/ip6_t->next_offset * * validates that target_offset and next_offset are sane. +* Also see xt_compat_check_entry_offsets for CONFIG_COMPAT version. * * The arp/ip/ip6t_entry structure @base must have passed following tests: * - it must point to a valid memory location
Patches currently in stable-queue which might be from [email protected] are
queue-4.6/netfilter-x_tables-add-and-use-xt_check_entry_offsets.patch queue-4.6/netfilter-x_tables-assert-minimum-target-size.patch queue-4.6/netfilter-x_tables-add-compat-version-of-xt_check_entry_offsets.patch queue-4.6/netfilter-x_tables-check-for-bogus-target-offset.patch queue-4.6/netfilter-x_tables-validate-targets-of-jumps.patch queue-4.6/netfilter-x_tables-don-t-move-to-non-existent-next-rule.patch queue-4.6/netfilter-x_tables-kill-check_entry-helper.patch queue-4.6/netfilter-x_tables-check-standard-target-size-too.patch queue-4.6/netfilter-x_tables-validate-all-offsets-and-sizes-in-a-rule.patch