| From 8af1c6fbd9239877998c7f5a591cb2c88d41fb66 Mon Sep 17 00:00:00 2001 |
| From: Jozsef Kadlecsik <kadlec@netfilter.org> |
| Date: Sat, 22 Feb 2020 12:01:43 +0100 |
| Subject: netfilter: ipset: Fix forceadd evaluation path |
| |
| From: Jozsef Kadlecsik <kadlec@netfilter.org> |
| |
| commit 8af1c6fbd9239877998c7f5a591cb2c88d41fb66 upstream. |
| |
| When the forceadd option is enabled, the hash:* types should find and replace |
| the first entry in the bucket with the new one if there are no reuseable |
| (deleted or timed out) entries. However, the position index was just not set |
| to zero and remained the invalid -1 if there were no reuseable entries. |
| |
| Reported-by: syzbot+6a86565c74ebe30aea18@syzkaller.appspotmail.com |
| Fixes: 23c42a403a9c ("netfilter: ipset: Introduction of new commands and protocol version 7") |
| Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/netfilter/ipset/ip_set_hash_gen.h | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/net/netfilter/ipset/ip_set_hash_gen.h |
| +++ b/net/netfilter/ipset/ip_set_hash_gen.h |
| @@ -931,6 +931,8 @@ mtype_add(struct ip_set *set, void *valu |
| } |
| } |
| if (reuse || forceadd) { |
| + if (j == -1) |
| + j = 0; |
| data = ahash_data(n, j, set->dsize); |
| if (!deleted) { |
| #ifdef IP_SET_HASH_WITH_NETS |