Bluetooth: Fix LE SMP channel source address and source address type
The source address and source address type of the LE SMP channel can either be the public address of the controller or the static random address configured by the host. Right now the public address is used for the LE SMP channel and obviously that is not correct if the controller operates with the configured static random address. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
		
				
					committed by
					
						 Johan Hedberg
						Johan Hedberg
					
				
			
			
				
	
			
			
			
						parent
						
							111e4bccd1
						
					
				
				
					commit
					157029ba30
				
			| @@ -2950,11 +2950,30 @@ create_chan: | ||||
|  | ||||
| 	l2cap_chan_set_defaults(chan); | ||||
|  | ||||
| 	bacpy(&chan->src, &hdev->bdaddr); | ||||
| 	if (cid == L2CAP_CID_SMP) | ||||
| 		chan->src_type = BDADDR_LE_PUBLIC; | ||||
| 	else | ||||
| 	if (cid == L2CAP_CID_SMP) { | ||||
| 		/* If usage of static address is forced or if the devices | ||||
| 		 * does not have a public address, then listen on the static | ||||
| 		 * address. | ||||
| 		 * | ||||
| 		 * In case BR/EDR has been disabled on a dual-mode controller | ||||
| 		 * and a static address has been configued, then listen on | ||||
| 		 * the static address instead. | ||||
| 		 */ | ||||
| 		if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) || | ||||
| 		    !bacmp(&hdev->bdaddr, BDADDR_ANY) || | ||||
| 		    (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) && | ||||
| 		     bacmp(&hdev->static_addr, BDADDR_ANY))) { | ||||
| 			bacpy(&chan->src, &hdev->static_addr); | ||||
| 			chan->src_type = BDADDR_LE_RANDOM; | ||||
| 		} else { | ||||
| 			bacpy(&chan->src, &hdev->bdaddr); | ||||
| 			chan->src_type = BDADDR_LE_PUBLIC; | ||||
| 		} | ||||
| 	} else { | ||||
| 		bacpy(&chan->src, &hdev->bdaddr); | ||||
| 		chan->src_type = BDADDR_BREDR; | ||||
| 	} | ||||
|  | ||||
| 	chan->state = BT_LISTEN; | ||||
| 	chan->mode = L2CAP_MODE_BASIC; | ||||
| 	chan->imtu = L2CAP_DEFAULT_MTU; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user