From 9aea2c2f92dd5245f6b35d564ce8e471fec2b4ec Mon Sep 17 00:00:00 2001 From: Pavlin Radoslavov Date: Fri, 7 Jul 2017 01:48:40 -0700 Subject: [PATCH] Disable PAN Reverse Tethering when connection originated by the Remote * Check for valid interactions between the three PAN profile roles per Table 1 in PAN Profile v1.0 spec. * Explicitly disable connections to the local PANU if the remote is not PANU. Bug: 63145701 Test: External script Change-Id: I29a7e404ba7e4453b6a7c59148a2b3eb7395303a Merged-In: I29a7e404ba7e4453b6a7c59148a2b3eb7395303a --- stack/pan/pan_main.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/stack/pan/pan_main.cc b/stack/pan/pan_main.cc index d89096bb1..01e1ea4ca 100644 --- a/stack/pan/pan_main.cc +++ b/stack/pan/pan_main.cc @@ -214,6 +214,39 @@ void pan_conn_ind_cb(uint16_t handle, BD_ADDR p_bda, tBT_UUID* remote_uuid, return; } + /* Check for valid interactions between the three PAN profile roles */ + /* + * For reference, see Table 1 in PAN Profile v1.0 spec. + * Note: the remote is the initiator. + */ + bool is_valid_interaction = false; + switch (remote_uuid->uu.uuid16) { + case UUID_SERVCLASS_NAP: + case UUID_SERVCLASS_GN: + if (local_uuid->uu.uuid16 == UUID_SERVCLASS_PANU) + is_valid_interaction = true; + break; + case UUID_SERVCLASS_PANU: + is_valid_interaction = true; + break; + } + /* + * Explicitly disable connections to the local PANU if the remote is + * not PANU. + */ + if ((local_uuid->uu.uuid16 == UUID_SERVCLASS_PANU) && + (remote_uuid->uu.uuid16 != UUID_SERVCLASS_PANU)) { + is_valid_interaction = false; + } + if (!is_valid_interaction) { + PAN_TRACE_ERROR( + "PAN Connection failed because of invalid PAN profile roles " + "interaction: Remote UUID 0x%x Local UUID 0x%x", + remote_uuid->uu.uuid16, local_uuid->uu.uuid16); + BNEP_ConnectResp(handle, BNEP_CONN_FAILED_SRC_UUID); + return; + } + /* Requested destination role is */ if (local_uuid->uu.uuid16 == UUID_SERVCLASS_PANU) req_role = PAN_ROLE_CLIENT; -- 2.11.0