From: Patrick McHardy <kaber@trash.net>
To: Jan Engelhardt <jengelh@computergmbh.de>
Cc: Netfilter Developer Mailing List <netfilter-devel@lists.netfilter.org>
Subject: Re: xt_connlimit 20070707 kernel
Date: Mon, 09 Jul 2007 16:30:16 +0200 [thread overview]
Message-ID: <46924678.9010909@trash.net> (raw)
In-Reply-To: <Pine.LNX.4.64.0707071950170.1536@fbirervta.pbzchgretzou.qr>
Jan Engelhardt wrote:
> On Jul 6 2007 15:05, Patrick McHardy wrote:
>
>>>Ok so what should I put in for nhoff, dataoff, what_l3 and what_l4?
>>
>>
>>Check out nf_conntrack_in() and the IPv4/IPv6 prepare functions.
>>
>
>
> Does this look ok?
Yes, just two small things left:
> + read_unlock_bh(&nf_conntrack_lock);
> +
> + if (addit) {
> + /* save the new connection in our list */
> + conn = kzalloc(sizeof(*conn), GFP_ATOMIC);
> + if (conn == NULL)
> + return -ENOMEM;
> +
> + INIT_LIST_HEAD(&conn->list);
No need to initialize member list_heads.
> + conn->tuple = *tuple;
> + list_add(&conn->list, hash);
> + ++matches;
> + }
> +
> + return matches;
> +}
> +
> +static bool connlimit_match(const struct sk_buff *skb,
> + const struct net_device *in,
> + const struct net_device *out,
> + const struct xt_match *match,
> + const void *matchinfo, int offset,
> + unsigned int protoff, bool *hotdrop)
> +{
> + const struct xt_connlimit_info *info = matchinfo;
> + const struct nf_conntrack_tuple *tuple_ptr;
> + union nf_conntrack_address addr, mask;
> + struct nf_conntrack_tuple tuple;
> + enum ip_conntrack_info ctinfo;
> + const struct nf_conn *ct;
> + int connections;
> +
> + ct = nf_ct_get(skb, &ctinfo);
> + if (ct != NULL) {
> + tuple_ptr = &ct->tuplehash[0].tuple;
> + } else {
> + struct nf_conntrack_l3proto *l3proto;
> + struct nf_conntrack_l4proto *l4proto;
> +
> + l3proto = nf_ct_l3proto_find_get(match->family);
> + if (l3proto == NULL) {
> + *hotdrop = true;
> + return false;
> + }
> + l4proto = nf_ct_l4proto_find_get(match->family, match->proto);
The module reference taking functions should not be used in the
packet processing path. Please use __nf_ct_l3proto_find and
__nf_ct_l4proto_find. Since the l3proto is static for one
instance of the match you could also store it info->data and
only do the lookup once (for then you need to take the module
reference of course).
> +
> + if (match->family == AF_INET6) {
> + const struct ipv6hdr *iph = ipv6_hdr(skb);
> + memcpy(&addr.ip6, &iph->saddr, sizeof(iph->saddr));
> + memcpy(&mask.ip6, info->v6_mask, sizeof(info->v6_mask));
> + } else {
> + const struct iphdr *iph = ip_hdr(skb);
> + addr.ip = iph->saddr;
> + mask.ip = info->v4_mask;
> + }
> +
> + spin_lock_bh(&info->data->lock);
> + connections = count_them(info->data, tuple_ptr, &addr, &mask, match);
> + spin_unlock_bh(&info->data->lock);
> +
> + if (connections < 0) {
> + /* kmalloc failed, drop it entirely */
> + *hotdrop = 1;
This should be "= true" I guess ..
next prev parent reply other threads:[~2007-07-09 14:30 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-20 9:39 xt_connlimit 20070620_2 Jan Engelhardt
2007-06-20 17:21 ` Andrew Beverley
2007-06-22 11:14 ` Patrick McHardy
2007-06-22 11:36 ` Jan Engelhardt
2007-06-22 11:43 ` Patrick McHardy
2007-06-22 12:33 ` Jan Engelhardt
2007-06-22 12:42 ` Patrick McHardy
2007-06-22 13:22 ` Jan Engelhardt
2007-06-22 13:27 ` Patrick McHardy
2007-06-25 11:11 ` xt_connlimit 20070625 Jan Engelhardt
2007-06-25 11:41 ` Patrick McHardy
2007-06-25 11:45 ` Patrick McHardy
2007-06-25 12:36 ` Jan Engelhardt
2007-06-25 12:43 ` Patrick McHardy
2007-06-25 14:41 ` Jan Engelhardt
2007-06-25 14:46 ` Patrick McHardy
2007-06-25 15:01 ` Jan Engelhardt
2007-06-25 15:05 ` Patrick McHardy
2007-06-25 15:05 ` Patrick McHardy
2007-06-25 15:14 ` Jan Engelhardt
2007-06-28 19:23 ` Jan Engelhardt
2007-06-28 19:27 ` Patrick McHardy
2007-06-28 19:31 ` Jan Engelhardt
2007-06-28 19:33 ` Patrick McHardy
2007-06-28 19:48 ` Patrick McHardy
2007-06-28 19:51 ` xt_connlimit 20070628 Jan Engelhardt
2007-06-28 19:55 ` xt_connlimit 20070628 kernel Jan Engelhardt
2007-06-29 11:27 ` Patrick McHardy
2007-07-01 14:11 ` Jan Engelhardt
2007-07-02 12:27 ` Patrick McHardy
2007-07-02 15:38 ` Jan Engelhardt
2007-07-02 15:40 ` Patrick McHardy
2007-07-02 19:53 ` Jan Engelhardt
2007-07-03 11:14 ` Patrick McHardy
2007-07-03 11:31 ` Jan Engelhardt
2007-07-03 11:34 ` Patrick McHardy
2007-07-04 10:56 ` Jan Engelhardt
2007-07-04 14:52 ` Patrick McHardy
2007-07-04 15:11 ` Jan Engelhardt
2007-07-06 13:05 ` Patrick McHardy
2007-07-07 17:51 ` xt_connlimit 20070707 kernel Jan Engelhardt
2007-07-09 14:30 ` Patrick McHardy [this message]
2007-07-09 15:10 ` Jan Engelhardt
2007-07-09 15:20 ` Patrick McHardy
2007-07-09 15:29 ` Patrick McHardy
2007-07-09 15:32 ` Jan Engelhardt
2007-07-09 15:33 ` Patrick McHardy
2007-07-09 15:34 ` Patrick McHardy
2007-07-09 15:38 ` Jan Engelhardt
2007-07-09 15:43 ` Patrick McHardy
2007-07-13 14:18 ` Yasuyuki KOZAKAI
[not found] ` <200707131418.l6DEIudN010879@toshiba.co.jp>
2007-07-13 15:01 ` Jan Engelhardt
2007-07-13 15:03 ` Patrick McHardy
2007-07-13 15:13 ` Jan Engelhardt
2007-07-13 15:16 ` Patrick McHardy
2007-07-13 15:31 ` Jan Engelhardt
2007-07-13 15:42 ` Patrick McHardy
2007-07-13 16:08 ` Jan Engelhardt
2007-07-13 15:44 ` Yasuyuki KOZAKAI
[not found] ` <200707131544.l6DFivSf011446@toshiba.co.jp>
2007-07-13 16:09 ` Jan Engelhardt
2007-07-10 6:30 ` Yasuyuki KOZAKAI
2007-07-11 17:37 ` Jan Engelhardt
2007-07-11 18:04 ` Patrick McHardy
2007-07-11 18:18 ` Jan Engelhardt
2007-07-11 18:19 ` Jan Engelhardt
2007-07-11 18:25 ` Patrick McHardy
[not found] ` <200707100630.l6A6UBM1021597@toshiba.co.jp>
2007-07-11 13:23 ` Patrick McHardy
2007-07-04 8:55 ` xt_connlimit 20070628 kernel Yasuyuki KOZAKAI
2007-07-04 14:52 ` Patrick McHardy
2007-06-28 20:08 ` xt_connlimit 20070628 Jan Engelhardt
2007-06-25 18:51 ` xt_connlimit 20070620_2 Patrick McHardy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46924678.9010909@trash.net \
--to=kaber@trash.net \
--cc=jengelh@computergmbh.de \
--cc=netfilter-devel@lists.netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.