diff mbox series

[Bluez,v1] Bluetooth: L2CAP: handle l2cap config request during open state

Message ID 20200310180642.Bluez.v1.1.I50b301a0464eb68e3d62721bf59e11ed2617c415@changeid (mailing list archive)
State Changes Requested
Delegated to: Marcel Holtmann
Headers show
Series [Bluez,v1] Bluetooth: L2CAP: handle l2cap config request during open state | expand

Commit Message

Yun-hao Chung March 10, 2020, 10:08 a.m. UTC
According to Core Spec Version 5.2 | Vol 3, Part A 6.1.5,
the incoming L2CAP_ConfigReq should be handled during
OPEN state.

Signed-off-by: Howard Chung <howardchung@google.com>

---

 net/bluetooth/l2cap_core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Marcel Holtmann March 11, 2020, 2:50 p.m. UTC | #1
Hi Howard,

> According to Core Spec Version 5.2 | Vol 3, Part A 6.1.5,
> the incoming L2CAP_ConfigReq should be handled during
> OPEN state.
> 
> Signed-off-by: Howard Chung <howardchung@google.com>
> 
> ---
> 
> net/bluetooth/l2cap_core.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index 697c0f7f2c1a..5e6e35ab44dd 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -4300,7 +4300,8 @@ static inline int l2cap_config_req(struct l2cap_conn *conn,
> 		return 0;
> 	}
> 
> -	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
> +	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2 &&
> +	    chan->state != BT_CONNECTED) {
> 		cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
> 				       chan->dcid);
> 		goto unlock;

Any chance you can add a btmon trace excerpt for this to the commit message. It would be good to have the before and after here included.

Regards

Marcel
diff mbox series

Patch

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 697c0f7f2c1a..5e6e35ab44dd 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -4300,7 +4300,8 @@  static inline int l2cap_config_req(struct l2cap_conn *conn,
 		return 0;
 	}
 
-	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
+	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2 &&
+	    chan->state != BT_CONNECTED) {
 		cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
 				       chan->dcid);
 		goto unlock;