tipc: Fix recognition of trial period
authorMark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Mon, 10 Oct 2022 02:46:13 +0000 (15:46 +1300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 30 Oct 2022 08:41:16 +0000 (09:41 +0100)
[ Upstream commit 28be7ca4fcfd69a2d52aaa331adbf9dbe91f9e6e ]

The trial period exists until jiffies is after addr_trial_end. But as
jiffies will eventually overflow, just using time_after will eventually
give incorrect results. As the node address is set once the trial period
ends, this can be used to know that we are not in the trial period.

Fixes: e415577f57f4 ("tipc: correct discovery message handling during address trial period")
Signed-off-by: Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/tipc/discover.c

index 14bc20604051d79bf69f31d1e1734fb7f6bfe588..2ae268b674650f33957f2baf6ee1ecb4a9c8f8af 100644 (file)
@@ -147,8 +147,8 @@ static bool tipc_disc_addr_trial_msg(struct tipc_discoverer *d,
 {
        struct net *net = d->net;
        struct tipc_net *tn = tipc_net(net);
-       bool trial = time_before(jiffies, tn->addr_trial_end);
        u32 self = tipc_own_addr(net);
+       bool trial = time_before(jiffies, tn->addr_trial_end) && !self;
 
        if (mtyp == DSC_TRIAL_FAIL_MSG) {
                if (!trial)