All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Brown <sbrown@cortland.com>
To: "linux-bluetooth@vger.kernel.org" <linux-bluetooth@vger.kernel.org>
Subject: Re: meshctl: set-pub fails
Date: Wed, 11 Oct 2017 08:44:51 -0600	[thread overview]
Message-ID: <1507733091.5470.5.camel@ewol.com> (raw)
In-Reply-To: <1507674601.5470.3.camel@ewol.com>

On Tue, 2017-10-10 at 16:30 -0600, Steve Brown wrote:
> On Tue, 2017-10-10 at 10:04 -0600, Steve Brown wrote:
> > discover-unprovisioned, provision, add-appkey & bind work as
> > expected.
> > The meshctl's onoff client evokes expected behavior in zephyr's
> > onoff
> > server.
> > 
> > The command being passed
> > 
> > set-pub 0100 c000 1 5 1000
> > 
> > The length of the set-pub packet exceeded the size of the data
> > array
> > in
> > struct mesh_pkt in net.c by 1. This stepped on the length field
> > which
> > followed. The transmit mostly failed. The zephyr server received
> > nothing.
> > 
> > I extended the data array to 35. I now get consistent output.
> > However,
> > the zephyr server is unable to decrypt with devkey. Net decrypt
> > works,
> > but app decrypt fails. 
> > 
> > I looked at how config-client.c:cmd_set_pub handled the app key
> > index.
> > According to 4.3.2.16 (pg 158) of the Mesh Profile Spec, the app
> > key
> > index should be in the top 12 bits of octet 4 & 5. I shifted it up
> > by
> > 4, but get the same results.
> > 
> > I'm pretty sure the problem is on the meshctl side. I've used the
> > Silabs Android app to successfully configure the zephyr server. It
> > successfully sends a set-pub which the zephyr server correctly
> > handles.
> > 
> > Maybe this is a regression. Has set-pub worked in the past?
> > 
> 
> There is no problem with the placement of the app key index. The
> figures in the spec are variously big and little endian. I misread
> the
> figure. 
> 
> Steve

Sorry to be continually replying to my own posts.

There were 2 problems:

1. mesh_pkt's data area was too small. The final message was 31 bytes.
I added 5 bytes and an assert. I'm not sure what the max might be.

2. The SEG_MAX test was on the wrong length. It should have been on
sar->len, not len. The message should have been segmented, but was not.

With this patch, the set-pub below returns success. 

set-pub 0100 c000 1 0 1000

Could somebody familiar with the code comment?

diff --git a/mesh/net.c b/mesh/net.c
index 2d75c4f7d..89d22c99b 100644
--- a/mesh/net.c
+++ b/mesh/net.c
@@ -110,7 +110,7 @@ struct mesh_virt_addr {
 };
 
 struct mesh_pkt {
-	uint8_t		data[30];
+	uint8_t		data[35];
 	uint8_t		len;
 };
 
@@ -1308,6 +1308,9 @@ static void send_seg(struct mesh_sar_msg *sar, uint8_t seg)
 	}
 
 	pkt->len += (sar->ctl ? 8 : 4);
+
+	g_assert(!(pkt->len > sizeof(pkt->data)));
+
 	mesh_crypto_packet_encode(data, pkt->len,
 			part->enc_key,
 			sar->iv_index,
@@ -2098,7 +2101,7 @@ bool net_access_layer_send(uint8_t ttl, uint16_t src, uint32_t dst,
 	if (!result)
 		return false;
 
-	segN = SEG_MAX(len);
+	segN = SEG_MAX(len + sizeof(uint32_t));
 
 	/* Only one ACK required SAR message per destination at a time */
 	if (segN && IS_UNICAST(dst)) {


  reply	other threads:[~2017-10-11 14:44 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-10 16:04 meshctl: set-pub fails Steve Brown
2017-10-10 22:30 ` Steve Brown
2017-10-11 14:44   ` Steve Brown [this message]
2017-10-11 16:48     ` Gix, Brian

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=1507733091.5470.5.camel@ewol.com \
    --to=sbrown@cortland.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.