summaryrefslogtreecommitdiffstats
path: root/btif
diff options
context:
space:
mode:
authorJessica Wagantall <jwagantall@cyngn.com>2016-07-07 12:32:54 -0700
committerJessica Wagantall <jwagantall@cyngn.com>2016-07-07 14:16:05 -0700
commit8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5 (patch)
tree1e95cbbabe6f2b5b2e17edf2841c7f921eff39c0 /btif
parent2e63e65c7a558415f64a1957bd9cc060ab10f64e (diff)
parent514139f4b40cbb035bb92f3e24d5a389d75db9e6 (diff)
downloadandroid_system_bt-8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5.tar.gz
android_system_bt-8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5.tar.bz2
android_system_bt-8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5.zip
Merge remote-tracking branch 'remotes/android-6.0.1_r52' into HEAD
Ticket: CYNGNOS-3020 Change-Id: I0d26ff4917b8886ca5fcc54b235bdb6afe8d8925
Diffstat (limited to 'btif')
-rw-r--r--btif/include/btif_api.h17
-rw-r--r--btif/include/btif_storage.h12
-rw-r--r--btif/src/bluetooth.c15
-rw-r--r--btif/src/btif_config.c22
-rw-r--r--btif/src/btif_hh.c9
-rw-r--r--btif/src/btif_storage.c25
6 files changed, 97 insertions, 3 deletions
diff --git a/btif/include/btif_api.h b/btif/include/btif_api.h
index bf9ee3f29..fc1b67afe 100644
--- a/btif/include/btif_api.h
+++ b/btif/include/btif_api.h
@@ -87,6 +87,23 @@ bt_status_t btif_shutdown_bluetooth(void);
/*******************************************************************************
**
+** Function is_restricted_mode
+**
+** Description Checks if BT was enabled in restriced mode. In restricted
+** mode, bonds that are created are marked as temporary.
+** These bonds persist until we leave restricted mode, at
+** which point they will be deleted from the config. Also
+** while in restricted mode, the user can access devices
+** that are already paired before entering restricted mode,
+** but they cannot remove any of these devices.
+**
+** Returns bool
+**
+*******************************************************************************/
+bool is_restricted_mode(void);
+
+/*******************************************************************************
+**
** Function btif_get_adapter_properties
**
** Description Fetches all local adapter properties
diff --git a/btif/include/btif_storage.h b/btif/include/btif_storage.h
index e4d465c9f..46e4ced94 100644
--- a/btif/include/btif_storage.h
+++ b/btif/include/btif_storage.h
@@ -325,6 +325,18 @@ BOOLEAN btif_storage_is_fixed_pin_zeros_keyboard(bt_bdaddr_t *remote_bd_addr);
/*******************************************************************************
**
+** Function btif_storage_is_retricted_device
+**
+** Description BTIF storage API - checks if this device is a restricted device
+**
+** Returns TRUE if the device is labled as restricted
+** FALSE otherwise
+**
+*******************************************************************************/
+BOOLEAN btif_storage_is_restricted_device(const bt_bdaddr_t *remote_bd_addr);
+
+/*******************************************************************************
+**
** Function btif_storage_is_wiimote
**
** Description BTIF storage API - checks if this device is a wiimote
diff --git a/btif/src/bluetooth.c b/btif/src/bluetooth.c
index 8c8a6cb39..78c98ebc8 100644
--- a/btif/src/bluetooth.c
+++ b/btif/src/bluetooth.c
@@ -61,6 +61,7 @@
#include "osi/include/osi.h"
#include "stack_manager.h"
#include "btif_config.h"
+#include "btif_storage.h"
#include "l2cdefs.h"
#include "l2c_api.h"
@@ -80,6 +81,7 @@
************************************************************************************/
bt_callbacks_t *bt_hal_cbacks = NULL;
+bool restricted_mode = FALSE;
/** Operating System specific callouts for resource management */
bt_os_callouts_t *bt_os_callouts = NULL;
@@ -165,8 +167,10 @@ static int init(bt_callbacks_t *callbacks) {
return BT_STATUS_SUCCESS;
}
-static int enable(void) {
- LOG_INFO("%s", __func__);
+static int enable(bool start_restricted) {
+ LOG_INFO(LOG_TAG, "%s: start restricted = %d", __func__, start_restricted);
+
+ restricted_mode = start_restricted;
if (!interface_ready())
return BT_STATUS_NOT_READY;
@@ -193,6 +197,10 @@ static void ssrcleanup(void)
return;
}
+bool is_restricted_mode() {
+ return restricted_mode;
+}
+
static int get_adapter_properties(void)
{
/* sanity check */
@@ -303,6 +311,9 @@ static int cancel_bond(const bt_bdaddr_t *bd_addr)
static int remove_bond(const bt_bdaddr_t *bd_addr)
{
+ if (is_restricted_mode() && !btif_storage_is_restricted_device(bd_addr))
+ return BT_STATUS_SUCCESS;
+
/* sanity check */
if (interface_ready() == FALSE)
return BT_STATUS_NOT_READY;
diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c
index 39f4bbcaf..3c05812fb 100644
--- a/btif/src/btif_config.c
+++ b/btif/src/btif_config.c
@@ -28,6 +28,7 @@
#include "osi/include/allocator.h"
#include "btcore/include/bdaddr.h"
#include "btif_common.h"
+#include "btif_api.h"
#include "btif_config.h"
#include "btif_config_transcode.h"
#include "btif_util.h"
@@ -47,6 +48,7 @@ static const period_ms_t CONFIG_SETTLE_PERIOD_MS = 3000;
static void timer_config_save_cb(void *data);
static void btif_config_write(UINT16 event, char *p_param);
static void btif_config_remove_unpaired(config_t *config);
+static void btif_config_remove_restricted(config_t *config);
// TODO(zachoverflow): Move these two functions out, because they are too specific for this file
// {grumpy-cat/no, monty-python/you-make-me-sad}
@@ -113,6 +115,10 @@ static future_t *init(void) {
btif_config_remove_unpaired(config);
+ // Cleanup temporary pairings if we have left guest mode
+ if (!is_restricted_mode())
+ btif_config_remove_restricted(config);
+
// TODO(sharvil): use a non-wake alarm for this once we have
// API support for it. There's no need to wake the system to
// write back to disk.
@@ -427,3 +433,19 @@ static void btif_config_remove_unpaired(config_t *conf) {
snode = config_section_next(snode);
}
}
+
+static void btif_config_remove_restricted(config_t* config) {
+ assert(config != NULL);
+
+ pthread_mutex_lock(&lock);
+ const config_section_node_t *snode = config_section_begin(config);
+ while (snode != config_section_end(config)) {
+ const char *section = config_section_name(snode);
+ if (string_is_bdaddr(section) && config_has_key(config, section, "Restricted")) {
+ BTIF_TRACE_DEBUG("%s: Removing restricted device %s", __func__, section);
+ config_remove_section(config, section);
+ }
+ snode = config_section_next(snode);
+ }
+ pthread_mutex_unlock(&lock);
+}
diff --git a/btif/src/btif_hh.c b/btif/src/btif_hh.c
index 8188942b5..88e767a91 100644
--- a/btif/src/btif_hh.c
+++ b/btif/src/btif_hh.c
@@ -33,6 +33,8 @@
#define LOG_TAG "bt_btif_hh"
+#include <cutils/log.h>
+
#include "bta_api.h"
#include "bta_hh_api.h"
#include "btif_storage.h"
@@ -257,7 +259,12 @@ static void toggle_os_keylockstates(int fd, int changedlockstates)
*******************************************************************************/
static BT_HDR *create_pbuf(UINT16 len, UINT8 *data)
{
- BT_HDR* p_buf = GKI_getbuf((UINT16) (len + BTA_HH_MIN_OFFSET + sizeof(BT_HDR)));
+ UINT16 buflen = (UINT16) (len + BTA_HH_MIN_OFFSET + sizeof(BT_HDR));
+ if (buflen < len) {
+ android_errorWriteWithInfoLog(0x534e4554, "28672558", -1, NULL, 0);
+ return NULL;
+ }
+ BT_HDR* p_buf = GKI_getbuf(buflen);
if (p_buf) {
UINT8* pbuf_data;
diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c
index 895631194..4dfe27625 100644
--- a/btif/src/btif_storage.c
+++ b/btif/src/btif_storage.c
@@ -833,6 +833,13 @@ bt_status_t btif_storage_add_bonded_device(bt_bdaddr_t *remote_bd_addr,
int ret = btif_config_set_int(bdstr, "LinkKeyType", (int)key_type);
ret &= btif_config_set_int(bdstr, "PinLength", (int)pin_length);
ret &= btif_config_set_bin(bdstr, "LinkKey", link_key, sizeof(LINK_KEY));
+
+ if (is_restricted_mode()) {
+ BTIF_TRACE_WARNING("%s: '%s' pairing will be removed if unrestricted",
+ __func__, bdstr);
+ btif_config_set_int(bdstr, "Restricted", 1);
+ }
+
/* write bonded info immediately */
btif_config_flush();
return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL;
@@ -1726,6 +1733,24 @@ BOOLEAN btif_storage_is_fixed_pin_zeros_keyboard(bt_bdaddr_t *remote_bd_addr)
}
+/*******************************************************************************
+**
+** Function btif_storage_is_restricted_device
+**
+** Description BTIF storage API - checks if this device is a restricted device
+**
+** Returns TRUE if the device is labeled as restricted
+** FALSE otherwise
+**
+*******************************************************************************/
+BOOLEAN btif_storage_is_restricted_device(const bt_bdaddr_t *remote_bd_addr)
+{
+ bdstr_t bdstr;
+ bdaddr_to_string(remote_bd_addr, bdstr, sizeof(bdstr));
+
+ return btif_config_exist(bdstr, "Restricted");
+}
+
static const char *wii_names[4] = {
"Nintendo RVL-CNT-01", /* 1st gen */
"Nintendo RVL-CNT-01-TR", /* 2nd gen */