[PATCH v1] Bluetooth: L2CAP: Fix missing options not using most recent value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>

According to the core specification the most recent value, not its
default, must be used in case it is missing on L2CAP_CONFIGURATION_REQ:

 'Any missing configuration parameters are assumed to have their most
 recently explicitly or implicitly accepted values.'

Fixes: c1360a1cf351 ("Bluetooth: use bit operation on conf_state")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
---
 net/bluetooth/l2cap_core.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 7b4adab353cf..7719f263f5c4 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -3385,6 +3385,20 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data
 
 	BT_DBG("chan %p", chan);
 
+	/* 4.4. L2CAP_CONFIGURATION_REQ (code 0x04):
+	 * ...
+	 * Any missing configuration parameters are assumed to have their most
+	 * recently explicitly or implicitly accepted values.
+	 */
+
+	/* If MTU has been previously set, use it instead of default. */
+	if (test_bit(CONF_MTU_DONE, &chan->conf_state))
+		mtu = chan->omtu;
+
+	/* If Mode has been previously set, use it instead of default. */
+	if (test_bit(CONF_MODE_DONE, &chan->conf_state))
+		rfc.mode = chan->mode;
+
 	while (len >= L2CAP_CONF_OPT_SIZE) {
 		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
 		if (len < 0)
-- 
2.48.1





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux