1. 03 12月, 2014 10 次提交
  2. 02 12月, 2014 1 次提交
    • J
      Bluetooth: Track both local and remote L2CAP fixed channel mask · 0bd49fc7
      Johan Hedberg 提交于
      To pave the way for future fixed channels to be added easily we should
      track both the local and remote mask on a per-L2CAP connection (struct
      l2cap_conn) basis. So far the code has used a global variable in a racy
      way which anyway needs fixing.
      
      This patch renames the existing conn->fixed_chan_mask that tracked
      the remote mask to conn->remote_fixed_chan and adds a new variable
      conn->local_fixed_chan to track the local mask. Since the HS support
      info is now available in the local mask we can remove the
      conn->hs_enabled variable.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      0bd49fc7
  3. 27 11月, 2014 1 次提交
  4. 19 11月, 2014 3 次提交
  5. 18 11月, 2014 3 次提交
    • J
      Bluetooth: Call drain_workqueue() before resetting state · 76727c02
      Johan Hedberg 提交于
      Doing things like hci_conn_hash_flush() while holding the hdev lock is
      risky since its synchronous pending work cancellation could cause the
      L2CAP layer to try to reacquire the hdev lock. Right now there doesn't
      seem to be any obvious places where this would for certain happen but
      it's already enough to cause lockdep to start warning against the hdev
      and the work struct locks being taken in the "wrong" order:
      
      [  +0.000373] mgmt-tester/1603 is trying to acquire lock:
      [  +0.000292]  ((&conn->pending_rx_work)){+.+.+.}, at: [<c104266d>] flush_work+0x0/0x181
      [  +0.000270]
      but task is already holding lock:
      [  +0.000000]  (&hdev->lock){+.+.+.}, at: [<c13b9a80>] hci_dev_do_close+0x166/0x359
      [  +0.000000]
      which lock already depends on the new lock.
      
      [  +0.000000]
      the existing dependency chain (in reverse order) is:
      [  +0.000000]
      -> #1 (&hdev->lock){+.+.+.}:
      [  +0.000000]        [<c105ea8f>] lock_acquire+0xe3/0x156
      [  +0.000000]        [<c140c663>] mutex_lock_nested+0x54/0x375
      [  +0.000000]        [<c13d644b>] l2cap_recv_frame+0x293/0x1a9c
      [  +0.000000]        [<c13d7ca4>] process_pending_rx+0x50/0x5e
      [  +0.000000]        [<c1041a3f>] process_one_work+0x21c/0x436
      [  +0.000000]        [<c1041e3d>] worker_thread+0x1be/0x251
      [  +0.000000]        [<c1045a22>] kthread+0x94/0x99
      [  +0.000000]        [<c140f801>] ret_from_kernel_thread+0x21/0x30
      [  +0.000000]
      -> #0 ((&conn->pending_rx_work)){+.+.+.}:
      [  +0.000000]        [<c105e158>] __lock_acquire+0xa07/0xc89
      [  +0.000000]        [<c105ea8f>] lock_acquire+0xe3/0x156
      [  +0.000000]        [<c1042696>] flush_work+0x29/0x181
      [  +0.000000]        [<c1042864>] __cancel_work_timer+0x76/0x8f
      [  +0.000000]        [<c104288c>] cancel_work_sync+0xf/0x11
      [  +0.000000]        [<c13d4c18>] l2cap_conn_del+0x72/0x183
      [  +0.000000]        [<c13d8953>] l2cap_disconn_cfm+0x49/0x55
      [  +0.000000]        [<c13be37a>] hci_conn_hash_flush+0x7a/0xc3
      [  +0.000000]        [<c13b9af6>] hci_dev_do_close+0x1dc/0x359
      [  +0.012038]        [<c13bbe38>] hci_unregister_dev+0x6e/0x1a3
      [  +0.000000]        [<c12d33c1>] vhci_release+0x28/0x47
      [  +0.000000]        [<c10dd6a9>] __fput+0xd6/0x154
      [  +0.000000]        [<c10dd757>] ____fput+0xd/0xf
      [  +0.000000]        [<c1044bb2>] task_work_run+0x6b/0x8d
      [  +0.000000]        [<c1001bd2>] do_notify_resume+0x3c/0x3f
      [  +0.000000]        [<c140fa70>] work_notifysig+0x29/0x31
      [  +0.000000]
      other info that might help us debug this:
      
      [  +0.000000]  Possible unsafe locking scenario:
      
      [  +0.000000]        CPU0                    CPU1
      [  +0.000000]        ----                    ----
      [  +0.000000]   lock(&hdev->lock);
      [  +0.000000]                                lock((&conn->pending_rx_work));
      [  +0.000000]                                lock(&hdev->lock);
      [  +0.000000]   lock((&conn->pending_rx_work));
      [  +0.000000]
       *** DEADLOCK ***
      
      Fully fixing this would require some quite heavy refactoring to change
      how the hdev lock and hci_conn instances are handled together. A simpler
      solution for now which this patch takes is to try ensure that the hdev
      workqueue is empty before proceeding with the various cleanup calls,
      including hci_conn_hash_flush().
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      76727c02
    • J
      Bluetooth: Use shorter "rand" name for "randomizer" · 38da1703
      Johan Hedberg 提交于
      The common short form of "randomizer" is "rand" in many places
      (including the Bluetooth specification). The shorter version also makes
      for easier to read code with less forced line breaks. This patch renames
      all occurences of "randomizer" to "rand" in the Bluetooth subsystem
      code.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      38da1703
    • J
      Bluetooth: Fix BR/EDR-only address checks for remote OOB data · c19a495c
      Johan Hedberg 提交于
      For now the mgmt commands dealing with remote OOB data are strictly
      BR/EDR-only. This patch fixes missing checks for the passed address type
      so that any non-BR/EDR value triggers the appropriate error response.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      c19a495c
  6. 15 11月, 2014 9 次提交
  7. 13 11月, 2014 4 次提交
  8. 12 11月, 2014 2 次提交
    • J
      Bluetooth: Remove unnecessary hci_dev_lock/unlock in smp.c · a930430b
      Johan Hedberg 提交于
      The mgmt_user_passkey_request and related functions do not do anything
      else except read access to hdev->id. This member never changes after the
      hdev creation so there is no need to acquire a lock to read it.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      a930430b
    • J
      Bluetooth: Fix l2cap_sock_teardown_cb lockdep warning · f0356704
      Johan Hedberg 提交于
      Any code calling bt_accept_dequeue() to get a new child socket from a
      server socket should use lock_sock_nested to avoid lockdep warnings due
      to the parent and child sockets being locked at the same time. The
      l2cap_sock_accept() function is already doing this correctly but a
      second place calling bt_accept_dequeue() is the code path from
      l2cap_sock_teardown_cb() that calls l2cap_sock_cleanup_listen().
      
      This patch fixes the proper nested locking annotation and thereby avoids
      the following style of lockdep warning.
      
      [  +0.000224] [ INFO: possible recursive locking detected ]
      [  +0.000222] 3.17.0+ #1153 Not tainted
      [  +0.000130] ---------------------------------------------
      [  +0.000227] l2cap-tester/562 is trying to acquire lock:
      [  +0.000210]  (sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP){+.+...}, at: [<c1393f47>] bt_accept_dequeue+0x68/0x11b
      [  +0.000467]
      but task is already holding lock:
      [  +0.000186]  (sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP){+.+...}, at: [<c13b949a>] lock_sock+0xa/0xc
      [  +0.000421]
      other info that might help us debug this:
      [  +0.000199]  Possible unsafe locking scenario:
      
      [  +0.000117]        CPU0
      [  +0.000000]        ----
      [  +0.000000]   lock(sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP);
      [  +0.000000]   lock(sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP);
      [  +0.000000]
       *** DEADLOCK ***
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      f0356704
  9. 11 11月, 2014 3 次提交
    • J
      Bluetooth: 6lowpan: Remove unnecessary RCU callback · 4e790226
      Johan Hedberg 提交于
      When kfree() is all that's needed to free an object protected by RCU
      there's a kfree_rcu() convenience function that can be used. This patch
      updates the 6lowpan code to use this, thereby eliminating the need for
      the separate peer_free() function.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      4e790226
    • J
      Bluetooth: Fix mgmt connected notification · 60cb49d2
      Johan Hedberg 提交于
      This patch fixes a regression that was introduced by commit
      cb77c3ec. In addition to BT_CONFIG,
      BT_CONNECTED is also a state in which we may get a remote name and need
      to indicate over mgmt the connection status. This scenario is
      particularly likely to happen for incoming connections that do not need
      authentication since there the hci_conn state will reach BT_CONNECTED
      before the remote name is received.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      60cb49d2
    • J
      Bluetooth: Fix sparse warning in amp.c · 252670c4
      Johan Hedberg 提交于
      This fixes the following sparse warning:
      
      net/bluetooth/amp.c:152:53: warning: Variable length array is used.
      
      The warning itself is probably harmless since this kind of usage of
      shash_desc is present also in other places in the kernel (there's even a
      convenience macro SHASH_DESC_ON_STACK available for defining such stack
      variables). However, dynamically allocated versions are also used in
      several places of the kernel (e.g. kernel/kexec.c and lib/digsig.c)
      which have the benefit of not exhibiting the sparse warning.
      
      Since there are no more sparse warnings in the Bluetooth subsystem after
      fixing this one it is now easier to spot whenever new ones might get
      introduced by future patches.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      252670c4
  10. 09 11月, 2014 1 次提交
  11. 07 11月, 2014 3 次提交
    • J
      Bluetooth: Send mgmt_connected only if state is BT_CONFIG · cb77c3ec
      Jaganath Kanakkassery 提交于
      If a remote name request is initiated while acl connection is going on,
      and if it fails then mgmt_connected will be sent. Evetually after acl
      connection, authentication will not be initiated and userspace will
      never get pairing reply.
      
      < HCI Command: Create Connection (0x01|0x0005) plen 13
          bdaddr AA:BB:CC:DD:EE:FF ptype 0xcc18 rswitch 0x01 clkoffset 0x2306 (valid)
          Packet type: DM1 DM3 DM5 DH1 DH3 DH5
      > HCI Event: Command Status (0x0f) plen 4
          Create Connection (0x01|0x0005) status 0x00 ncmd 1
      > HCI Event: Inquiry Complete (0x01) plen 1
          status 0x00
      < HCI Command: Remote Name Request (0x01|0x0019) plen 10
          bdaddr AA:BB:CC:DD:EE:FF mode 1 clkoffset 0x2306
      > HCI Event: Command Status (0x0f) plen 4
          Remote Name Request (0x01|0x0019) status 0x0c ncmd 1
          Error: Command Disallowed
      > HCI Event: Connect Complete (0x03) plen 11
          status 0x00 handle 50 bdaddr 00:0D:FD:47:53:B2 type ACL encrypt 0x00
      < HCI Command: Read Remote Supported Features (0x01|0x001b) plen 2
          handle 50
      > HCI Event: Command Status (0x0f) plen 4
          Read Remote Supported Features (0x01|0x001b) status 0x00 ncmd 1
      > HCI Event: Max Slots Change (0x1b) plen 3
          handle 50 slots 5
      > HCI Event: Read Remote Supported Features (0x0b) plen 11
          status 0x00 handle 50
          Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x59 0x83
      < HCI Command: Read Remote Extended Features (0x01|0x001c) plen 3
          handle 50 page 1
      > HCI Event: Command Status (0x0f) plen 4
          Read Remote Extended Features (0x01|0x001c) status 0x00 ncmd 1
      > HCI Event: Read Remote Extended Features (0x23) plen 13
          status 0x00 handle 50 page 1 max 1
          Features: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      
      This patch sends mgmt_connected in remote name command status only if
      conn->state is BT_CONFIG
      Signed-off-by: NJaganath Kanakkassery <jaganath.k@samsung.com>
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      cb77c3ec
    • M
      6lowpan: move skb_free from error paths in decompression · 56b2c3ee
      Martin Townsend 提交于
      Currently we ensure that the skb is freed on every error path in IPHC
      decompression which makes it easy to introduce skb leaks.  By centralising
      the skb_free into the receive function it makes future decompression routines
      easier to maintain.  It does come at the expense of ensuring that the skb
      passed into the decompression routine must not be copied.
      Signed-off-by: NMartin Townsend <mtownsend1973@gmail.com>
      Acked-by: NJukka Rissanen <jukka.rissanen@linux.intel.com>
      Acked-by: NAlexander Aring <alex.aring@gmail.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      56b2c3ee
    • K
      Bluetooth: Sort switch cases by opcode's numeric value · 9645c76c
      Kuba Pawlak 提交于
      Opcodes in switch/case in hci_cmd_status_evt are not sorted
      by value. This patch restores proper ordering.
      Signed-off-by: NKuba Pawlak <kubax.t.pawlak@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      9645c76c