20 Commits
Author SHA1 Message Date
Waldemar Rymarkiewicz 4c0ba9ac4b NFC: Fix typo negociating -> negotiating
Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Samuel Ortiz <[email protected]>
2012-09-25 00:17:28 +02:00
Waldemar Rymarkiewicz 12bfd1e890 NFC: Don't handle consequent RSET frames after UA
During processing incoming RSET frame chip, possibly due to
its internal timout, can retrnasmit an another RSET which
is next queued for processing in shdlc layer.

In case when we accept processed RSET skip those remaining on
the rcv queue until chip will send it's first S or I frame.
This will mean the chip completed connection as well.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Samuel Ortiz <[email protected]>
2012-09-25 00:17:27 +02:00
Waldemar Rymarkiewicz 9010e39f50 NFC: Handle RSET in SHDLC_CONNECTING state
As queue_work() does not guarantee immediate execution of sm_work it
can happen in crossover RSET usecase that connect timer will constantly
change the shdlc state from NEGOTIATING to CONNECTING before shdlc has
chance to handle incoming frame.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Acked-by: Eric Lapuyade <[email protected]>
Signed-off-by: Samuel Ortiz <[email protected]>
2012-09-25 00:17:27 +02:00
Waldemar Rymarkiewicz 96e324024b NFC: xmit from hci ops must return 0 or negative
xmit callback provided by a driver encapsulates upper layers
data and sends it to the hardware. So, HCI does not know the
exact amount of data being sent and thus can't handle partially
sent frames properly.

Therefore, the driver must return 0 for completely sent frame or
negative for failure.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Acked-by: Eric Lapuyade <[email protected]>
Signed-off-by: Samuel Ortiz <[email protected]>
2012-09-25 00:17:27 +02:00
Waldemar Rymarkiewicz c1be211727 NFC: Correct outgoing frame before requeueing
Driver must handle its data added to the frame, so at this point
removeing control field of shdlc frame is enough.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Acked-by: Eric Lapuyade <[email protected]>
Signed-off-by: Samuel Ortiz <[email protected]>
2012-09-25 00:17:24 +02:00
Waldemar Rymarkiewicz ade672082d NFC: Remove crc generation from shdlc layer
Checksum is specific for a chip spcification and it varies
(in size and type) between different hardware. It should be
handled in the driver then.

Moreover, shdlc spec doesn't mention crc as a part of the frame.

Update pn544_hci driver as well.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Acked-by: Eric Lapuyade <[email protected]>
Signed-off-by: Samuel Ortiz <[email protected]>
2012-09-25 00:17:24 +02:00
Waldemar Rymarkiewicz b6f98044a6 Bluetooth: Fix possible NULL pointer dereference
Checking conn->pending_sec_level if there is no connection leads to potential
null pointer dereference. Don't process pin_code_request_event at all if no
connection exists.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Acked-by: Marcel Holtmann <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-09-29 15:23:58 -03:00
Waldemar Rymarkiewicz 5a9d0a3ffb Bluetooth: Clean up some code style issues
Fix lines longer than 80 chars in length.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-06-09 16:33:28 -03:00
Waldemar Rymarkiewicz ef4177e2bf Bluetooth: Simplify hci_conn_accept_secure check
If the link key is secure (authenticated or combination 16 digit)
the sec_level will be always BT_SECURITY_HIGH. Therefore, instead
of checking the link key type simply check the sec_level on the link.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-06-08 16:58:19 -03:00
Waldemar Rymarkiewicz 96d97a673d Bluetooth: Verify a pin code in pin_code_reply
As we cannot relay on a userspace mgmt api implementation we should verify
if pin_code_reply in fact contains the secure pin code.

If userspace replied with unsecure pincode when secure was required we will
send pin_code_neg_reply to the controller.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-06-08 16:58:19 -03:00
Waldemar Rymarkiewicz 24718ca5ee Bluetooth: Remove a magic number
Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-06-08 16:58:19 -03:00
Waldemar Rymarkiewicz d7556e20ad Bluetooth: Refactor hci_auth_complete_evt function
Replace if(conn) with if(!conn) checking to avoid too many nested statements

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-06-08 16:58:18 -03:00
Waldemar Rymarkiewicz 19f8def031 Bluetooth: Fix auth_complete_evt for legacy units
Legacy devices don't re-authenticate the link properly if a link key
already exists.  Thus, don't update sec_level for this case even if
hci_auth_complete_evt indicates success. Otherwise the sec_level will
not reflect a real security on the link.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-06-08 16:58:18 -03:00
Waldemar Rymarkiewicz b3b1b06158 Bluetooth: Double check sec req for pre 2.1 device
In case of pre v2.1 devices authentication request will return
success immediately if the link key already exists without any
authentication process.

That means, it's not possible to re-authenticate the link if you
already have combination key and for instance want to re-authenticate
to get the high security (use 16 digit pin).

Therefore, it's necessary to check security requirements on auth
complete event to prevent not enough secure connection.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-05-11 14:56:28 -03:00
Waldemar Rymarkiewicz a770bb5aea Bluetooth: Add secure flag for mgmt_pin_code_req
Extend the mgmt_pin_code_request interface to require secure
pin code (16 digit) for authentication.

This is a kernel part of the secure pin code requirement notification
to user space agent.

Code styling fix by Johan Hedberg.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Johan Hedberg <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-04-28 15:19:43 -03:00
Waldemar Rymarkiewicz 58797bf772 Bluetooth: Respect local MITM req in io_cap reply
If host requires MITM protection notify that to controller in
io capabilities reply even if the remote device requires no bonding.

If it is not respected, host can get an unauthenticated link key while
it expects authenticated one.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-04-28 15:03:50 -03:00
Waldemar Rymarkiewicz 60b83f571c Bluetooth: Ignore key unauthenticated for high security
High security level for pre v2.1 devices requires combination link key
authenticated by at least 16 digit PIN code.

It's also necessary to update key_type and pin_length when the key
exists and is sufficently secured for the connection as there will be
no link key notify event in that case.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-04-28 15:03:42 -03:00
Waldemar Rymarkiewicz 13d39315c2 Bluetooth: Map sec_level to link key requirements
Keep the link key type together with connection and use it to
map security level to link key requirements. Authenticate and/or
encrypt connection if the link is insufficiently secure.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-04-28 15:02:12 -03:00
Waldemar Rymarkiewicz 9003c4e220 Bluetooth: Don't modify sec_level if auth failed
If authentication fails the security level should stay as it was set
before the process has started. Setting BT_SECURITY_LOW can hide real
security level on a link eg. having BT_SECURITY_MEDIUM on the link,
re-authenticate with failure to get BT_SECURITY_HIGH, as  a result we
get BT_SECURITY_LOW on the link while the real security is still medium.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-04-28 15:02:08 -03:00
Waldemar Rymarkiewicz b6020ba055 Bluetooth: Add definitions for link key types
Introduce the link key types defs and use them instead of magic numbers.

Signed-off-by: Waldemar Rymarkiewicz <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
2011-04-28 15:02:04 -03:00