diff options
author | Patrick McHardy <kaber@trash.net> | 2011-01-19 19:10:49 +0100 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2011-01-19 19:10:49 +0100 |
commit | f5c88f56b35599ab9ff2d3398e0153e4cd4a4c82 (patch) | |
tree | fd2cb178044db9a256638b2e6565795b91cb3c26 /net | |
parent | a992ca2a0498edd22a88ac8c41570f536de29c9e (diff) | |
download | linux-f5c88f56b35599ab9ff2d3398e0153e4cd4a4c82.tar.bz2 |
netfilter: nf_conntrack: fix lifetime display for disabled connections
When no tstamp extension exists, ct_delta_time() returns -1, which is
then assigned to an u64 and tested for negative values to decide
whether to display the lifetime. This obviously doesn't work, use
a s64 and merge the two minor functions into one.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/nf_conntrack_standalone.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 69107fd78d3e..0ae142825881 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -141,29 +141,24 @@ static inline int ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) #endif #ifdef CONFIG_NF_CONNTRACK_TIMESTAMP -static u_int64_t ct_delta_time(u_int64_t time_now, const struct nf_conn *ct) +static int ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) { + struct ct_iter_state *st = s->private; struct nf_conn_tstamp *tstamp; + s64 delta_time; tstamp = nf_conn_tstamp_find(ct); if (tstamp) { - u_int64_t delta_time = time_now - tstamp->start; - return delta_time > 0 ? div_s64(delta_time, NSEC_PER_SEC) : 0; + delta_time = st->time_now - tstamp->start; + if (delta_time > 0) + delta_time = div_s64(delta_time, NSEC_PER_SEC); + else + delta_time = 0; + + return seq_printf(s, "delta-time=%llu ", + (unsigned long long)delta_time); } - return -1; -} - -static int ct_show_delta_time(struct seq_file *s, const struct nf_conn *ct) -{ - struct ct_iter_state *st = s->private; - u_int64_t delta_time; - - delta_time = ct_delta_time(st->time_now, ct); - if (delta_time < 0) - return 0; - - return seq_printf(s, "delta-time=%llu ", - (unsigned long long)delta_time); + return 0; } #else static inline int |