netfilter: xt_quota: fix the behavior of xt_quota module

A major flaw of the current xt_quota module is that quota in a specific
rule gets reset every time there is a rule change in the same table. It
makes the xt_quota module not very useful in a table in which iptables
rules are changed at run time. This fix introduces a new counter that is
visible to userspace as the remaining quota of the current rule. When
userspace restores the rules in a table, it can restore the counter to
the remaining quota instead of resetting it to the full quota.

Signed-off-by: Chenbo Feng <fengc@google.com>
Suggested-by: Maciej Żenczykowski <maze@google.com>
Reviewed-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Chenbo Feng
2018-10-01 18:23:08 -07:00
committed by Pablo Neira Ayuso
parent a2d88182d2
commit e9837e55b0
2 changed files with 26 additions and 35 deletions

View File

@@ -15,9 +15,11 @@ struct xt_quota_info {
__u32 flags;
__u32 pad;
__aligned_u64 quota;
/* Used internally by the kernel */
struct xt_quota_priv *master;
#ifdef __KERNEL__
atomic64_t counter;
#else
__aligned_u64 remain;
#endif
};
#endif /* _XT_QUOTA_H */