diff options
Diffstat (limited to 'net/bluetooth/l2cap_core.c')
| -rw-r--r-- | net/bluetooth/l2cap_core.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 26dc3f6a834..9bc22e4c4c6 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -2372,7 +2372,7 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, voi  	void *ptr = req->data;  	int type, olen;  	unsigned long val; -	struct l2cap_conf_rfc rfc; +	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };  	struct l2cap_conf_efs efs;  	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data); @@ -2522,6 +2522,16 @@ static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)  		}  	} +	/* Use sane default values in case a misbehaving remote device +	 * did not send an RFC option. +	 */ +	rfc.mode = chan->mode; +	rfc.retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO); +	rfc.monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO); +	rfc.max_pdu_size = cpu_to_le16(chan->imtu); + +	BT_ERR("Expected RFC option was not found, using defaults"); +  done:  	switch (rfc.mode) {  	case L2CAP_MODE_ERTM:  |