diff options
author | David S. Miller <davem@davemloft.net> | 2014-12-09 18:12:03 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-09 18:12:03 -0500 |
commit | b5f185f33d0432cef6ff78765e033dfa8f4de068 (patch) | |
tree | 33179c016b8fc3b4d57ed7a7786079ba00b6ef4a /net/bluetooth/smp.h | |
parent | 450fa21942fe2c37f0c9f52d1a33bbc081eee288 (diff) | |
parent | 81c412600f946fc1c8731685cb6c6fae8002043a (diff) |
Merge tag 'master-2014-12-08' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
John W. Linville says:
====================
pull request: wireless-next 2014-12-08
Please pull this last batch of pending wireless updates for the 3.19 tree...
For the wireless bits, Johannes says:
"This time I have Felix's no-status rate control work, which will allow
drivers to work better with rate control even if they don't have perfect
status reporting. In addition to this, a small hwsim fix from Patrik,
one of the regulatory patches from Arik, and a number of cleanups and
fixes I did myself.
Of note is a patch where I disable CFG80211_WEXT so that compatibility
is no longer selectable - this is intended as a wake-up call for anyone
who's still using it, and is still easily worked around (it's a one-line
patch) before we fully remove the code as well in the future."
For the Bluetooth bits, Johan says:
"Here's one more bluetooth-next pull request for 3.19:
- Minor cleanups for ieee802154 & mac802154
- Fix for the kernel warning with !TASK_RUNNING reported by Kirill A.
Shutemov
- Support for another ath3k device
- Fix for tracking link key based security level
- Device tree bindings for btmrvl + a state update fix
- Fix for wrong ACL flags on LE links"
And...
"In addition to the previous one this contains two more cleanups to
mac802154 as well as support for some new HCI features from the
Bluetooth 4.2 specification.
From the original request:
'Here's what should be the last bluetooth-next pull request for 3.19.
It's rather large but the majority of it is the Low Energy Secure
Connections feature that's part of the Bluetooth 4.2 specification. The
specification went public only this week so we couldn't publish the
corresponding code before that. The code itself can nevertheless be
considered fairly mature as it's been in development for over 6 months
and gone through several interoperability test events.
Besides LE SC the pull request contains an important fix for command
complete events for mgmt sockets which also fixes some leaks of hci_conn
objects when powering off or unplugging Bluetooth adapters.
A smaller feature that's part of the pull request is service discovery
support. This is like normal device discovery except that devices not
matching specific UUIDs or strong enough RSSI are filtered out.
Other changes that the pull request contains are firmware dump support
to the btmrvl driver, firmware download support for Broadcom BCM20702A0
variants, as well as some coding style cleanups in 6lowpan &
ieee802154/mac802154 code.'"
For the NFC bits, Samuel says:
"With this one we get:
- NFC digital improvements for DEP support: Chaining, NACK and ATN
support added.
- NCI improvements: Support for p2p target, SE IO operand addition,
SE operands extensions to support proprietary implementations, and
a few fixes.
- NFC HCI improvements: OPEN_PIPE and NOTIFY_ALL_CLEARED support,
and SE IO operand addition.
- A bunch of minor improvements and fixes for STMicro st21nfcb and
st21nfca"
For the iwlwifi bits, Emmanuel says:
"Major works are CSA and TDLS. On top of that I have a new
firmware API for scan and a few rate control improvements.
Johannes find a few tricks to improve our CPU utilization
and adds support for a new spin of 7265 called 7265D.
Along with this a few random things that don't stand out."
And...
"I deprecate here -8.ucode since -9 has been published long ago.
Along with that I have a new activity, we have now better
a infrastructure for firmware debugging. This will allow to
have configurable probes insides the firmware.
Luca continues his work on NetDetect, this feature is now
complete. All the rest is minor fixes here and there."
For the Atheros bits, Kalle says:
"Only ath10k changes this time and no major changes. Most visible are:
o new debugfs interface for runtime firmware debugging (Yanbo)
o fix shared WEP (Sujith)
o don't rebuild whenever kernel version changes (Johannes)
o lots of refactoring to make it easier to add new hw support (Michal)
There's also smaller fixes and improvements with no point of listing
here."
In addition, there are a few last minute updates to ath5k,
ath9k, brcmfmac, brcmsmac, mwifiex, rt2x00, rtlwifi, and wil6210.
Also included is a pull of the wireless tree to pick-up the fixes
originally included in "pull request: wireless 2014-12-03"...
Please let me know if there are problems!
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bluetooth/smp.h')
-rw-r--r-- | net/bluetooth/smp.h | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/net/bluetooth/smp.h b/net/bluetooth/smp.h index f76083b85005..3296bf42ae80 100644 --- a/net/bluetooth/smp.h +++ b/net/bluetooth/smp.h | |||
@@ -50,10 +50,13 @@ struct smp_cmd_pairing { | |||
50 | #define SMP_DIST_ENC_KEY 0x01 | 50 | #define SMP_DIST_ENC_KEY 0x01 |
51 | #define SMP_DIST_ID_KEY 0x02 | 51 | #define SMP_DIST_ID_KEY 0x02 |
52 | #define SMP_DIST_SIGN 0x04 | 52 | #define SMP_DIST_SIGN 0x04 |
53 | #define SMP_DIST_LINK_KEY 0x08 | ||
53 | 54 | ||
54 | #define SMP_AUTH_NONE 0x00 | 55 | #define SMP_AUTH_NONE 0x00 |
55 | #define SMP_AUTH_BONDING 0x01 | 56 | #define SMP_AUTH_BONDING 0x01 |
56 | #define SMP_AUTH_MITM 0x04 | 57 | #define SMP_AUTH_MITM 0x04 |
58 | #define SMP_AUTH_SC 0x08 | ||
59 | #define SMP_AUTH_KEYPRESS 0x10 | ||
57 | 60 | ||
58 | #define SMP_CMD_PAIRING_CONFIRM 0x03 | 61 | #define SMP_CMD_PAIRING_CONFIRM 0x03 |
59 | struct smp_cmd_pairing_confirm { | 62 | struct smp_cmd_pairing_confirm { |
@@ -102,7 +105,23 @@ struct smp_cmd_security_req { | |||
102 | __u8 auth_req; | 105 | __u8 auth_req; |
103 | } __packed; | 106 | } __packed; |
104 | 107 | ||
105 | #define SMP_CMD_MAX 0x0b | 108 | #define SMP_CMD_PUBLIC_KEY 0x0c |
109 | struct smp_cmd_public_key { | ||
110 | __u8 x[32]; | ||
111 | __u8 y[32]; | ||
112 | } __packed; | ||
113 | |||
114 | #define SMP_CMD_DHKEY_CHECK 0x0d | ||
115 | struct smp_cmd_dhkey_check { | ||
116 | __u8 e[16]; | ||
117 | } __packed; | ||
118 | |||
119 | #define SMP_CMD_KEYPRESS_NOTIFY 0x0e | ||
120 | struct smp_cmd_keypress_notify { | ||
121 | __u8 value; | ||
122 | } __packed; | ||
123 | |||
124 | #define SMP_CMD_MAX 0x0e | ||
106 | 125 | ||
107 | #define SMP_PASSKEY_ENTRY_FAILED 0x01 | 126 | #define SMP_PASSKEY_ENTRY_FAILED 0x01 |
108 | #define SMP_OOB_NOT_AVAIL 0x02 | 127 | #define SMP_OOB_NOT_AVAIL 0x02 |
@@ -114,6 +133,10 @@ struct smp_cmd_security_req { | |||
114 | #define SMP_UNSPECIFIED 0x08 | 133 | #define SMP_UNSPECIFIED 0x08 |
115 | #define SMP_REPEATED_ATTEMPTS 0x09 | 134 | #define SMP_REPEATED_ATTEMPTS 0x09 |
116 | #define SMP_INVALID_PARAMS 0x0a | 135 | #define SMP_INVALID_PARAMS 0x0a |
136 | #define SMP_DHKEY_CHECK_FAILED 0x0b | ||
137 | #define SMP_NUMERIC_COMP_FAILED 0x0c | ||
138 | #define SMP_BREDR_PAIRING_IN_PROGRESS 0x0d | ||
139 | #define SMP_CROSS_TRANSP_NOT_ALLOWED 0x0e | ||
117 | 140 | ||
118 | #define SMP_MIN_ENC_KEY_SIZE 7 | 141 | #define SMP_MIN_ENC_KEY_SIZE 7 |
119 | #define SMP_MAX_ENC_KEY_SIZE 16 | 142 | #define SMP_MAX_ENC_KEY_SIZE 16 |
@@ -123,12 +146,29 @@ enum { | |||
123 | SMP_STK, | 146 | SMP_STK, |
124 | SMP_LTK, | 147 | SMP_LTK, |
125 | SMP_LTK_SLAVE, | 148 | SMP_LTK_SLAVE, |
149 | SMP_LTK_P256, | ||
150 | SMP_LTK_P256_DEBUG, | ||
126 | }; | 151 | }; |
127 | 152 | ||
153 | static inline bool smp_ltk_is_sc(struct smp_ltk *key) | ||
154 | { | ||
155 | switch (key->type) { | ||
156 | case SMP_LTK_P256: | ||
157 | case SMP_LTK_P256_DEBUG: | ||
158 | return true; | ||
159 | } | ||
160 | |||
161 | return false; | ||
162 | } | ||
163 | |||
128 | static inline u8 smp_ltk_sec_level(struct smp_ltk *key) | 164 | static inline u8 smp_ltk_sec_level(struct smp_ltk *key) |
129 | { | 165 | { |
130 | if (key->authenticated) | 166 | if (key->authenticated) { |
131 | return BT_SECURITY_HIGH; | 167 | if (smp_ltk_is_sc(key)) |
168 | return BT_SECURITY_FIPS; | ||
169 | else | ||
170 | return BT_SECURITY_HIGH; | ||
171 | } | ||
132 | 172 | ||
133 | return BT_SECURITY_MEDIUM; | 173 | return BT_SECURITY_MEDIUM; |
134 | } | 174 | } |
@@ -145,8 +185,9 @@ bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level, | |||
145 | int smp_conn_security(struct hci_conn *hcon, __u8 sec_level); | 185 | int smp_conn_security(struct hci_conn *hcon, __u8 sec_level); |
146 | int smp_user_confirm_reply(struct hci_conn *conn, u16 mgmt_op, __le32 passkey); | 186 | int smp_user_confirm_reply(struct hci_conn *conn, u16 mgmt_op, __le32 passkey); |
147 | 187 | ||
148 | bool smp_irk_matches(struct hci_dev *hdev, u8 irk[16], bdaddr_t *bdaddr); | 188 | bool smp_irk_matches(struct hci_dev *hdev, const u8 irk[16], |
149 | int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa); | 189 | const bdaddr_t *bdaddr); |
190 | int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa); | ||
150 | 191 | ||
151 | int smp_register(struct hci_dev *hdev); | 192 | int smp_register(struct hci_dev *hdev); |
152 | void smp_unregister(struct hci_dev *hdev); | 193 | void smp_unregister(struct hci_dev *hdev); |