linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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;
>  

  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).