|
Oliver Neukum |
322fe2 |
From b86b0b150fed840c376145383ef5105116c81b0c Mon Sep 17 00:00:00 2001
|
|
Oliver Neukum |
322fe2 |
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
|
Oliver Neukum |
322fe2 |
Date: Fri, 27 Mar 2020 11:32:14 -0700
|
|
Oliver Neukum |
322fe2 |
Subject: [PATCH] Bluetooth: L2CAP: Fix handling LE modes by L2CAP_OPTIONS
|
|
Oliver Neukum |
322fe2 |
Git-commit: b86b0b150fed840c376145383ef5105116c81b0c
|
|
Oliver Neukum |
322fe2 |
References: git-fixes
|
|
Oliver Neukum |
322fe2 |
Patch-mainline: v5.8-rc1
|
|
Oliver Neukum |
322fe2 |
|
|
Oliver Neukum |
322fe2 |
L2CAP_OPTIONS shall only be used with BR/EDR modes.
|
|
Oliver Neukum |
322fe2 |
|
|
Oliver Neukum |
322fe2 |
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
|
Oliver Neukum |
322fe2 |
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|
Oliver Neukum |
322fe2 |
Signed-off-by: Oliver Neukum <oneukum@suse.com>
|
|
Oliver Neukum |
322fe2 |
---
|
|
Oliver Neukum |
322fe2 |
net/bluetooth/l2cap_sock.c | 25 +++++++++++++++++++++----
|
|
Oliver Neukum |
322fe2 |
1 file changed, 21 insertions(+), 4 deletions(-)
|
|
Oliver Neukum |
322fe2 |
|
|
Oliver Neukum |
322fe2 |
--- a/net/bluetooth/l2cap_sock.c
|
|
Oliver Neukum |
322fe2 |
+++ b/net/bluetooth/l2cap_sock.c
|
|
Oliver Neukum |
322fe2 |
@@ -418,6 +418,20 @@ static int l2cap_sock_getsockopt_old(str
|
|
Oliver Neukum |
322fe2 |
break;
|
|
Oliver Neukum |
322fe2 |
}
|
|
Oliver Neukum |
322fe2 |
|
|
Oliver Neukum |
322fe2 |
+ /* Only BR/EDR modes are supported here */
|
|
Oliver Neukum |
322fe2 |
+ switch (chan->mode) {
|
|
Oliver Neukum |
322fe2 |
+ case L2CAP_MODE_BASIC:
|
|
Oliver Neukum |
322fe2 |
+ case L2CAP_MODE_ERTM:
|
|
Oliver Neukum |
322fe2 |
+ case L2CAP_MODE_STREAMING:
|
|
Oliver Neukum |
322fe2 |
+ break;
|
|
Oliver Neukum |
322fe2 |
+ default:
|
|
Oliver Neukum |
322fe2 |
+ err = -EINVAL;
|
|
Oliver Neukum |
322fe2 |
+ break;
|
|
Oliver Neukum |
322fe2 |
+ }
|
|
Oliver Neukum |
322fe2 |
+
|
|
Oliver Neukum |
322fe2 |
+ if (err < 0)
|
|
Oliver Neukum |
322fe2 |
+ break;
|
|
Oliver Neukum |
322fe2 |
+
|
|
Oliver Neukum |
322fe2 |
memset(&opts, 0, sizeof(opts));
|
|
Oliver Neukum |
322fe2 |
opts.imtu = chan->imtu;
|
|
Oliver Neukum |
322fe2 |
opts.omtu = chan->omtu;
|
|
Oliver Neukum |
322fe2 |
@@ -677,10 +691,8 @@ static int l2cap_sock_setsockopt_old(str
|
|
Oliver Neukum |
322fe2 |
break;
|
|
Oliver Neukum |
322fe2 |
}
|
|
Oliver Neukum |
322fe2 |
|
|
Oliver Neukum |
322fe2 |
- chan->mode = opts.mode;
|
|
Oliver Neukum |
322fe2 |
- switch (chan->mode) {
|
|
Oliver Neukum |
322fe2 |
- case L2CAP_MODE_LE_FLOWCTL:
|
|
Oliver Neukum |
322fe2 |
- break;
|
|
Oliver Neukum |
322fe2 |
+ /* Only BR/EDR modes are supported here */
|
|
Oliver Neukum |
322fe2 |
+ switch (opts.mode) {
|
|
Oliver Neukum |
322fe2 |
case L2CAP_MODE_BASIC:
|
|
Oliver Neukum |
322fe2 |
clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
|
|
Oliver Neukum |
322fe2 |
break;
|
|
Oliver Neukum |
322fe2 |
@@ -694,6 +706,11 @@ static int l2cap_sock_setsockopt_old(str
|
|
Oliver Neukum |
322fe2 |
break;
|
|
Oliver Neukum |
322fe2 |
}
|
|
Oliver Neukum |
322fe2 |
|
|
Oliver Neukum |
322fe2 |
+ if (err < 0)
|
|
Oliver Neukum |
322fe2 |
+ break;
|
|
Oliver Neukum |
322fe2 |
+
|
|
Oliver Neukum |
322fe2 |
+ chan->mode = opts.mode;
|
|
Oliver Neukum |
322fe2 |
+
|
|
Oliver Neukum |
322fe2 |
chan->imtu = opts.imtu;
|
|
Oliver Neukum |
322fe2 |
chan->omtu = opts.omtu;
|
|
Oliver Neukum |
322fe2 |
chan->fcs = opts.fcs;
|