Bluetooth: host: Move pending keys pending flags out of key storage

Move the pending ID keys add and delete flag out of keys storage area.
These flags are runtime flags and should not be stored in persistent
storage.
Due to struct alignment storage start has to be aligned so that
variables added before storage start does not affect the storage bytes
by introducing padding in the storage area

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
This commit is contained in:
Joakim Andersson 2020-03-25 16:00:35 +01:00 committed by Johan Hedberg
commit c8b3d2772a
2 changed files with 13 additions and 8 deletions

View file

@ -1700,14 +1700,14 @@ static void slave_update_conn_param(struct bt_conn *conn)
#if defined(CONFIG_BT_SMP)
static void pending_id_update(struct bt_keys *keys, void *data)
{
if (keys->flags & BT_KEYS_ID_PENDING_ADD) {
keys->flags &= ~BT_KEYS_ID_PENDING_ADD;
if (keys->state & BT_KEYS_ID_PENDING_ADD) {
keys->state &= ~BT_KEYS_ID_PENDING_ADD;
bt_id_add(keys);
return;
}
if (keys->flags & BT_KEYS_ID_PENDING_DEL) {
keys->flags &= ~BT_KEYS_ID_PENDING_DEL;
if (keys->state & BT_KEYS_ID_PENDING_DEL) {
keys->state &= ~BT_KEYS_ID_PENDING_DEL;
bt_id_del(keys);
return;
}
@ -1716,7 +1716,7 @@ static void pending_id_update(struct bt_keys *keys, void *data)
static void pending_id_keys_update_set(struct bt_keys *keys, u8_t flag)
{
atomic_set_bit(bt_dev.flags, BT_DEV_ID_PENDING);
keys->flags |= flag;
keys->state |= flag;
}
static void pending_id_keys_update(void)

View file

@ -19,11 +19,15 @@ enum {
BT_KEYS_REMOTE_CSRK | BT_KEYS_LTK_P256),
};
enum {
BT_KEYS_ID_PENDING_ADD = BIT(0),
BT_KEYS_ID_PENDING_DEL = BIT(1),
};
enum {
BT_KEYS_AUTHENTICATED = BIT(0),
BT_KEYS_DEBUG = BIT(1),
BT_KEYS_ID_PENDING_ADD = BIT(2),
BT_KEYS_ID_PENDING_DEL = BIT(3),
/* Bit 2 and 3 might accidentally exist in old stored keys */
BT_KEYS_SC = BIT(4),
};
@ -46,7 +50,8 @@ struct bt_csrk {
struct bt_keys {
u8_t id;
bt_addr_le_t addr;
u8_t storage_start[0];
u8_t state;
u8_t storage_start[0] __aligned(sizeof(void *));
u8_t enc_size;
u8_t flags;
u16_t keys;