• Mat Martineau's avatar
    Bluetooth: Fix a redundant and problematic incoming MTU check · 35c84d76
    Mat Martineau authored
    The L2CAP MTU for incoming data is verified differently depending on
    the L2CAP mode, so the check is best performed in a mode-specific
    context.  Checking the incoming MTU before HCI fragment reassembly is
    a layer violation and assumes all bytes after the standard L2CAP
    header are L2CAP data.
    
    This approach causes issues with unsegmented ERTM or streaming mode
    frames, where there are additional enhanced or extended headers before
    the data payload and possible FCS bytes after the data payload.  A
    valid frame could be as many as 10 bytes larger than the MTU.
    
    Removing this code is the best fix, because the MTU is checked later
    on for all L2CAP data frames (connectionless, basic, ERTM, and
    streaming).  This also gets rid of outdated locking (socket instead of
    l2cap_chan) and an extra lookup of the channel ID.
    Signed-off-by: default avatarMat Martineau <mathewm@codeaurora.org>
    Reviewed-by: default avatarUlisses Furquim <ulisses@profusion.mobi>
    Signed-off-by: default avatarGustavo Padovan <gustavo@padovan.org>
    35c84d76
l2cap_core.c 117 KB