linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Bluetooth: Update resolving list when updating whitelist
@ 2020-04-07 20:56 Marcel Holtmann
  2020-04-07 23:00 ` Luiz Augusto von Dentz
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Marcel Holtmann @ 2020-04-07 20:56 UTC (permalink / raw)
  To: linux-bluetooth

When the whitelist is updated, then also update the entries of the
resolving list for devices where IRKs are available.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/hci_request.c | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
index efec2a0bb824..45fbda5323af 100644
--- a/net/bluetooth/hci_request.c
+++ b/net/bluetooth/hci_request.c
@@ -695,6 +695,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
 	bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
 		   cp.bdaddr_type);
 	hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
+
+	if (use_ll_privacy(req->hdev)) {
+		struct smp_irk *irk;
+
+		irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
+		if (irk) {
+			struct hci_cp_le_del_from_resolv_list cp;
+
+			cp.bdaddr_type = bdaddr_type;
+			bacpy(&cp.bdaddr, bdaddr);
+
+			hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
+				    sizeof(cp), &cp);
+		}
+	}
 }
 
 /* Adds connection to white list if needed. On error, returns -1. */
@@ -715,7 +730,7 @@ static int add_to_white_list(struct hci_request *req,
 		return -1;
 
 	/* White list can not be used with RPAs */
-	if (!allow_rpa &&
+	if (!allow_rpa && !use_ll_privacy(hdev) &&
 	    hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
 		return -1;
 	}
@@ -732,6 +747,24 @@ static int add_to_white_list(struct hci_request *req,
 		   cp.bdaddr_type);
 	hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
 
+	if (use_ll_privacy(hdev)) {
+		struct smp_irk *irk;
+
+		irk = hci_find_irk_by_addr(hdev, &params->addr,
+					   params->addr_type);
+		if (irk) {
+			struct hci_cp_le_add_to_resolv_list cp;
+
+			cp.bdaddr_type = params->addr_type;
+			bacpy(&cp.bdaddr, &params->addr);
+			memcpy(cp.peer_irk, irk->val, 16);
+			memset(cp.local_irk, 0, 16);
+
+			hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
+				    sizeof(cp), &cp);
+		}
+	}
+
 	return 0;
 }
 
@@ -772,7 +805,7 @@ static u8 update_white_list(struct hci_request *req)
 		}
 
 		/* White list can not be used with RPAs */
-		if (!allow_rpa &&
+		if (!allow_rpa && !use_ll_privacy(hdev) &&
 		    hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
 			return 0x00;
 		}
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-04-07 20:56 [PATCH] Bluetooth: Update resolving list when updating whitelist Marcel Holtmann
@ 2020-04-07 23:00 ` Luiz Augusto von Dentz
  2020-04-07 23:23   ` Marcel Holtmann
  2020-04-07 23:43 ` Abhishek Pandit-Subedi
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2020-04-07 23:00 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth

Hi Marcel,

On Tue, Apr 7, 2020 at 1:57 PM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> When the whitelist is updated, then also update the entries of the
> resolving list for devices where IRKs are available.
>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  net/bluetooth/hci_request.c | 37 +++++++++++++++++++++++++++++++++++--
>  1 file changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
> index efec2a0bb824..45fbda5323af 100644
> --- a/net/bluetooth/hci_request.c
> +++ b/net/bluetooth/hci_request.c
> @@ -695,6 +695,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
>         bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
>                    cp.bdaddr_type);
>         hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
> +
> +       if (use_ll_privacy(req->hdev)) {
> +               struct smp_irk *irk;
> +
> +               irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
> +               if (irk) {
> +                       struct hci_cp_le_del_from_resolv_list cp;
> +
> +                       cp.bdaddr_type = bdaddr_type;
> +                       bacpy(&cp.bdaddr, bdaddr);
> +
> +                       hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
> +                                   sizeof(cp), &cp);
> +               }
> +       }
>  }
>
>  /* Adds connection to white list if needed. On error, returns -1. */
> @@ -715,7 +730,7 @@ static int add_to_white_list(struct hci_request *req,
>                 return -1;
>
>         /* White list can not be used with RPAs */
> -       if (!allow_rpa &&
> +       if (!allow_rpa && !use_ll_privacy(hdev) &&
>             hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
>                 return -1;
>         }
> @@ -732,6 +747,24 @@ static int add_to_white_list(struct hci_request *req,
>                    cp.bdaddr_type);
>         hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
>
> +       if (use_ll_privacy(hdev)) {
> +               struct smp_irk *irk;
> +
> +               irk = hci_find_irk_by_addr(hdev, &params->addr,
> +                                          params->addr_type);
> +               if (irk) {
> +                       struct hci_cp_le_add_to_resolv_list cp;
> +
> +                       cp.bdaddr_type = params->addr_type;
> +                       bacpy(&cp.bdaddr, &params->addr);
> +                       memcpy(cp.peer_irk, irk->val, 16);
> +                       memset(cp.local_irk, 0, 16);
> +
> +                       hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
> +                                   sizeof(cp), &cp);

Shouldn't we be checking if there is any space left in the list before
trying to send the command? I wonder what would happen if there is too
many IRKs, I guess that means we would still have to resolve them in
the host.

> +               }
> +       }
> +
>         return 0;
>  }
>
> @@ -772,7 +805,7 @@ static u8 update_white_list(struct hci_request *req)
>                 }
>
>                 /* White list can not be used with RPAs */
> -               if (!allow_rpa &&
> +               if (!allow_rpa && !use_ll_privacy(hdev) &&
>                     hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
>                         return 0x00;
>                 }
> --
> 2.25.2
>


-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-04-07 23:00 ` Luiz Augusto von Dentz
@ 2020-04-07 23:23   ` Marcel Holtmann
  0 siblings, 0 replies; 8+ messages in thread
From: Marcel Holtmann @ 2020-04-07 23:23 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

Hi Luiz,

>> When the whitelist is updated, then also update the entries of the
>> resolving list for devices where IRKs are available.
>> 
>> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
>> ---
>> net/bluetooth/hci_request.c | 37 +++++++++++++++++++++++++++++++++++--
>> 1 file changed, 35 insertions(+), 2 deletions(-)
>> 
>> diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
>> index efec2a0bb824..45fbda5323af 100644
>> --- a/net/bluetooth/hci_request.c
>> +++ b/net/bluetooth/hci_request.c
>> @@ -695,6 +695,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
>>        bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
>>                   cp.bdaddr_type);
>>        hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
>> +
>> +       if (use_ll_privacy(req->hdev)) {
>> +               struct smp_irk *irk;
>> +
>> +               irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
>> +               if (irk) {
>> +                       struct hci_cp_le_del_from_resolv_list cp;
>> +
>> +                       cp.bdaddr_type = bdaddr_type;
>> +                       bacpy(&cp.bdaddr, bdaddr);
>> +
>> +                       hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
>> +                                   sizeof(cp), &cp);
>> +               }
>> +       }
>> }
>> 
>> /* Adds connection to white list if needed. On error, returns -1. */
>> @@ -715,7 +730,7 @@ static int add_to_white_list(struct hci_request *req,
>>                return -1;
>> 
>>        /* White list can not be used with RPAs */
>> -       if (!allow_rpa &&
>> +       if (!allow_rpa && !use_ll_privacy(hdev) &&
>>            hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
>>                return -1;
>>        }
>> @@ -732,6 +747,24 @@ static int add_to_white_list(struct hci_request *req,
>>                   cp.bdaddr_type);
>>        hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
>> 
>> +       if (use_ll_privacy(hdev)) {
>> +               struct smp_irk *irk;
>> +
>> +               irk = hci_find_irk_by_addr(hdev, &params->addr,
>> +                                          params->addr_type);
>> +               if (irk) {
>> +                       struct hci_cp_le_add_to_resolv_list cp;
>> +
>> +                       cp.bdaddr_type = params->addr_type;
>> +                       bacpy(&cp.bdaddr, &params->addr);
>> +                       memcpy(cp.peer_irk, irk->val, 16);
>> +                       memset(cp.local_irk, 0, 16);
>> +
>> +                       hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
>> +                                   sizeof(cp), &cp);
> 
> Shouldn't we be checking if there is any space left in the list before
> trying to send the command? I wonder what would happen if there is too
> many IRKs, I guess that means we would still have to resolve them in
> the host.

the resolving list size is just a guesstimate and no guarantee that space is available. However my assumption is that if you have x entries for whitespace, then you also get x entries for the resolving list. If we are not putting the device in the whitelist, then it also makes no sense to add it to the resolving list.

Regards

Marcel


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-04-07 20:56 [PATCH] Bluetooth: Update resolving list when updating whitelist Marcel Holtmann
  2020-04-07 23:00 ` Luiz Augusto von Dentz
@ 2020-04-07 23:43 ` Abhishek Pandit-Subedi
  2020-04-08  6:15   ` Marcel Holtmann
  2020-04-07 23:50 ` kbuild test robot
  2020-05-05 13:11 ` Sathish Narasimman
  3 siblings, 1 reply; 8+ messages in thread
From: Abhishek Pandit-Subedi @ 2020-04-07 23:43 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: Bluez mailing list

Hi Marcel,

Since the resolv list is tied directly to the whitelist, do we still
need hdev->le_resolv_list? Maybe we should remove it.

Abhishek

On Tue, Apr 7, 2020 at 1:56 PM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> When the whitelist is updated, then also update the entries of the
> resolving list for devices where IRKs are available.
>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  net/bluetooth/hci_request.c | 37 +++++++++++++++++++++++++++++++++++--
>  1 file changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
> index efec2a0bb824..45fbda5323af 100644
> --- a/net/bluetooth/hci_request.c
> +++ b/net/bluetooth/hci_request.c
> @@ -695,6 +695,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
>         bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
>                    cp.bdaddr_type);
>         hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
> +
> +       if (use_ll_privacy(req->hdev)) {
> +               struct smp_irk *irk;
> +
> +               irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
> +               if (irk) {
> +                       struct hci_cp_le_del_from_resolv_list cp;
> +
> +                       cp.bdaddr_type = bdaddr_type;
> +                       bacpy(&cp.bdaddr, bdaddr);
> +
> +                       hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
> +                                   sizeof(cp), &cp);
> +               }
> +       }
>  }
>
>  /* Adds connection to white list if needed. On error, returns -1. */
> @@ -715,7 +730,7 @@ static int add_to_white_list(struct hci_request *req,
>                 return -1;
>
>         /* White list can not be used with RPAs */
> -       if (!allow_rpa &&
> +       if (!allow_rpa && !use_ll_privacy(hdev) &&
>             hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
>                 return -1;
>         }
> @@ -732,6 +747,24 @@ static int add_to_white_list(struct hci_request *req,
>                    cp.bdaddr_type);
>         hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
>
> +       if (use_ll_privacy(hdev)) {
> +               struct smp_irk *irk;
> +
> +               irk = hci_find_irk_by_addr(hdev, &params->addr,
> +                                          params->addr_type);
> +               if (irk) {
> +                       struct hci_cp_le_add_to_resolv_list cp;
> +
> +                       cp.bdaddr_type = params->addr_type;
> +                       bacpy(&cp.bdaddr, &params->addr);
> +                       memcpy(cp.peer_irk, irk->val, 16);
> +                       memset(cp.local_irk, 0, 16);
> +
> +                       hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
> +                                   sizeof(cp), &cp);
> +               }
> +       }
> +
>         return 0;
>  }
>
> @@ -772,7 +805,7 @@ static u8 update_white_list(struct hci_request *req)
>                 }
>
>                 /* White list can not be used with RPAs */
> -               if (!allow_rpa &&
> +               if (!allow_rpa && !use_ll_privacy(hdev) &&
>                     hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
>                         return 0x00;
>                 }
> --
> 2.25.2
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-04-07 20:56 [PATCH] Bluetooth: Update resolving list when updating whitelist Marcel Holtmann
  2020-04-07 23:00 ` Luiz Augusto von Dentz
  2020-04-07 23:43 ` Abhishek Pandit-Subedi
@ 2020-04-07 23:50 ` kbuild test robot
  2020-05-05 13:11 ` Sathish Narasimman
  3 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2020-04-07 23:50 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: kbuild-all, linux-bluetooth

[-- Attachment #1: Type: text/plain, Size: 2524 bytes --]

Hi Marcel,

I love your patch! Yet something to improve:

[auto build test ERROR on bluetooth-next/master]
[also build test ERROR on next-20200407]
[cannot apply to v5.6]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Marcel-Holtmann/Bluetooth-Update-resolving-list-when-updating-whitelist/20200408-045729
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.3.0 make.cross ARCH=parisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   net/bluetooth/hci_request.c: In function 'del_from_white_list':
>> net/bluetooth/hci_request.c:693:6: error: implicit declaration of function 'use_ll_privacy' [-Werror=implicit-function-declaration]
     693 |  if (use_ll_privacy(req->hdev)) {
         |      ^~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/use_ll_privacy +693 net/bluetooth/hci_request.c

   680	
   681	static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
   682					u8 bdaddr_type)
   683	{
   684		struct hci_cp_le_del_from_white_list cp;
   685	
   686		cp.bdaddr_type = bdaddr_type;
   687		bacpy(&cp.bdaddr, bdaddr);
   688	
   689		bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
   690			   cp.bdaddr_type);
   691		hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
   692	
 > 693		if (use_ll_privacy(req->hdev)) {
   694			struct smp_irk *irk;
   695	
   696			irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
   697			if (irk) {
   698				struct hci_cp_le_del_from_resolv_list cp;
   699	
   700				cp.bdaddr_type = bdaddr_type;
   701				bacpy(&cp.bdaddr, bdaddr);
   702	
   703				hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
   704					    sizeof(cp), &cp);
   705			}
   706		}
   707	}
   708	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 60777 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-04-07 23:43 ` Abhishek Pandit-Subedi
@ 2020-04-08  6:15   ` Marcel Holtmann
  0 siblings, 0 replies; 8+ messages in thread
From: Marcel Holtmann @ 2020-04-08  6:15 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi; +Cc: Bluez mailing list

Hi Abhishek,

> Since the resolv list is tied directly to the whitelist, do we still
> need hdev->le_resolv_list? Maybe we should remove it.

it is really useful for debugging since you can look into debugfs to see what is actually programmed into the controller. I also have the feeling that eventually we might need the resolving list when we have privacy enabled.

Regards

Marcel


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-04-07 20:56 [PATCH] Bluetooth: Update resolving list when updating whitelist Marcel Holtmann
                   ` (2 preceding siblings ...)
  2020-04-07 23:50 ` kbuild test robot
@ 2020-05-05 13:11 ` Sathish Narasimman
  2020-06-03 17:15   ` Sathish Narasimman
  3 siblings, 1 reply; 8+ messages in thread
From: Sathish Narasimman @ 2020-05-05 13:11 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: Bluez mailing list

Hi Marcel

On Wed, Apr 8, 2020 at 2:26 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> When the whitelist is updated, then also update the entries of the
> resolving list for devices where IRKs are available.
>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  net/bluetooth/hci_request.c | 37 +++++++++++++++++++++++++++++++++++--
>  1 file changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
> index efec2a0bb824..45fbda5323af 100644
> --- a/net/bluetooth/hci_request.c
> +++ b/net/bluetooth/hci_request.c
> @@ -695,6 +695,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
>         bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
>                    cp.bdaddr_type);
>         hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
> +
> +       if (use_ll_privacy(req->hdev)) {
> +               struct smp_irk *irk;
> +
> +               irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
> +               if (irk) {
> +                       struct hci_cp_le_del_from_resolv_list cp;
> +
> +                       cp.bdaddr_type = bdaddr_type;
> +                       bacpy(&cp.bdaddr, bdaddr);
> +
> +                       hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
> +                                   sizeof(cp), &cp);
> +               }
> +       }
>  }
>
>  /* Adds connection to white list if needed. On error, returns -1. */
> @@ -715,7 +730,7 @@ static int add_to_white_list(struct hci_request *req,
>                 return -1;
>
>         /* White list can not be used with RPAs */
> -       if (!allow_rpa &&
> +       if (!allow_rpa && !use_ll_privacy(hdev) &&
>             hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
>                 return -1;
>         }
> @@ -732,6 +747,24 @@ static int add_to_white_list(struct hci_request *req,
>                    cp.bdaddr_type);
>         hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
>
> +       if (use_ll_privacy(hdev)) {
> +               struct smp_irk *irk;
> +
> +               irk = hci_find_irk_by_addr(hdev, &params->addr,
> +                                          params->addr_type);
> +               if (irk) {
> +                       struct hci_cp_le_add_to_resolv_list cp;
> +
> +                       cp.bdaddr_type = params->addr_type;
> +                       bacpy(&cp.bdaddr, &params->addr);
> +                       memcpy(cp.peer_irk, irk->val, 16);
> +                       memset(cp.local_irk, 0, 16);
Shall we memcpy hdev->irk as local_irk here.
if  privacy (HCI_PRIVACY)  is enabled. also if controller supports
LL_PRIVACY so that stack can utilize it.
else continue with HCI_PRIVACY.
Is there any drawback with this approach. please guide
> +
> +                       hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
> +                                   sizeof(cp), &cp);
> +               }
> +       }
> +
>         return 0;
>  }
>
> @@ -772,7 +805,7 @@ static u8 update_white_list(struct hci_request *req)
>                 }
>
>                 /* White list can not be used with RPAs */
> -               if (!allow_rpa &&
> +               if (!allow_rpa && !use_ll_privacy(hdev) &&
>                     hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
>                         return 0x00;
>                 }
> --
> 2.25.2
>

Regards
Sathish N

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Bluetooth: Update resolving list when updating whitelist
  2020-05-05 13:11 ` Sathish Narasimman
@ 2020-06-03 17:15   ` Sathish Narasimman
  0 siblings, 0 replies; 8+ messages in thread
From: Sathish Narasimman @ 2020-06-03 17:15 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: Bluez mailing list

Hi Marcel

On Tue, May 5, 2020 at 6:41 PM Sathish Narasimman <nsathish41@gmail.com> wrote:
>
> Hi Marcel
>
> On Wed, Apr 8, 2020 at 2:26 AM Marcel Holtmann <marcel@holtmann.org> wrote:
> >
> > When the whitelist is updated, then also update the entries of the
> > resolving list for devices where IRKs are available.
> >
> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> > ---
> >  net/bluetooth/hci_request.c | 37 +++++++++++++++++++++++++++++++++++--
> >  1 file changed, 35 insertions(+), 2 deletions(-)
> >
> > diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
> > index efec2a0bb824..45fbda5323af 100644
> > --- a/net/bluetooth/hci_request.c
> > +++ b/net/bluetooth/hci_request.c
> > @@ -695,6 +695,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
> >         bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr,
> >                    cp.bdaddr_type);
> >         hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);
> > +
> > +       if (use_ll_privacy(req->hdev)) {
> > +               struct smp_irk *irk;
> > +
> > +               irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
> > +               if (irk) {
> > +                       struct hci_cp_le_del_from_resolv_list cp;
> > +
> > +                       cp.bdaddr_type = bdaddr_type;
> > +                       bacpy(&cp.bdaddr, bdaddr);
> > +
> > +                       hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
> > +                                   sizeof(cp), &cp);
> > +               }
> > +       }
> >  }
> >
> >  /* Adds connection to white list if needed. On error, returns -1. */
> > @@ -715,7 +730,7 @@ static int add_to_white_list(struct hci_request *req,
> >                 return -1;
> >
> >         /* White list can not be used with RPAs */
> > -       if (!allow_rpa &&
> > +       if (!allow_rpa && !use_ll_privacy(hdev) &&
> >             hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
> >                 return -1;
> >         }
> > @@ -732,6 +747,24 @@ static int add_to_white_list(struct hci_request *req,
> >                    cp.bdaddr_type);
> >         hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
> >
> > +       if (use_ll_privacy(hdev)) {
> > +               struct smp_irk *irk;
> > +
> > +               irk = hci_find_irk_by_addr(hdev, &params->addr,
> > +                                          params->addr_type);
> > +               if (irk) {
> > +                       struct hci_cp_le_add_to_resolv_list cp;
> > +
> > +                       cp.bdaddr_type = params->addr_type;
> > +                       bacpy(&cp.bdaddr, &params->addr);
> > +                       memcpy(cp.peer_irk, irk->val, 16);
> > +                       memset(cp.local_irk, 0, 16);
> Shall we memcpy hdev->irk as local_irk here.
> if  privacy (HCI_PRIVACY)  is enabled. also if controller supports
> LL_PRIVACY so that stack can utilize it.
> else continue with HCI_PRIVACY.
> Is there any drawback with this approach. please guide
> > +
> > +                       hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
> > +                                   sizeof(cp), &cp);
> > +               }
> > +       }
> > +
> >         return 0;
> >  }
> >
> > @@ -772,7 +805,7 @@ static u8 update_white_list(struct hci_request *req)
> >                 }
> >
> >                 /* White list can not be used with RPAs */
> > -               if (!allow_rpa &&
> > +               if (!allow_rpa && !use_ll_privacy(hdev) &&
> >                     hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
> >                         return 0x00;
> >                 }
> > --
> > 2.25.2
> >

I have uploaded patch v2 with a slight modification over your patch.
can you please review
>
> Regards
> Sathish N

Regards
Sathish N

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-06-03 17:16 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-07 20:56 [PATCH] Bluetooth: Update resolving list when updating whitelist Marcel Holtmann
2020-04-07 23:00 ` Luiz Augusto von Dentz
2020-04-07 23:23   ` Marcel Holtmann
2020-04-07 23:43 ` Abhishek Pandit-Subedi
2020-04-08  6:15   ` Marcel Holtmann
2020-04-07 23:50 ` kbuild test robot
2020-05-05 13:11 ` Sathish Narasimman
2020-06-03 17:15   ` Sathish Narasimman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).