• Johan Hedberg's avatar
    Bluetooth: Fix l2cap_chan leak in SMP · 7883746b
    Johan Hedberg authored
    The L2CAP core expects channel implementations to manage the reference
    returned by the new_connection callback. With sockets this is already
    handled with each channel being tied to the corresponding socket. With
    SMP however there's no context to tie the pointer to in the
    smp_new_conn_cb function. The function can also not just drop the
    reference since it's the only one at that point.
    
    For fixed channels (like SMP) the code path inside the L2CAP core from
    new_connection() to ready() is short and straight-forwards. The
    crucial difference is that in ready() the implementation has access to
    the l2cap_conn that SMP needs associate its l2cap_chan. Instead of
    taking a new reference in smp_ready_cb() we can simply assume to
    already own the reference created in smp_new_conn_cb(), i.e. there is
    no need to call l2cap_chan_hold().
    Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    Cc: stable@vger.kernel.org # 3.19+
    7883746b
smp.c 91.9 KB