diff options
author | Florian Westphal <fwestphal@astaro.com> | 2010-02-15 18:15:55 +0100 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2010-02-15 18:15:55 +0100 |
commit | 1756de262e41112a8a8927808eb2f03d21fd4786 (patch) | |
tree | 5cf74c0b735e6bcaa9b6dbded3ed91f43aaf6072 /net/bridge | |
parent | ef00f89f1eb7e056aab9dfe068521e6f2320c94a (diff) | |
download | op-kernel-dev-1756de262e41112a8a8927808eb2f03d21fd4786.zip op-kernel-dev-1756de262e41112a8a8927808eb2f03d21fd4786.tar.gz |
netfilter: ebtables: abort if next_offset is too small
next_offset must be > 0, otherwise this loops forever.
The offset also contains the size of the ebt_entry structure
itself, so anything smaller is invalid.
Signed-off-by: Florian Westphal <fwestphal@astaro.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/netfilter/ebtables.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c index bcdf02d..4370e96 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c @@ -444,6 +444,8 @@ static int ebt_verify_pointers(const struct ebt_replace *repl, break; if (left < e->next_offset) break; + if (e->next_offset < sizeof(struct ebt_entry)) + return -EINVAL; offset += e->next_offset; } } |