]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Bluetooth: L2CAP: accept zero as a special value for MTU auto-selection
authorFedor Pchelkin <pchelkin@ispras.ru>
Tue, 28 Jan 2025 21:08:14 +0000 (00:08 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Feb 2025 12:49:40 +0000 (13:49 +0100)
commit 5c61419e02033eaf01733d66e2fcd4044808f482 upstream.

One of the possible ways to enable the input MTU auto-selection for L2CAP
connections is supposed to be through passing a special "0" value for it
as a socket option. Commit [1] added one of those into avdtp. However, it
simply wouldn't work because the kernel still treats the specified value
as invalid and denies the setting attempt. Recorded BlueZ logs include the
following:

  bluetoothd[496]: profiles/audio/avdtp.c:l2cap_connect() setsockopt(L2CAP_OPTIONS): Invalid argument (22)

[1]: https://github.com/bluez/bluez/commit/ae5be371a9f53fed33d2b34748a95a5498fd4b77

Found by Linux Verification Center (linuxtesting.org).

Fixes: 4b6e228e297b ("Bluetooth: Auto tune if input MTU is set to 0")
Cc: stable@vger.kernel.org
Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/bluetooth/l2cap_sock.c

index bd3b85dee44f3f77bdc1e5cfa9959fe2bd9253dc..bdfc83eb7aefc8898390c02df3c6333b0d69db48 100644 (file)
@@ -728,12 +728,12 @@ static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
 {
        switch (chan->scid) {
        case L2CAP_CID_ATT:
-               if (mtu < L2CAP_LE_MIN_MTU)
+               if (mtu && mtu < L2CAP_LE_MIN_MTU)
                        return false;
                break;
 
        default:
-               if (mtu < L2CAP_DEFAULT_MIN_MTU)
+               if (mtu && mtu < L2CAP_DEFAULT_MIN_MTU)
                        return false;
        }