12 Apr, 2014

1 commit

  • Several spots in the kernel perform a sequence like:

    skb_queue_tail(&sk->s_receive_queue, skb);
    sk->sk_data_ready(sk, skb->len);

    But at the moment we place the SKB onto the socket receive queue it
    can be consumed and freed up. So this skb->len access is potentially
    to freed up memory.

    Furthermore, the skb->len can be modified by the consumer so it is
    possible that the value isn't accurate.

    And finally, no actual implementation of this callback actually uses
    the length argument. And since nobody actually cared about it's
    value, lots of call sites pass arbitrary values in such as '0' and
    even '1'.

    So just remove the length argument from the callback, that way there
    is no confusion whatsoever and all of these use-after-free cases get
    fixed as a side effect.

    Based upon a patch by Eric Dumazet and his suggestion to audit this
    issue tree-wide.

    Signed-off-by: David S. Miller

    David S. Miller
     

03 Apr, 2014

2 commits

  • Pull networking updates from David Miller:
    "Here is my initial pull request for the networking subsystem during
    this merge window:

    1) Support for ESN in AH (RFC 4302) from Fan Du.

    2) Add full kernel doc for ethtool command structures, from Ben
    Hutchings.

    3) Add BCM7xxx PHY driver, from Florian Fainelli.

    4) Export computed TCP rate information in netlink socket dumps, from
    Eric Dumazet.

    5) Allow IPSEC SA to be dumped partially using a filter, from Nicolas
    Dichtel.

    6) Convert many drivers to pci_enable_msix_range(), from Alexander
    Gordeev.

    7) Record SKB timestamps more efficiently, from Eric Dumazet.

    8) Switch to microsecond resolution for TCP round trip times, also
    from Eric Dumazet.

    9) Clean up and fix 6lowpan fragmentation handling by making use of
    the existing inet_frag api for it's implementation.

    10) Add TX grant mapping to xen-netback driver, from Zoltan Kiss.

    11) Auto size SKB lengths when composing netlink messages based upon
    past message sizes used, from Eric Dumazet.

    12) qdisc dumps can take a long time, add a cond_resched(), From Eric
    Dumazet.

    13) Sanitize netpoll core and drivers wrt. SKB handling semantics.
    Get rid of never-used-in-tree netpoll RX handling. From Eric W
    Biederman.

    14) Support inter-address-family and namespace changing in VTI tunnel
    driver(s). From Steffen Klassert.

    15) Add Altera TSE driver, from Vince Bridgers.

    16) Optimizing csum_replace2() so that it doesn't adjust the checksum
    by checksumming the entire header, from Eric Dumazet.

    17) Expand BPF internal implementation for faster interpreting, more
    direct translations into JIT'd code, and much cleaner uses of BPF
    filtering in non-socket ocntexts. From Daniel Borkmann and Alexei
    Starovoitov"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1976 commits)
    netpoll: Use skb_irq_freeable to make zap_completion_queue safe.
    net: Add a test to see if a skb is freeable in irq context
    qlcnic: Fix build failure due to undefined reference to `vxlan_get_rx_port'
    net: ptp: move PTP classifier in its own file
    net: sxgbe: make "core_ops" static
    net: sxgbe: fix logical vs bitwise operation
    net: sxgbe: sxgbe_mdio_register() frees the bus
    Call efx_set_channels() before efx->type->dimension_resources()
    xen-netback: disable rogue vif in kthread context
    net/mlx4: Set proper build dependancy with vxlan
    be2net: fix build dependency on VxLAN
    mac802154: make csma/cca parameters per-wpan
    mac802154: allow only one WPAN to be up at any given time
    net: filter: minor: fix kdoc in __sk_run_filter
    netlink: don't compare the nul-termination in nla_strcmp
    can: c_can: Avoid led toggling for every packet.
    can: c_can: Simplify TX interrupt cleanup
    can: c_can: Store dlc private
    can: c_can: Reduce register access
    can: c_can: Make the code readable
    ...

    Linus Torvalds
     
  • Pull HID updates from Jiri Kosina:
    - substantial cleanup of the generic and transport layers, in the
    direction of an ultimate goal of making struct hid_device completely
    transport independent, by Benjamin Tissoires
    - cp2112 driver from David Barksdale
    - a lot of fixes and new hardware support (Dualshock 4) to hid-sony
    driver, by Frank Praznik
    - support for Win 8.1 multitouch protocol by Andrew Duggan
    - other smaller fixes / device ID additions

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (75 commits)
    HID: sony: fix force feedback mismerge
    HID: sony: Set the quriks flag for Bluetooth controllers
    HID: sony: Fix Sixaxis cable state detection
    HID: uhid: Add UHID_CREATE2 + UHID_INPUT2
    HID: hyperv: fix _raw_request() prototype
    HID: hyperv: Implement a stub raw_request() entry point
    HID: hid-sensor-hub: fix sleeping function called from invalid context
    HID: multitouch: add support for Win 8.1 multitouch touchpads
    HID: remove hid_output_raw_report transport implementations
    HID: sony: do not rely on hid_output_raw_report
    HID: cp2112: remove the last hid_output_raw_report() call
    HID: cp2112: remove various hid_out_raw_report calls
    HID: multitouch: add support of other generic collections in hid-mt
    HID: multitouch: remove pen special handling
    HID: multitouch: remove registered devices with default behavior
    HID: hidp: Add a comment that some devices depend on the current behavior of uniq
    HID: sony: Prevent duplicate controller connections.
    HID: sony: Perform a boundry check on the sixaxis battery level index.
    HID: sony: Fix work queue issues
    HID: sony: Fix multi-line comment styling
    ...

    Linus Torvalds
     

02 Apr, 2014

2 commits


01 Apr, 2014

1 commit


27 Mar, 2014

1 commit

  • We should let user space request the peer address also in the pending
    connect states, i.e. BT_CONNECT and BT_CONNECT2. There is existing user
    space code that tries to do this and will fail without extending the set
    of allowed states for the peer address information.

    This patch adds the two states to the allowed ones in the L2CAP and
    RFCOMM sock_getname functions, thereby preventing ENOTCONN from being
    returned.

    Reported-by: Andrzej Kaczmarek
    Signed-off-by: Johan Hedberg
    Tested-by: Andrzej Kaczmarek
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     

24 Mar, 2014

8 commits

  • The smp variable in smp_conn_security is not used anywhere before the
    smp = smp_chan_create() call in the smp_conn_security function so it
    makes no sense to assign any other value to it before that.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • The smp pointer might not be initialized for jumps to the "done" label
    in the smp_conn_security function. Furthermore doing the set_bit after
    done might "overwrite" a previous value of the flag in case pairing was
    already in progress. This patch moves the call to set_bit before the
    label so that it is only done for a newly created smp context (as
    returned by smp_chan_create).

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • Due to several devices being unable to handle this procedure reliably
    (resulting in forced disconnections before pairing completes) it's
    better to remove it altogether.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • In the case that the just-works model would be triggered we only want to
    confirm remotely initiated pairings (i.e. those triggered by a Security
    Request or Pairing Request). This patch adds the necessary check to the
    tk_request function to fall back to the JUST_WORKS method in the case of
    a locally initiated pairing.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • For remotely initiated just-works pairings we want to show the user a
    confirmation dialog for the pairing. However, we can only know which
    side was the initiator by tracking which side sends the first Security
    Request or Pairing Request PDU. This patch adds a new SMP flag to
    indicate whether our side was the initiator for the pairing.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • In the case that a local pairing confirmation (JUST_CFM) has been
    selected as the method we need to use the user confirm request mgmt
    event for it with the confirm_hint set to 1 (to indicate confirmation
    without any specific passkey value). Without this (if passkey_notify was
    used) the pairing would never proceed. This patch adds the necessary
    call to mgmt_user_confirm_request in this scenario.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • It is possible that the HCI_LE_Start_Encryption command fails in an
    early stage and triggers a command status event with the failure code.
    In such a case we need to properly notify the hci_conn object and
    cleanly bring the connection down. This patch adds the missing command
    status handler for this HCI command.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • If a sudden disconnection happens the l2cap_conn pointer may already
    have been cleaned up by the time hci_conn_security gets called,
    resulting in the following oops if we don't have a proper NULL check:

    BUG: unable to handle kernel NULL pointer dereference at 000000c8
    IP: [] smp_conn_security+0x26/0x151
    *pde = 00000000
    Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
    CPU: 1 PID: 673 Comm: memcheck-x86-li Not tainted 3.14.0-rc2+ #437
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    task: f0ef0520 ti: f0d6a000 task.ti: f0d6a000
    EIP: 0060:[] EFLAGS: 00010246 CPU: 1
    EIP is at smp_conn_security+0x26/0x151
    EAX: f0ec1770 EBX: f0ec1770 ECX: 00000002 EDX: 00000002
    ESI: 00000002 EDI: 00000000 EBP: f0d6bdc0 ESP: f0d6bda0
    DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
    CR0: 80050033 CR2: 000000c8 CR3: 30f0f000 CR4: 00000690
    Stack:
    f4f55000 00000002 f0d6bdcc c1097a2b c1319f40 f0ec1770 00000002 f0d6bdd0
    f0d6bde8 c1312a82 f0d6bdfc c1312a82 c1319f84 00000008 f4d81c20 f0e5fd86
    f0ec1770 f0d6bdfc f0d6be28 c131be3b c131bdc1 f0d25270 c131be3b 00000008
    Call Trace:
    [] ? __kmalloc+0x118/0x128
    [] ? mgmt_pending_add+0x49/0x9b
    [] hci_conn_security+0x4a/0x1dd
    [] ? hci_conn_security+0x4a/0x1dd
    [] ? mgmt_pending_add+0x8d/0x9b
    [] pair_device+0x1e1/0x206
    [] ? pair_device+0x167/0x206
    [] ? pair_device+0x1e1/0x206
    [] mgmt_control+0x275/0x2d6

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     

22 Mar, 2014

2 commits


21 Mar, 2014

1 commit

  • We need to ensure that we do not send events to user space with the
    identity address if we have not yet notified user space of the IRK. The
    code was previously trying to handle this for the mgmt_pair_device
    response (which worked well enough) but this is not the only connection
    related event that might be sent to user space before pairing is
    successful: another important event is Device Disconnected.

    The issue can actually be solved more simply than the solution
    previously used for mgmt_pair_device. Since we do have the identity
    address tracked as part of the remote IRK struct we can just copy it
    over from there to the hci_conn struct once we've for real sent the mgmt
    event for the new IRK.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     

20 Mar, 2014

6 commits

  • The passkey_notify and user_confirm functions in mgmt.c were expecting
    different endianess for the passkey, leading to a big endian bug and
    sparse warning in recently added SMP code. This patch converts both
    functions to expect host endianess and do the conversion to little
    endian only when assigning to the mgmt event struct.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • In Secure Connections Only mode, it is required that Secure Connections
    is used for pairing and that the link key is encrypted with AES-CCM using
    a P-256 authenticated combination key. If this is not the case, then new
    connection shall be refused or existing connections shall be dropped.

    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     
  • It is possible that pairing fails after we've already received remote
    identity information. One example of such a situation is when
    re-encryption using the LTK fails. In this case the hci_conn object has
    already been updated with the identity address but user space does not
    yet know about it (since we didn't notify it of the new IRK yet).

    To ensure user space doesn't get a Pair Device command response with an
    unknown address always use the same address in the response as was used
    for the original command.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • When performing SMP pairing with MITM protection one side needs to
    enter the passkey while the other side displays to the user what needs
    to be entered. Nowhere in the SMP specification does it say that the
    displaying side needs to any kind of confirmation of the passkey, even
    though a code comment in smp.c implies this.

    This patch removes the misleading comment and converts the code to use
    the passkey notification mgmt event instead of the passkey confirmation
    mgmt event.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • In some cases the current 250ms delay is not enough for the remote to
    receive the keys, as can be witnessed by the following log:

    > ACL Data RX: Handle 64 flags 0x02 dlen 21 [hci1] 231.414217
    SMP: Signing Information (0x0a) len 16
    Signature key: 555bb66b7ab3abc9d5c287c97fe6eb29
    < ACL Data TX: Handle 64 flags 0x00 dlen 21 [hci1] 231.414414
    SMP: Encryption Information (0x06) len 16
    Long term key: 2a7cdc233c9a4b1f3ed31dd9843fea29
    < ACL Data TX: Handle 64 flags 0x00 dlen 15 [hci1] 231.414466
    SMP: Master Identification (0x07) len 10
    EDIV: 0xeccc
    Rand: 0x322e0ef50bd9308a
    < ACL Data TX: Handle 64 flags 0x00 dlen 21 [hci1] 231.414505
    SMP: Signing Information (0x0a) len 16
    Signature key: bbda1b2076e2325aa66fbcdd5388f745
    > HCI Event: Number of Completed Packets (0x13) plen 5 [hci1] 231.483130
    Num handles: 1
    Handle: 64
    Count: 2
    < HCI Command: LE Start Encryption (0x08|0x0019) plen 28 [hci1] 231.664211
    Handle: 64
    Random number: 0x5052ad2b75fed54b
    Encrypted diversifier: 0xb7c2
    Long term key: a336ede66711b49a84bde9b41426692e
    > HCI Event: Command Status (0x0f) plen 4 [hci1] 231.666937
    LE Start Encryption (0x08|0x0019) ncmd 1
    Status: Success (0x00)
    > HCI Event: Number of Completed Packets (0x13) plen 5 [hci1] 231.712646
    Num handles: 1
    Handle: 64
    Count: 1
    > HCI Event: Disconnect Complete (0x05) plen 4 [hci1] 232.562587
    Status: Success (0x00)
    Handle: 64
    Reason: Remote User Terminated Connection (0x13)

    As can be seen, the last key (Signing Information) is sent at 231.414505
    but the completed packets event for it comes only at 231.712646,
    i.e. roughly 298ms later.

    To have a better margin of error this patch increases the delay to
    500ms.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • This is a trivial coding style simplification by instead of having an
    extra early return to instead revert the if condition and do the single
    needed queue_work() call there.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     

19 Mar, 2014

3 commits

  • The pairing process initiated through mgmt sets the conn->auth_type
    value regardless of BR/EDR or LE pairing. This value will contain the
    MITM flag if the local IO capability allows it. When sending the SMP
    pairing request we should check the value and ensure that the MITM bit
    gets correctly set in the bonding flags.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • The SMP specification is written with the assumption that both key
    information, plaintextData and encryptedData follow the same little
    endian byte ordering as the rest of SMP.

    Since the kernel crypto routines expect big endian data the code has had
    to do various byte swapping tricks to make the behavior as expected,
    however the swapping has been scattered all around the place.

    This patch centralizes the byte order swapping into the smp_e function
    by making its public interface match what the other SMP functions expect
    as per specification. The benefit is vastly simplified calls to smp_e.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     
  • To make it possible to (correctly) pass data declared as const as the
    src parameter to the swap56 and swap128 functions declare this parameter
    also as const.

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann

    Johan Hedberg
     

15 Mar, 2014

1 commit


14 Mar, 2014

2 commits


13 Mar, 2014

2 commits

  • Commit 975508879 "Bluetooth: make bluetooth 6lowpan as an option"
    ensures that 6LOWPAN_IPHC is turned on when we have BT_6LOWPAN
    enabled in Kconfig, but it allows building the IPHC code as
    a loadable module even if the entire Bluetooth stack is built-in,
    and that causes a link error.

    We can solve that by moving the 'select' statement into CONFIG_BT,
    which is a "tristate" option to enforce that 6LOWPAN_IPHC can
    only be a module if BT also is a module.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Marcel Holtmann

    Arnd Bergmann
     
  • The use of __constant_ has been unnecessary for quite awhile now.

    Make these uses consistent with the rest of the kernel.

    Signed-off-by: Joe Perches
    Signed-off-by: Marcel Holtmann

    Joe Perches
     

12 Mar, 2014

1 commit

  • To avoid flooding the host with useless advertising reports during
    background scan, we enable the duplicates filter from controller.

    However, enabling duplicates filter requires a small change in
    background scan routine in order to fix the following scenario:
    1) Background scan is running.
    2) A device disconnects and starts advertising.
    3) Before host gets the disconnect event, the advertising is reported
    to host. Since there is no pending LE connection at that time,
    nothing happens.
    4) Host gets the disconnection event and adds a pending connection.
    5) No advertising is reported (since controller is filtering) and the
    connection is never established.

    So, to address this scenario, we should always restart background scan
    to unsure we don't miss any advertising report (due to duplicates
    filter).

    Signed-off-by: Andre Guedes
    Signed-off-by: Marcel Holtmann

    Andre Guedes
     

11 Mar, 2014

2 commits

  • Add additional error case to attempt alternative configuration for SCO. Error
    occurs with Intel BT controller where fallback is not attempted as the error
    0x20 Unsupported LMP Parameter value is not included in the list of errors
    where a retry should be attempted.
    The problem also affects PTS test case TC_HF_ACS_BV_05_I.

    See the HCI log below for details:
    < HCI Command: Setup Synchronous Connection (0x01|0x0028) plen 17
    handle 256 voice setting 0x0060 ptype 0x0380
    > HCI Event: Command Status (0x0f) plen 4
    Setup Synchronous Connection (0x01|0x0028) status 0x00 ncmd 1
    > HCI Event: Max Slots Change (0x1b) plen 3
    handle 256 slots 1
    > HCI Event: Synchronous Connect Complete (0x2c) plen 17
    status 0x20 handle 0 bdaddr 00:80:98:09:0B:19 type eSCO
    Error: Unsupported LMP Parameter Value
    < HCI Command: Setup Synchronous Connection (0x01|0x0028) plen 17
    handle 256 voice setting 0x0060 ptype 0x0380
    > HCI Event: Command Status (0x0f) plen 4
    Setup Synchronous Connection (0x01|0x0028) status 0x00 ncmd 1
    > HCI Event: Max Slots Change (0x1b) plen 3
    handle 256 slots 5
    > HCI Event: Synchronous Connect Complete (0x2c) plen 17
    status 0x20 handle 0 bdaddr 00:80:98:09:0B:19 type eSCO
    Error: Unsupported LMP Parameter Value
    < HCI Command: Setup Synchronous Connection (0x01|0x0028) plen 17
    handle 256 voice setting 0x0060 ptype 0x03c8
    > HCI Event: Command Status (0x0f) plen 4
    Setup Synchronous Connection (0x01|0x0028) status 0x00 ncmd 1
    > HCI Event: Max Slots Change (0x1b) plen 3
    handle 256 slots 1
    > HCI Event: Synchronous Connect Complete (0x2c) plen 17
    status 0x00 handle 257 bdaddr 00:80:98:09:0B:19 type eSCO
    Air mode: CVSD

    See btmon log for further details:
    > HCI Event (0x0f) plen 4 [hci0] 44.888063
    Setup Synchronous Connection (0x01|0x0028) ncmd 1
    Status: Success (0x00)
    > HCI Event (0x1b) plen 3 [hci0] 44.893064
    Handle: 256
    Max slots: 1
    > HCI Event (0x2c) plen 17 [hci0] 44.942080
    Status: Unsupported LMP Parameter Value (0x20)
    Handle: 0
    Address: 00:1B:DC:06:04:B0 (OUI 00-1B-DC)
    Link type: eSCO (0x02)
    Transmission interval: 0x00
    Retransmission window: 0x01
    RX packet length: 0
    TX packet length: 0
    Air mode: CVSD (0x02)
    > HCI Event (0x1b) plen 3 [hci0] 44.948054
    Handle: 256
    Max slots: 5

    Signed-off-by: Andrew Earl
    Signed-off-by: Marcel Holtmann

    Andrew Earl
     
  • Currently you can have bluetooth 6lowpan without ipv6 enabled. This
    doesn't make any sense. With this patch you can disable/enable bluetooth
    6lowpan support at compile time.

    The current bluetooth 6lowpan implementation doesn't check the return
    value of 6lowpan function. Nevertheless I added -EOPNOTSUPP as return value
    if 6lowpan bluetooth is disabled.

    Signed-off-by: Alexander Aring
    Signed-off-by: Marcel Holtmann

    Alexander Aring
     

10 Mar, 2014

2 commits

  • In case the pairable option has been disabled, the pairing procedure
    does not create keys for bonding. This means that these generated keys
    should not be stored persistently.

    For LTK and CSRK this is important to tell userspace to not store these
    new keys. They will be available for the lifetime of the device, but
    after the next power cycle they should not be used anymore.

    Inform userspace to actually store the keys persistently only if both
    sides request bonding.

    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     
  • The connection signature resolving key (CSRK) is used for attribute
    protocol signed write procedures. This change generates a new local
    key during pairing and requests the peer key as well.

    Newly generated key and received key will be provided to userspace
    using the New Signature Resolving Key management event.

    The Master CSRK can be used for verification of remote signed write
    PDUs and the Slave CSRK can be used for sending signed write PDUs
    to the remote device.

    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     

08 Mar, 2014

2 commits


07 Mar, 2014

1 commit