Re: [Bluez PATCH v1 1/2] input: authenticate when connecting to a bonded device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Archie,

On Wed, Jul 22, 2020 at 9:20 AM Archie Pusaka <apusaka@xxxxxxxxxx> wrote:
>
> From: Archie Pusaka <apusaka@xxxxxxxxxxxx>
>
> According to bluetooth HID1.1 spec, part 5.4.3.4.3:
> If the Bluetooth HID Host is bonded to a Bluetooth HID device:
> If encryption is not already enabled, the Bluetooth HID Host shall
> enable encryption with the Bluetooth HID device before sending an
> L2CAP Connect Request to open the HID L2CAP Control channel.
>
> When creating connection, this patch checks whether the target
> device is bonded, if yes then we use the medium security level
> instead of the low one to enable encryption.
>
> Reviewed-by: Alain Michaud <alainm@xxxxxxxxxxxx>
> ---
>
>  profiles/input/device.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/profiles/input/device.c b/profiles/input/device.c
> index 2dc2ecab2..9f89f4459 100644
> --- a/profiles/input/device.c
> +++ b/profiles/input/device.c
> @@ -112,6 +112,12 @@ void input_set_classic_bonded_only(bool state)
>  static void input_device_enter_reconnect_mode(struct input_device *idev);
>  static int connection_disconnect(struct input_device *idev, uint32_t flags);
>
> +static bool input_device_bonded(struct input_device *idev)
> +{
> +       return device_is_bonded(idev->device,
> +                               btd_device_get_bdaddr_type(idev->device));
> +}
> +
>  static void input_device_free(struct input_device *idev)
>  {
>         bt_uhid_unref(idev->uhid);
> @@ -979,8 +985,7 @@ static int hidp_add_connection(struct input_device *idev)
>                 device_get_name(idev->device, req->name, sizeof(req->name));
>
>         /* Make sure the device is bonded if required */
> -       if (classic_bonded_only && !device_is_bonded(idev->device,
> -                               btd_device_get_bdaddr_type(idev->device))) {
> +       if (classic_bonded_only && !input_device_bonded(idev)) {
>                 error("Rejected connection from !bonded device %s", dst_addr);
>                 goto cleanup;
>         }
> @@ -1153,16 +1158,23 @@ static int dev_connect(struct input_device *idev)
>  {
>         GError *err = NULL;
>         GIOChannel *io;
> +       BtIOSecLevel sec_level;
>
>         if (idev->disable_sdp)
>                 bt_clear_cached_session(&idev->src, &idev->dst);
>
> +       /* encrypt connection if device is bonded */
> +       if (input_device_bonded(idev))
> +               sec_level = BT_IO_SEC_MEDIUM;
> +       else
> +               sec_level = BT_IO_SEC_LOW;
> +
>         io = bt_io_connect(control_connect_cb, idev,
>                                 NULL, &err,
>                                 BT_IO_OPT_SOURCE_BDADDR, &idev->src,
>                                 BT_IO_OPT_DEST_BDADDR, &idev->dst,
>                                 BT_IO_OPT_PSM, L2CAP_PSM_HIDP_CTRL,
> -                               BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
> +                               BT_IO_OPT_SEC_LEVEL, sec_level,
>                                 BT_IO_OPT_INVALID);
>         idev->ctrl_io = io;
>
> @@ -1227,8 +1239,7 @@ static void input_device_enter_reconnect_mode(struct input_device *idev)
>                                 reconnect_mode_to_string(idev->reconnect_mode));
>
>         /* Make sure the device is bonded if required */
> -       if (classic_bonded_only && !device_is_bonded(idev->device,
> -                               btd_device_get_bdaddr_type(idev->device)))
> +       if (classic_bonded_only && !input_device_bonded(idev))
>                 return;
>
>         /* Only attempt an auto-reconnect when the device is required to
> --
> 2.28.0.rc0.105.gf9edc3c819-goog
>

Applied, thanks.

-- 
Luiz Augusto von Dentz



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux