Commit 3d54e975 authored by Florian Grandel's avatar Florian Grandel Committed by Carles Cufi
Browse files

net: l2: ieee802154: association address parsing

Fixes an off-by-one bug in the parsing routine of the coordinator
address when associating via shell command.

Signed-off-by: default avatarFlorian Grandel <fgrandel@code-for-humans.de>
parent 389f6ac8
Loading
Loading
Loading
Loading
+9 −7
Changes for subsys/net/l2/ieee802154/ieee802154_shell.c: 9 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -22,7 +22,8 @@ LOG_MODULE_REGISTER(net_ieee802154_shell, CONFIG_NET_L2_IEEE802154_LOG_LEVEL);

#include "ieee802154_frame.h"

#define EXT_ADDR_STR_LEN sizeof("xx:xx:xx:xx:xx:xx:xx:xx")
#define EXT_ADDR_STR_SIZE sizeof("xx:xx:xx:xx:xx:xx:xx:xx")
#define EXT_ADDR_STR_LEN (EXT_ADDR_STR_SIZE - 1U)

struct ieee802154_req_params params;
static struct net_mgmt_event_callback scan_cb;
@@ -76,7 +77,7 @@ static int cmd_ieee802154_associate(const struct shell *sh,
				    size_t argc, char *argv[])
{
	struct net_if *iface = net_if_get_ieee802154();
	char ext_addr[EXT_ADDR_STR_LEN];
	char ext_addr[EXT_ADDR_STR_SIZE];

	if (argc < 3) {
		shell_help(sh);
@@ -89,8 +90,9 @@ static int cmd_ieee802154_associate(const struct shell *sh,
		return -ENOEXEC;
	}

	params = (struct ieee802154_req_params){0};
	params.pan_id = atoi(argv[1]);
	strncpy(ext_addr, argv[2], EXT_ADDR_STR_LEN - 1);
	strncpy(ext_addr, argv[2], sizeof(ext_addr));

	if (strlen(ext_addr) == EXT_ADDR_STR_LEN) {
		parse_extended_address(ext_addr, params.addr);
@@ -224,7 +226,7 @@ static int cmd_ieee802154_scan(const struct shell *sh,
		return -ENOEXEC;
	}

	(void)memset(&params, 0, sizeof(struct ieee802154_req_params));
	params = (struct ieee802154_req_params){0};

	net_mgmt_init_event_callback(&scan_cb, scan_result_cb,
				     NET_EVENT_IEEE802154_SCAN_RESULT);
@@ -467,16 +469,16 @@ static int cmd_ieee802154_get_ext_addr(const struct shell *sh,
			      "Could not get extended address\n");
		return -ENOEXEC;
	} else {
		static char ext_addr[EXT_ADDR_STR_LEN];
		static char ext_addr[EXT_ADDR_STR_SIZE];
		int i, pos = 0;

		for (i = 0; i < IEEE802154_EXT_ADDR_LENGTH; i++) {
			pos += snprintk(ext_addr + pos,
					EXT_ADDR_STR_LEN - pos,
					EXT_ADDR_STR_SIZE - pos,
					"%02X:", addr[i]);
		}

		ext_addr[EXT_ADDR_STR_LEN - 1] = '\0';
		ext_addr[EXT_ADDR_STR_SIZE - 1] = '\0';

		shell_fprintf(sh, SHELL_NORMAL,
			      "Extended address: %s\n", ext_addr);