Skip to content

Commit 806a519

Browse files
committed
Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ
This removes the bogus check for max > hcon->le_conn_max_interval since the later is just the initial maximum conn interval not the maximum the stack could support which is really 3200=4000ms. In order to pass GAP/CONN/CPUP/BV-05-C one shall probably enter values of the following fields in IXIT that would cause hci_check_conn_params to fail: TSPX_conn_update_int_min TSPX_conn_update_int_max TSPX_conn_update_peripheral_latency TSPX_conn_update_supervision_timeout Link: bluez/bluez#847 Fixes: e4b0195 ("Bluetooth: Enforce validation on max value of connection interval") Signed-off-by: Luiz Augusto von Dentz <[email protected]>
1 parent 86fbd9f commit 806a519

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

include/net/bluetooth/hci_core.h

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2113,18 +2113,46 @@ static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
21132113
{
21142114
u16 max_latency;
21152115

2116-
if (min > max || min < 6 || max > 3200)
2116+
if (min > max) {
2117+
BT_WARN("min %d > max %d", min, max);
21172118
return -EINVAL;
2119+
}
2120+
2121+
if (min < 6) {
2122+
BT_WARN("min %d < 6", min);
2123+
return -EINVAL;
2124+
}
2125+
2126+
if (max > 3200) {
2127+
BT_WARN("max %d > 3200", max);
2128+
return -EINVAL;
2129+
}
2130+
2131+
if (to_multiplier < 10) {
2132+
BT_WARN("to_multiplier %d < 10", to_multiplier);
2133+
return -EINVAL;
2134+
}
21182135

2119-
if (to_multiplier < 10 || to_multiplier > 3200)
2136+
if (to_multiplier > 3200) {
2137+
BT_WARN("to_multiplier %d > 3200", to_multiplier);
21202138
return -EINVAL;
2139+
}
21212140

2122-
if (max >= to_multiplier * 8)
2141+
if (max >= to_multiplier * 8) {
2142+
BT_WARN("max %d >= to_multiplier %d * 8", max, to_multiplier);
21232143
return -EINVAL;
2144+
}
21242145

21252146
max_latency = (to_multiplier * 4 / max) - 1;
2126-
if (latency > 499 || latency > max_latency)
2147+
if (latency > 499) {
2148+
BT_WARN("latency %d > 499", latency);
21272149
return -EINVAL;
2150+
}
2151+
2152+
if (latency > max_latency) {
2153+
BT_WARN("latency %d > max_latency %d", latency, max_latency);
2154+
return -EINVAL;
2155+
}
21282156

21292157
return 0;
21302158
}

net/bluetooth/l2cap_core.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4647,13 +4647,7 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
46474647

46484648
memset(&rsp, 0, sizeof(rsp));
46494649

4650-
if (max > hcon->le_conn_max_interval) {
4651-
BT_DBG("requested connection interval exceeds current bounds.");
4652-
err = -EINVAL;
4653-
} else {
4654-
err = hci_check_conn_params(min, max, latency, to_multiplier);
4655-
}
4656-
4650+
err = hci_check_conn_params(min, max, latency, to_multiplier);
46574651
if (err)
46584652
rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
46594653
else

0 commit comments

Comments
 (0)