diff options
| author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-08 13:39:59 +0200 | 
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-08 13:39:59 +0200 | 
| commit | 5e13a0c5ec05d382b488a691dfb8af015b1dea1e (patch) | |
| tree | 7a06dfa1f7661f8908193f2437b32452520221d3 /net/bluetooth/hci_core.c | |
| parent | b615b57a124a4af7b68196bc2fb8acc236041fa2 (diff) | |
| parent | 4f256e8aa3eda15c11c3cec3ec5336e1fc579cbd (diff) | |
| download | olio-linux-3.10-5e13a0c5ec05d382b488a691dfb8af015b1dea1e.tar.xz olio-linux-3.10-5e13a0c5ec05d382b488a691dfb8af015b1dea1e.zip  | |
Merge remote-tracking branch 'airlied/drm-core-next' into drm-intel-next-queued
Backmerge of drm-next to resolve a few ugly conflicts and to get a few
fixes from 3.4-rc6 (which drm-next has already merged). Note that this
merge also restricts the stencil cache lra evict policy workaround to
snb (as it should) - I had to frob the code anyway because the
CM0_MASK_SHIFT define died in the masked bit cleanups.
We need the backmerge to get Paulo Zanoni's infoframe regression fix
for gm45 - further bugfixes from him touch the same area and would
needlessly conflict.
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'net/bluetooth/hci_core.c')
| -rw-r--r-- | net/bluetooth/hci_core.c | 27 | 
1 files changed, 13 insertions, 14 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 92a857e3786..edfd61addce 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -1215,40 +1215,40 @@ struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)  	return NULL;  } -static int hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn, +static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,  						u8 key_type, u8 old_key_type)  {  	/* Legacy key */  	if (key_type < 0x03) -		return 1; +		return true;  	/* Debug keys are insecure so don't store them persistently */  	if (key_type == HCI_LK_DEBUG_COMBINATION) -		return 0; +		return false;  	/* Changed combination key and there's no previous one */  	if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff) -		return 0; +		return false;  	/* Security mode 3 case */  	if (!conn) -		return 1; +		return true;  	/* Neither local nor remote side had no-bonding as requirement */  	if (conn->auth_type > 0x01 && conn->remote_auth > 0x01) -		return 1; +		return true;  	/* Local side had dedicated bonding as requirement */  	if (conn->auth_type == 0x02 || conn->auth_type == 0x03) -		return 1; +		return true;  	/* Remote side had dedicated bonding as requirement */  	if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) -		return 1; +		return true;  	/* If none of the above criteria match, then don't store the key  	 * persistently */ -	return 0; +	return false;  }  struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]) @@ -1285,7 +1285,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,  		     bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)  {  	struct link_key *key, *old_key; -	u8 old_key_type, persistent; +	u8 old_key_type; +	bool persistent;  	old_key = hci_find_link_key(hdev, bdaddr);  	if (old_key) { @@ -1328,10 +1329,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,  	mgmt_new_link_key(hdev, key, persistent); -	if (!persistent) { -		list_del(&key->list); -		kfree(key); -	} +	if (conn) +		conn->flush_key = !persistent;  	return 0;  }  |