mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 04:59:05 -04:00
netfilter: xtables: avoid pointer to self
Commit 784544739a (netfilter: iptables:
lock free counters) broke a number of modules whose rule data referenced
itself. A reallocation would not reestablish the correct references, so
it is best to use a separate struct that does not fall under RCU.
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
95ba434f89
commit
acc738fec0
6 changed files with 88 additions and 31 deletions
|
|
@ -4,6 +4,8 @@
|
|||
/* timings are in milliseconds. */
|
||||
#define XT_LIMIT_SCALE 10000
|
||||
|
||||
struct xt_limit_priv;
|
||||
|
||||
/* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490
|
||||
seconds, or one every 59 hours. */
|
||||
struct xt_rateinfo {
|
||||
|
|
@ -11,11 +13,10 @@ struct xt_rateinfo {
|
|||
u_int32_t burst; /* Period multiplier for upper limit. */
|
||||
|
||||
/* Used internally by the kernel */
|
||||
unsigned long prev;
|
||||
u_int32_t credit;
|
||||
unsigned long prev; /* moved to xt_limit_priv */
|
||||
u_int32_t credit; /* moved to xt_limit_priv */
|
||||
u_int32_t credit_cap, cost;
|
||||
|
||||
/* Ugly, ugly fucker. */
|
||||
struct xt_rateinfo *master;
|
||||
struct xt_limit_priv *master;
|
||||
};
|
||||
#endif /*_XT_RATE_H*/
|
||||
|
|
|
|||
|
|
@ -6,13 +6,15 @@ enum xt_quota_flags {
|
|||
};
|
||||
#define XT_QUOTA_MASK 0x1
|
||||
|
||||
struct xt_quota_priv;
|
||||
|
||||
struct xt_quota_info {
|
||||
u_int32_t flags;
|
||||
u_int32_t pad;
|
||||
|
||||
/* Used internally by the kernel */
|
||||
aligned_u64 quota;
|
||||
struct xt_quota_info *master;
|
||||
struct xt_quota_priv *master;
|
||||
};
|
||||
|
||||
#endif /* _XT_QUOTA_H */
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ enum xt_statistic_flags {
|
|||
};
|
||||
#define XT_STATISTIC_MASK 0x1
|
||||
|
||||
struct xt_statistic_priv;
|
||||
|
||||
struct xt_statistic_info {
|
||||
u_int16_t mode;
|
||||
u_int16_t flags;
|
||||
|
|
@ -23,11 +25,10 @@ struct xt_statistic_info {
|
|||
struct {
|
||||
u_int32_t every;
|
||||
u_int32_t packet;
|
||||
/* Used internally by the kernel */
|
||||
u_int32_t count;
|
||||
u_int32_t count; /* unused */
|
||||
} nth;
|
||||
} u;
|
||||
struct xt_statistic_info *master __attribute__((aligned(8)));
|
||||
struct xt_statistic_priv *master __attribute__((aligned(8)));
|
||||
};
|
||||
|
||||
#endif /* _XT_STATISTIC_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue