aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2007-12-18 01:37:03 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:58:55 -0500
commitd978e5daec544ec72b28bf72a30dc9ac3da23a35 (patch)
treeb20f5ecdff8c8ce6c22be48412dadd90686056a0
parent77236b6e33b06aaf756a86ed1965ca7d460b1b53 (diff)
[NETFILTER]: ctnetlink: fix expectation timeout dumping
When the timer is late its timeout might be before the current time, in which case a very large value is dumped. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/netfilter/nf_conntrack_netlink.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index dcd0c9a4bb75..75012585efe0 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -1356,7 +1356,10 @@ ctnetlink_exp_dump_expect(struct sk_buff *skb,
1356 const struct nf_conntrack_expect *exp) 1356 const struct nf_conntrack_expect *exp)
1357{ 1357{
1358 struct nf_conn *master = exp->master; 1358 struct nf_conn *master = exp->master;
1359 __be32 timeout = htonl((exp->timeout.expires - jiffies) / HZ); 1359 long timeout = (exp->timeout.expires - jiffies) / HZ;
1360
1361 if (timeout < 0)
1362 timeout = 0;
1360 1363
1361 if (ctnetlink_exp_dump_tuple(skb, &exp->tuple, CTA_EXPECT_TUPLE) < 0) 1364 if (ctnetlink_exp_dump_tuple(skb, &exp->tuple, CTA_EXPECT_TUPLE) < 0)
1362 goto nla_put_failure; 1365 goto nla_put_failure;
@@ -1367,7 +1370,7 @@ ctnetlink_exp_dump_expect(struct sk_buff *skb,
1367 CTA_EXPECT_MASTER) < 0) 1370 CTA_EXPECT_MASTER) < 0)
1368 goto nla_put_failure; 1371 goto nla_put_failure;
1369 1372
1370 NLA_PUT_BE32(skb, CTA_EXPECT_TIMEOUT, timeout); 1373 NLA_PUT_BE32(skb, CTA_EXPECT_TIMEOUT, htonl(timeout));
1371 NLA_PUT_BE32(skb, CTA_EXPECT_ID, htonl((unsigned long)exp)); 1374 NLA_PUT_BE32(skb, CTA_EXPECT_ID, htonl((unsigned long)exp));
1372 1375
1373 return 0; 1376 return 0;