From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> The spec is clear that the final ATT MTU is calculate using the minimum of Client RX MTU and Server RX MTU but some peripherals seem to expect the Server to already calculate the final MTU and not respond with its own MTU. Link: https://lore.kernel.org/linux-bluetooth/CABBYNZL-fjTd8JdmRRM5Y26d41KwDxvvuaED+j2+yPT-RBpMtw@xxxxxxxxxxxxxx/T/#t --- src/shared/gatt-server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/gatt-server.c b/src/shared/gatt-server.c index 2adb4afbf..d326782bf 100644 --- a/src/shared/gatt-server.c +++ b/src/shared/gatt-server.c @@ -1499,7 +1499,7 @@ static void exchange_mtu_cb(struct bt_att_chan *chan, uint8_t opcode, final_mtu = MAX(MIN(client_rx_mtu, server->mtu), BT_ATT_DEFAULT_LE_MTU); /* Respond with the server MTU */ - put_le16(server->mtu, rsp_pdu); + put_le16(final_mtu, rsp_pdu); bt_att_chan_send_rsp(chan, BT_ATT_OP_MTU_RSP, rsp_pdu, 2); /* Set MTU to be the minimum */ -- 2.35.1