linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* pull request: bluetooth 2012-05-04
@ 2012-05-05  0:12 Gustavo Padovan
  2012-05-08  7:07 ` Gustavo Padovan
  0 siblings, 1 reply; 13+ messages in thread
From: Gustavo Padovan @ 2012-05-05  0:12 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, linux-bluetooth, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1843 bytes --]

Hi John,

A few more patch to 3.4. There is 3 fixes from Mat Martineau, a fix for
a incoming MTU check that was breaking ERTM, still on ERTM there is a
patch that fixes concurrency with one of our locks. His third patch is
related to lock fixes too.
Besides that Johan fixed a wrong bit set in the Inquiry code, Vishal
Agarwal added a EIR fix and finally we have support for one more usb id.

Please pull or let me know of any problems!

	Gustavo

---

The following changes since commit 985140369be1e886754d8ac0375dd64e4f727311:

  Add Foxconn / Hon Hai IDs for btusb module (2012-04-24 11:38:41 -0300)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth for-upstream

for you to fetch changes up to 78521bdb4a42770c4c2d48317c00ec0d7f451a08:

  Bluetooth: Lock the L2CAP channel when sending (2012-05-04 20:56:29 -0300)

----------------------------------------------------------------
Johan Hedberg (1):
      Bluetooth: Fix Inquiry with RSSI event mask

Mat Martineau (3):
      Bluetooth: Fix a redundant and problematic incoming MTU check
      Bluetooth: Restore locking semantics when looking up L2CAP channels
      Bluetooth: Lock the L2CAP channel when sending

Michael Gruetzner (1):
      bluetooth: Add support for Foxconn/Hon Hai AR5BBU22 0489:E03C

Vishal Agarwal (1):
      Bluetooth: Fix EIR data generation for mgmt_device_found

 drivers/bluetooth/ath3k.c         |    6 ++++++
 drivers/bluetooth/btusb.c         |    3 +++
 include/net/bluetooth/bluetooth.h |    2 --
 include/net/bluetooth/hci_core.h  |   17 +++++++++++++++++
 net/bluetooth/hci_event.c         |    6 ++++--
 net/bluetooth/l2cap_core.c        |   30 +++---------------------------
 net/bluetooth/l2cap_sock.c        |   19 +++++++++++--------
 7 files changed, 44 insertions(+), 39 deletions(-)


[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread
* [PATCH 1/2] Bluetooth: notify userspace of security level change
@ 2012-05-04  1:59 Gustavo Padovan
  2012-05-06 16:07 ` Marcel Holtmann
  0 siblings, 1 reply; 13+ messages in thread
From: Gustavo Padovan @ 2012-05-04  1:59 UTC (permalink / raw)
  To: linux-bluetooth

When the userspace request a security level change it needs to be notified
of when the change is complete.
This patch make the socket non writable while the security request is
ongoing. If it succeeds POLL_OUT is emitted, otherwise the channel is
disconnected.

Signed-off-by: Gustavo Padovan <gustavo@padovan.org>
---
 include/net/bluetooth/bluetooth.h |    1 +
 net/bluetooth/af_bluetooth.c      |    2 +-
 net/bluetooth/hci_event.c         |    7 +++++++
 net/bluetooth/l2cap_core.c        |    5 +++++
 net/bluetooth/l2cap_sock.c        |   10 +++++-----
 5 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 2fb268f..4e750df 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -195,6 +195,7 @@ struct bt_sock {
 	struct list_head accept_q;
 	struct sock *parent;
 	u32 defer_setup;
+	bool  suspended;
 };
 
 struct bt_sock_list {
diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
index 72eb187..6fb68a9 100644
--- a/net/bluetooth/af_bluetooth.c
+++ b/net/bluetooth/af_bluetooth.c
@@ -450,7 +450,7 @@ unsigned int bt_sock_poll(struct file *file, struct socket *sock, poll_table *wa
 			sk->sk_state == BT_CONFIG)
 		return mask;
 
-	if (sock_writeable(sk))
+	if (!bt_sk(sk)->suspended && sock_writeable(sk))
 		mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
 	else
 		set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 507fcec..86f74f6 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2062,6 +2062,12 @@ static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *
 
 		clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
 
+		if (ev->status && conn->state == BT_CONNECTED) {
+			hci_acl_disconn(conn, 0x13);
+			hci_conn_put(conn);
+			goto unlock;
+		}
+
 		if (conn->state == BT_CONFIG) {
 			if (!ev->status)
 				conn->state = BT_CONNECTED;
@@ -2072,6 +2078,7 @@ static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *
 			hci_encrypt_cfm(conn, ev->status, ev->encrypt);
 	}
 
+unlock:
 	hci_dev_unlock(hdev);
 }
 
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 0f2b1be..67053f8 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -4884,6 +4884,11 @@ int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
 
 		if (!status && (chan->state == BT_CONNECTED ||
 						chan->state == BT_CONFIG)) {
+			struct sock *sk = chan->sk;
+
+			bt_sk(sk)->suspended = false;
+			sk->sk_state_change(sk);
+
 			l2cap_check_encryption(chan, encrypt);
 			l2cap_chan_unlock(chan);
 			continue;
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 82b6368..7e3386f 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -596,12 +596,12 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
 			sk->sk_state = BT_CONFIG;
 			chan->state = BT_CONFIG;
 
-		/* or for ACL link, under defer_setup time */
-		} else if (sk->sk_state == BT_CONNECT2 &&
-					bt_sk(sk)->defer_setup) {
-			err = l2cap_chan_check_security(chan);
+		/* or for ACL link */
 		} else {
-			err = -EINVAL;
+			if (!l2cap_chan_check_security(chan))
+				bt_sk(sk)->suspended = true;
+			else
+				sk->sk_state_change(sk);
 		}
 		break;
 
-- 
1.7.10


^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-05-13  6:22 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-05  0:12 pull request: bluetooth 2012-05-04 Gustavo Padovan
2012-05-08  7:07 ` Gustavo Padovan
2012-05-11 20:16   ` Gustavo Padovan
2012-05-12 18:22     ` John W. Linville
2012-05-12 19:09       ` Gustavo Padovan
2012-05-12 19:11         ` [PATCH 1/2] Bluetooth: notify userspace of security level change Gustavo Padovan
2012-05-12 19:11           ` [PATCH 2/2] Bluetooth: mgmt: Fix device_connected sending order Gustavo Padovan
2012-05-13  6:20             ` [PATCH 1/2] Bluetooth: notify userspace of security level change Gustavo Padovan
2012-05-13  6:22           ` Gustavo Padovan
2012-05-13  4:31         ` pull request: bluetooth 2012-05-04 Johan Hedberg
  -- strict thread matches above, loose matches on Subject: below --
2012-05-04  1:59 [PATCH 1/2] Bluetooth: notify userspace of security level change Gustavo Padovan
2012-05-06 16:07 ` Marcel Holtmann
2012-05-07  5:13   ` Gustavo Padovan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).