mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
netfilter: nf_ct_helper: bail out on duplicated helpers
Don't allow registration of helpers using the same tuple: { l3proto, l4proto, src-port } We lookup for the helper from the packet path using this tuple through __nf_ct_helper_find(). Therefore, we have to avoid having two helpers with the same tuple to ensure predictible behaviour. Don't compare the helper string names anymore since it is valid to register two helpers with the same name, but using different tuples. This is also implicitly fixing up duplicated helper registration via ports= modparam since the name comparison was defeating the tuple duplication validation. Reported-by: Feng Gao <gfree.wind@gmail.com> Reported-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
eaa2bcd6d1
commit
893e093c78
@ -361,9 +361,10 @@ EXPORT_SYMBOL_GPL(nf_ct_helper_log);
|
||||
|
||||
int nf_conntrack_helper_register(struct nf_conntrack_helper *me)
|
||||
{
|
||||
int ret = 0;
|
||||
struct nf_conntrack_helper *cur;
|
||||
struct nf_conntrack_tuple_mask mask = { .src.u.all = htons(0xFFFF) };
|
||||
unsigned int h = helper_hash(&me->tuple);
|
||||
struct nf_conntrack_helper *cur;
|
||||
int ret = 0;
|
||||
|
||||
BUG_ON(me->expect_policy == NULL);
|
||||
BUG_ON(me->expect_class_max >= NF_CT_MAX_EXPECT_CLASSES);
|
||||
@ -371,9 +372,7 @@ int nf_conntrack_helper_register(struct nf_conntrack_helper *me)
|
||||
|
||||
mutex_lock(&nf_ct_helper_mutex);
|
||||
hlist_for_each_entry(cur, &nf_ct_helper_hash[h], hnode) {
|
||||
if (strncmp(cur->name, me->name, NF_CT_HELPER_NAME_LEN) == 0 &&
|
||||
cur->tuple.src.l3num == me->tuple.src.l3num &&
|
||||
cur->tuple.dst.protonum == me->tuple.dst.protonum) {
|
||||
if (nf_ct_tuple_src_mask_cmp(&cur->tuple, &me->tuple, &mask)) {
|
||||
ret = -EEXIST;
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user