Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aca30018 authored by Liping Zhang's avatar Liping Zhang Committed by Pablo Neira Ayuso
Browse files

netfilter: nfnetlink_acct: report overquota to the right netns



We should report the over quota message to the right net namespace
instead of the init netns.

Signed-off-by: default avatarLiping Zhang <liping.zhang@spreadtrum.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 2497b846
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -15,6 +15,6 @@ struct nf_acct;
struct nf_acct *nfnl_acct_find_get(struct net *net, const char *filter_name);
void nfnl_acct_put(struct nf_acct *acct);
void nfnl_acct_update(const struct sk_buff *skb, struct nf_acct *nfacct);
extern int nfnl_acct_overquota(const struct sk_buff *skb,
int nfnl_acct_overquota(struct net *net, const struct sk_buff *skb,
			struct nf_acct *nfacct);
#endif /* _NFNL_ACCT_H */
+5 −4
Original line number Diff line number Diff line
@@ -443,7 +443,7 @@ void nfnl_acct_update(const struct sk_buff *skb, struct nf_acct *nfacct)
}
EXPORT_SYMBOL_GPL(nfnl_acct_update);

static void nfnl_overquota_report(struct nf_acct *nfacct)
static void nfnl_overquota_report(struct net *net, struct nf_acct *nfacct)
{
	int ret;
	struct sk_buff *skb;
@@ -458,11 +458,12 @@ static void nfnl_overquota_report(struct nf_acct *nfacct)
		kfree_skb(skb);
		return;
	}
	netlink_broadcast(init_net.nfnl, skb, 0, NFNLGRP_ACCT_QUOTA,
	netlink_broadcast(net->nfnl, skb, 0, NFNLGRP_ACCT_QUOTA,
			  GFP_ATOMIC);
}

int nfnl_acct_overquota(const struct sk_buff *skb, struct nf_acct *nfacct)
int nfnl_acct_overquota(struct net *net, const struct sk_buff *skb,
			struct nf_acct *nfacct)
{
	u64 now;
	u64 *quota;
@@ -480,7 +481,7 @@ int nfnl_acct_overquota(const struct sk_buff *skb, struct nf_acct *nfacct)

	if (now >= *quota &&
	    !test_and_set_bit(NFACCT_OVERQUOTA_BIT, &nfacct->flags)) {
		nfnl_overquota_report(nfacct);
		nfnl_overquota_report(net, nfacct);
	}

	return ret;
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ static bool nfacct_mt(const struct sk_buff *skb, struct xt_action_param *par)

	nfnl_acct_update(skb, info->nfacct);

	overquota = nfnl_acct_overquota(skb, info->nfacct);
	overquota = nfnl_acct_overquota(par->net, skb, info->nfacct);

	return overquota == NFACCT_UNDERQUOTA ? false : true;
}