1. 02 10月, 2014 2 次提交
    • J
      Bluetooth: 6lowpan: Memory leak as the skb is not freed · fc12518a
      Jukka Rissanen 提交于
      The earlier multicast commit 36b3dd25 ("Bluetooth: 6lowpan:
      Ensure header compression does not corrupt IPv6 header") lost one
      skb free which then caused memory leak.
      Signed-off-by: NJukka Rissanen <jukka.rissanen@linux.intel.com>
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      fc12518a
    • J
      Bluetooth: Fix lockdep warning with l2cap_chan_connect · 02e246ae
      Johan Hedberg 提交于
      The L2CAP connection's channel list lock (conn->chan_lock) must never be
      taken while already holding a channel lock (chan->lock) in order to
      avoid lock-inversion and lockdep warnings. So far the l2cap_chan_connect
      function has acquired the chan->lock early in the function and then
      later called l2cap_chan_add(conn, chan) which will try to take the
      conn->chan_lock. This violates the correct order of taking the locks and
      may lead to the following type of lockdep warnings:
      
      -> #1 (&conn->chan_lock){+.+...}:
             [<c109324d>] lock_acquire+0x9d/0x140
             [<c188459c>] mutex_lock_nested+0x6c/0x420
             [<d0aab48e>] l2cap_chan_add+0x1e/0x40 [bluetooth]
             [<d0aac618>] l2cap_chan_connect+0x348/0x8f0 [bluetooth]
             [<d0cc9a91>] lowpan_control_write+0x221/0x2d0 [bluetooth_6lowpan]
      -> #0 (&chan->lock){+.+.+.}:
             [<c10928d8>] __lock_acquire+0x1a18/0x1d20
             [<c109324d>] lock_acquire+0x9d/0x140
             [<c188459c>] mutex_lock_nested+0x6c/0x420
             [<d0ab05fd>] l2cap_connect_cfm+0x1dd/0x3f0 [bluetooth]
             [<d0a909c4>] hci_le_meta_evt+0x11a4/0x1260 [bluetooth]
             [<d0a910eb>] hci_event_packet+0x3ab/0x3120 [bluetooth]
             [<d0a7cb08>] hci_rx_work+0x208/0x4a0 [bluetooth]
      
             CPU0                    CPU1
             ----                    ----
        lock(&conn->chan_lock);
                                     lock(&chan->lock);
                                     lock(&conn->chan_lock);
        lock(&chan->lock);
      
      Before calling l2cap_chan_add() the channel is not part of the
      conn->chan_l list, and can therefore only be accessed by the L2CAP user
      (such as l2cap_sock.c). We can therefore assume that it is the
      responsibility of the user to handle mutual exclusion until this point
      (which we can see is already true in l2cap_sock.c by it in many places
      touching chan members without holding chan->lock).
      
      Since the hci_conn and by exctension l2cap_conn creation in the
      l2cap_chan_connect() function depend on chan details we cannot simply
      add a mutex_lock(&conn->chan_lock) in the beginning of the function
      (since the conn object doesn't yet exist there). What we can do however
      is move the chan->lock taking later into the function where we already
      have the conn object and can that way take conn->chan_lock first.
      
      This patch implements the above strategy and does some other necessary
      changes such as using __l2cap_chan_add() which assumes conn->chan_lock
      is held, as well as adding a second needed label so the unlocking
      happens as it should.
      Reported-by: NJukka Rissanen <jukka.rissanen@linux.intel.com>
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Tested-by: NJukka Rissanen <jukka.rissanen@linux.intel.com>
      Acked-by: NJukka Rissanen <jukka.rissanen@linux.intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      02e246ae
  2. 29 9月, 2014 3 次提交
  3. 25 9月, 2014 2 次提交
  4. 24 9月, 2014 3 次提交
    • S
      ieee802154: 6lowpan: ensure header compression does not corrupt ipv6 header · f19f4f95
      Simon Vincent 提交于
      The 6lowpan ipv6 header compression was causing problems for other interfaces
      that expected a ipv6 header to still be in place, as we were replacing the
      ipv6 header with a compressed version. This happened if you sent a packet to a
      multicast address as the packet would be output on 802.15.4, ethernet, and also
      be sent to the loopback interface. The skb data was shared between these
      interfaces so all interfaces ended up with a compressed ipv6 header.
      
      The solution is to ensure that before we do any header compression we are not
      sharing the skb or skb data with any other interface. If we are then we must
      take a copy of the skb and skb data before modifying the ipv6 header.
      The only place we can copy the skb is inside the xmit function so we don't
      leave dangling references to skb.
      
      This patch moves all the header compression to inside the xmit function. Very
      little code has been changed it has mostly been moved from lowpan_header_create
      to lowpan_xmit. At the top of the xmit function we now check if the skb is
      shared and if so copy it. In lowpan_header_create all we do now is store the
      source and destination addresses for use later when we compress the header.
      Signed-off-by: NSimon Vincent <simon.vincent@xsilon.com>
      Signed-off-by: NAlexander Aring <alex.aring@gmail.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      f19f4f95
    • J
      Bluetooth: Fix reason code used for rejecting SCO connections · d41c15cf
      Johan Hedberg 提交于
      The core specification defines valid values for the
      HCI_Reject_Synchronous_Connection_Request command to be 0x0D-0x0F. So
      far the code has been using HCI_ERROR_REMOTE_USER_TERM (0x13) which is
      not a valid value and is therefore being rejected by some controllers:
      
       > HCI Event: Connect Request (0x04) plen 10
      	bdaddr 40:6F:2A:6A:E5:E0 class 0x000000 type eSCO
       < HCI Command: Reject Synchronous Connection (0x01|0x002a) plen 7
      	bdaddr 40:6F:2A:6A:E5:E0 reason 0x13
      	Reason: Remote User Terminated Connection
       > HCI Event: Command Status (0x0f) plen 4
      	Reject Synchronous Connection (0x01|0x002a) status 0x12 ncmd 1
      	Error: Invalid HCI Command Parameters
      
      This patch introduces a new define for a value from the valid range
      (0x0d == Connection Rejected Due To Limited Resources) and uses it
      instead for rejecting incoming connections.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      d41c15cf
    • J
      Bluetooth: Convert bt_<level> logging functions to return void · 2b0bf6c8
      Joe Perches 提交于
      No caller or macro uses the return value so make all
      the functions return void.
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      2b0bf6c8
  5. 23 9月, 2014 1 次提交
  6. 18 9月, 2014 1 次提交
    • J
      Bluetooth: Fix setting correct security level when initiating SMP · 5eb596f5
      Johan Hedberg 提交于
      We can only determine the final security level when both pairing request
      and response have been exchanged. When initiating pairing the starting
      target security level is set to MEDIUM unless explicitly specified to be
      HIGH, so that we can still perform pairing even if the remote doesn't
      have MITM capabilities. However, once we've received the pairing
      response we should re-consult the remote and local IO capabilities and
      upgrade the target security level if necessary.
      
      Without this patch the resulting Long Term Key will occasionally be
      reported to be unauthenticated when it in reality is an authenticated
      one.
      Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      Cc: stable@vger.kernel.org
      5eb596f5
  7. 17 9月, 2014 1 次提交
  8. 15 9月, 2014 2 次提交
  9. 13 9月, 2014 1 次提交
  10. 11 9月, 2014 8 次提交
  11. 10 9月, 2014 1 次提交
  12. 09 9月, 2014 15 次提交