From patchwork Thu Feb 11 22:21:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inga Stotland X-Patchwork-Id: 381156 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B97CC43381 for ; Thu, 11 Feb 2021 22:23:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F0A2864E3B for ; Thu, 11 Feb 2021 22:23:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230202AbhBKWXN (ORCPT ); Thu, 11 Feb 2021 17:23:13 -0500 Received: from mga07.intel.com ([134.134.136.100]:1738 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230101AbhBKWWj (ORCPT ); Thu, 11 Feb 2021 17:22:39 -0500 IronPort-SDR: FVXTJAZTXc8/kEdLbLwYQw3cRMER5IT2aWWQFD5zLTys6qHik8l217c3K9BGuoIM2ISXdxiPrN xDspJbX42Sjg== X-IronPort-AV: E=McAfee;i="6000,8403,9892"; a="246392968" X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="246392968" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:21:56 -0800 IronPort-SDR: 4MFSBrUMTXIlw2vdkllRPxegfMZDJzgmuhSaQUh9XpMpBhQm8JZnkQVpaBQ9BD6bxgaPRCWTBa gLNQa0E4OFuw== X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="381070043" Received: from binman-mobl4.amr.corp.intel.com (HELO istotlan-desk.intel.com) ([10.251.152.23]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:21:55 -0800 From: Inga Stotland To: linux-bluetooth@vger.kernel.org Cc: brian.gix@intel.com, Inga Stotland Subject: [PATCH BlueZ 1/4] doc/mesh-api: Add notion of Device UUID compliance Date: Thu, 11 Feb 2021 14:21:40 -0800 Message-Id: <20210211222143.39986-2-inga.stotland@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210211222143.39986-1-inga.stotland@intel.com> References: <20210211222143.39986-1-inga.stotland@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Add requirement that the value of Device UUID supplied in CreateNetwork/Join/Import methods should be compliant with RFC 4122. --- doc/mesh-api.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/mesh-api.txt b/doc/mesh-api.txt index 254ccbd7f..f2c6b9e5c 100644 --- a/doc/mesh-api.txt +++ b/doc/mesh-api.txt @@ -27,7 +27,8 @@ Methods: The uuid parameter is a 16-byte array that contains Device UUID. This UUID must be unique (at least from the daemon perspective), therefore attempting to call this function using already - registered UUID results in an error. + registered UUID results in an error. The composition of the UUID + octets must be in compliance with RFC 4122. When provisioning finishes, the daemon will call either JoinComplete or JoinFailed method on object implementing @@ -149,7 +150,8 @@ Methods: The uuid parameter is a 16-byte array that contains Device UUID. This UUID must be unique (at least from the daemon perspective), therefore attempting to call this function using already - registered UUID results in an error. + registered UUID results in an error. The composition of the UUID + octets must be in compliance with RFC 4122. The other information the bluetooth-meshd daemon will preserve about the initial node, is to give it the initial primary @@ -179,7 +181,8 @@ Methods: The uuid parameter is a 16-byte array that contains Device UUID. This UUID must be unique (at least from the daemon perspective), therefore attempting to call this function using already - registered UUID results in an error. + registered UUID results in an error. The composition of the UUID + octets must be in compliance with RFC 4122. The dev_key parameter is the 16-byte value of the dev key of the imported mesh node. From patchwork Thu Feb 11 22:21:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inga Stotland X-Patchwork-Id: 381155 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20C08C433DB for ; Thu, 11 Feb 2021 22:23:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E9CD664E38 for ; Thu, 11 Feb 2021 22:23:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230209AbhBKWXR (ORCPT ); Thu, 11 Feb 2021 17:23:17 -0500 Received: from mga07.intel.com ([134.134.136.100]:1741 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230108AbhBKWWm (ORCPT ); Thu, 11 Feb 2021 17:22:42 -0500 IronPort-SDR: W3RNKm8+QM8tGHP5iX5POGbBaBwjox0xOJ2ZqtnH/gBU7gAhBPq72kCLZKwClnCP1Br0Ae3j2X D/RuZ5wxn/yQ== X-IronPort-AV: E=McAfee;i="6000,8403,9892"; a="246392971" X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="246392971" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:21:57 -0800 IronPort-SDR: KIm47ofDlTCCjMV8d3fAQWMQaUnHRzdkhPsxsfFwuQhvadnFciNUnh+gqkkOwf285xzcoGH0hV uFD9olfwkpXw== X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="381070051" Received: from binman-mobl4.amr.corp.intel.com (HELO istotlan-desk.intel.com) ([10.251.152.23]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:21:57 -0800 From: Inga Stotland To: linux-bluetooth@vger.kernel.org Cc: brian.gix@intel.com, Inga Stotland Subject: [PATCH BlueZ 2/4] mesh: Add validation of Device UUID value Date: Thu, 11 Feb 2021 14:21:41 -0800 Message-Id: <20210211222143.39986-3-inga.stotland@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210211222143.39986-1-inga.stotland@intel.com> References: <20210211222143.39986-1-inga.stotland@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Validate that the value of Device UUID supplied in CreateNetwork/Join/Import methods is compliant with RFC 4122. --- Makefile.am | 6 ++++-- mesh/mesh.c | 18 +++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Makefile.am b/Makefile.am index d0f979586..86f3409c3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -134,7 +134,8 @@ ell_headers = ell/util.h \ ell/base64.h \ ell/asn1-private.h \ ell/cert-private.h \ - ell/pem-private.h + ell/pem-private.h \ + ell/uuid.h ell_sources = ell/private.h ell/missing.h \ ell/util.c \ @@ -169,7 +170,8 @@ ell_sources = ell/private.h ell/missing.h \ ell/gvariant-private.h \ ell/gvariant-util.c \ ell/siphash-private.h \ - ell/siphash.c + ell/siphash.c \ + ell/uuid.c ell_libell_internal_la_SOURCES = $(ell_headers) $(ell_sources) endif diff --git a/mesh/mesh.c b/mesh/mesh.c index f29e8b6be..62d650328 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -533,7 +533,7 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, void *user_data) { const char *app_path, *sender; - struct l_dbus_message_iter iter_uuid; + struct l_dbus_message_iter iter; uint32_t n; l_debug("Join network request"); @@ -543,14 +543,13 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, "Provisioning in progress"); if (!l_dbus_message_get_arguments(msg, "oay", &app_path, - &iter_uuid)) + &iter)) return dbus_error(msg, MESH_ERROR_INVALID_ARGS, NULL); join_pending = l_new(struct join_data, 1); - if (!l_dbus_message_iter_get_fixed_array(&iter_uuid, - &join_pending->uuid, &n) - || n != 16) { + if (!l_dbus_message_iter_get_fixed_array(&iter, &join_pending->uuid, &n) + || n != 16 || !l_uuid_is_valid(join_pending->uuid)) { l_free(join_pending); join_pending = NULL; return dbus_error(msg, MESH_ERROR_INVALID_ARGS, @@ -785,8 +784,8 @@ static struct l_dbus_message *create_network_call(struct l_dbus *dbus, &iter_uuid)) return dbus_error(msg, MESH_ERROR_INVALID_ARGS, NULL); - if (!l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n) - || n != 16) + if (!l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n) || + n != 16 || !l_uuid_is_valid(uuid)) return dbus_error(msg, MESH_ERROR_INVALID_ARGS, "Bad device UUID"); @@ -835,8 +834,9 @@ static struct l_dbus_message *import_call(struct l_dbus *dbus, return dbus_error(msg, MESH_ERROR_INVALID_ARGS, NULL); if (!l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n) || - n != 16) - return dbus_error(msg, MESH_ERROR_INVALID_ARGS, "Bad dev UUID"); + n != 16 || !l_uuid_is_valid(uuid)) + return dbus_error(msg, MESH_ERROR_INVALID_ARGS, + "Bad device UUID"); if (node_find_by_uuid(uuid)) return dbus_error(msg, MESH_ERROR_ALREADY_EXISTS, From patchwork Thu Feb 11 22:21:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inga Stotland X-Patchwork-Id: 381944 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D1EEC433E0 for ; Thu, 11 Feb 2021 22:23:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6819564E38 for ; Thu, 11 Feb 2021 22:23:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230241AbhBKWXs (ORCPT ); Thu, 11 Feb 2021 17:23:48 -0500 Received: from mga07.intel.com ([134.134.136.100]:1736 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230015AbhBKWXG (ORCPT ); Thu, 11 Feb 2021 17:23:06 -0500 IronPort-SDR: X+GJK6s1Nq3rUM0vvq98mPT9FR5zFtdf5vj2ipIkWMI8KFicGRfA/+JUK5WInelaZORdF0VIDP mQeKicK8gZIQ== X-IronPort-AV: E=McAfee;i="6000,8403,9892"; a="246392975" X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="246392975" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:21:59 -0800 IronPort-SDR: iygIkBvAmk5k9DSpl8EOt74fnDXgtPMQiKRRme1fDr1QaK7lh7zEVoVYpRMdGlOohLKUW3QxNi O2TWr1eZBFKA== X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="381070056" Received: from binman-mobl4.amr.corp.intel.com (HELO istotlan-desk.intel.com) ([10.251.152.23]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:21:59 -0800 From: Inga Stotland To: linux-bluetooth@vger.kernel.org Cc: brian.gix@intel.com, Inga Stotland Subject: [PATCH BlueZ 3/4] test/test-mesh: Generate correct value for Device UUID Date: Thu, 11 Feb 2021 14:21:42 -0800 Message-Id: <20210211222143.39986-4-inga.stotland@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210211222143.39986-1-inga.stotland@intel.com> References: <20210211222143.39986-1-inga.stotland@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This ensures that the value of Device UUID when invoking Join method is compliant with RFC 4122. --- test/test-mesh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test-mesh b/test/test-mesh index 9e4783734..a478843a3 100755 --- a/test/test-mesh +++ b/test/test-mesh @@ -889,6 +889,11 @@ class MainMenu(Menu): uuid = bytearray.fromhex("0a0102030405060708090A0B0C0D0E0F") random.shuffle(uuid) + uuid[6] &= 0x0f; + uuid[6] |= 4 << 4; + uuid[8] &= 0x3f; + uuid[8] |= 0x80; + uuid_str = array_to_string(uuid) print(set_yellow('Joining with UUID ') + set_green(uuid_str)) From patchwork Thu Feb 11 22:21:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inga Stotland X-Patchwork-Id: 381154 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6BB6FC433DB for ; Thu, 11 Feb 2021 22:23:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3D0C964E3B for ; Thu, 11 Feb 2021 22:23:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229521AbhBKWXx (ORCPT ); Thu, 11 Feb 2021 17:23:53 -0500 Received: from mga07.intel.com ([134.134.136.100]:1738 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230080AbhBKWXJ (ORCPT ); Thu, 11 Feb 2021 17:23:09 -0500 IronPort-SDR: JfNbUWUJG1nTupVKlG16+5RXPy1zjWYSyYbQh5WxbB/swFJCZsk5OEGsjI7f37lW/VW9MLr6No H0BxqXyIFo9Q== X-IronPort-AV: E=McAfee;i="6000,8403,9892"; a="246392981" X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="246392981" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:22:01 -0800 IronPort-SDR: X8td3B/+fMnHk0RuGkNRaf7cI1lZFLtVxGqekCRucC2Jufh0AWsXO6zrdKR+pv76oS11AZomaH G42o3gEp5h+g== X-IronPort-AV: E=Sophos;i="5.81,171,1610438400"; d="scan'208";a="381070074" Received: from binman-mobl4.amr.corp.intel.com (HELO istotlan-desk.intel.com) ([10.251.152.23]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2021 14:22:00 -0800 From: Inga Stotland To: linux-bluetooth@vger.kernel.org Cc: brian.gix@intel.com, Inga Stotland Subject: [PATCH BlueZ 4/4] tools/mesh-cfg-client: Date: Thu, 11 Feb 2021 14:21:43 -0800 Message-Id: <20210211222143.39986-5-inga.stotland@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210211222143.39986-1-inga.stotland@intel.com> References: <20210211222143.39986-1-inga.stotland@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Make sure that the values of Device UUID supplied in CreateNetwork and AddRemoteNode methods are compliant with RFC 4122. Also, use a compliant value for Mesh UUID. --- tools/mesh-cfgclient.c | 6 +++--- tools/mesh/mesh-db.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/mesh-cfgclient.c b/tools/mesh-cfgclient.c index 28465a679..1eeed2a1a 100644 --- a/tools/mesh-cfgclient.c +++ b/tools/mesh-cfgclient.c @@ -731,7 +731,7 @@ static void create_net_setup(struct l_dbus_message *msg, void *user_data) struct l_dbus_message_builder *builder; /* Generate random UUID */ - l_getrandom(app.uuid, sizeof(app.uuid)); + l_uuid_v4(app.uuid); builder = l_dbus_message_builder_new(msg); @@ -899,7 +899,7 @@ static void cmd_import_node(int argc, char *argv[]) /* Device UUID */ req->data1 = l_util_from_hexstring(argv[1], &sz); - if (!req->data1 || sz != 16) { + if (!req->data1 || sz != 16 || !l_uuid_is_valid(req->data1)) { l_error("Failed to generate UUID array from %s", argv[1]); goto fail; } @@ -1298,7 +1298,7 @@ static void add_node_setup(struct l_dbus_message *msg, void *user_data) struct l_dbus_message_builder *builder; uuid = l_util_from_hexstring(str, &sz); - if (!uuid || sz != 16) { + if (!uuid || sz != 16 || !l_uuid_is_valid(uuid)) { l_error("Failed to generate UUID array from %s", str); return; } diff --git a/tools/mesh/mesh-db.c b/tools/mesh/mesh-db.c index d86913006..46f0c6075 100644 --- a/tools/mesh/mesh-db.c +++ b/tools/mesh/mesh-db.c @@ -1407,7 +1407,7 @@ bool mesh_db_create(const char *fname, const uint8_t token[8], if (!add_u8_8(jcfg, "token", token)) goto fail; - l_getrandom(uuid, 16); + l_uuid_v4(uuid); if (!add_u8_16(jcfg, "uuid", uuid)) goto fail;