From: "Gix, Brian" <brian.gix@intel.com>
To: "michal.lowas-rzechonek@silvair.com"
<michal.lowas-rzechonek@silvair.com>,
"linux-bluetooth@vger.kernel.org"
<linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH BlueZ] mesh: Fix IV Recovery procedure when IV Update is in progress
Date: Thu, 5 Sep 2019 21:43:58 +0000 [thread overview]
Message-ID: <3980d0c20d416de8ca17bd406cc830b03a4d9498.camel@intel.com> (raw)
In-Reply-To: <20190905131240.24969-1-michal.lowas-rzechonek@silvair.com>
Hi Michał,
On Thu, 2019-09-05 at 15:12 +0200, Michał Lowas-Rzechonek wrote:
> This fixes erroneously cleared sequence number when node performs IV
> Recovery procedure on startup in a following scenario:
> - node has IV Index set to <N>
> - node starts in IV_UPD_INIT state
> - node receives a Secure Network Beacon with IV Index <N>+1 and IV
> Update flag set
>
> Upon reception, the node shall:
> - increase its IV Index to <N>+1
> - enter IV_UPD_UPDATING state
>
> This means that the node keeps transmitting messages using IV Index
> equal to <N>, therefore it shall not reset its Sequence Number before IV
> Update procedure completes.
>
> If, on the other hand, received Secure Network Beacon contains IV Index
> <N>+2 (or more), the node shall:
> - increase its IV Index to <N>+2 (or more)
> - enter IV_UPD_UPDATING state
> - reset the Sequence Number to 0
> ---
> mesh/net.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mesh/net.c b/mesh/net.c
> index 2785039db..b4b390541 100644
> --- a/mesh/net.c
> +++ b/mesh/net.c
> @@ -2735,7 +2735,7 @@ static void update_iv_kr_state(struct mesh_subnet *subnet, uint32_t iv_index,
> }
>
> if (net->iv_upd_state == IV_UPD_INIT) {
> - if (iv_index > net->iv_index)
> + if (iv_index > net->iv_index + 1)
> mesh_net_set_seq_num(net, 0);
I think you have found something, but I think we are missing something here...
If iv_index > net->iv_index, and iv_update == false, then we still want to reset to Seq Zero, I think...Even if
the increase is just 1.
This particular path is just covering the situation where this is the *first* SNB we are receiving after node
start-up (iv_upd_state == INIT) and it is very possible that the node has been away for long enough that a
single IV Update has started and finished.
So perhaps:
if (iv_index > net->iv_index && !iv_update)
mesh_net_set_seq_num(net, 0);
else if (iv_index > net->iv_index + 2)
mesh_net_set_seq_num(net, 0);
Or more esoterically (and maybe harder to follow):
if (iv_index > net->iv_index + iv_update)
mesh_net_set_seq_num(net, 0);
Or something like that.
> net->iv_index = iv_index;
>
next prev parent reply other threads:[~2019-09-05 21:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-05 13:12 [PATCH BlueZ] mesh: Fix IV Recovery procedure when IV Update is in progress Michał Lowas-Rzechonek
2019-09-05 21:43 ` Gix, Brian [this message]
2019-09-06 7:07 ` michal.lowas-rzechonek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3980d0c20d416de8ca17bd406cc830b03a4d9498.camel@intel.com \
--to=brian.gix@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=michal.lowas-rzechonek@silvair.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).