All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH BlueZ v2 0/1] Fixed the crash observed with VOCS
@ 2023-07-24 12:29 Nitin Jadhav
  2023-07-24 12:29 ` [PATCH BlueZ v2 1/1] shared/vcp: " Nitin Jadhav
  0 siblings, 1 reply; 5+ messages in thread
From: Nitin Jadhav @ 2023-07-24 12:29 UTC (permalink / raw)
  To: linux-bluetooth
  Cc: devyani.godbole, pav, luiz.dentz, sathish.narasimman, nitin.jadhav

Hello Maintainers

This patch handles the fix for the crash observed with VOCS when trying to pair with LE Audio TWS earbuds. 

A crash was reproted for the following patch by Pauli Virtanen <pav@iki.fi>. 
Patch Link: https://patchwork.kernel.org/project/bluetooth/patch/20230612133251.194-4-nitin.jadhav@nxp.com/

Root cause: 
- There are two types of database- Remote and Local (rdb and ldb)
- In client mode currently the code was written to access ldb

Fix:
- Correcting it to access rdb has resolved the problem in VOCS
- Same correction is done for VCS.

Thanks
Warm Regards
Nitin Jadhav

Nitin Jadhav (1):
  shared/vcp: Fixed the crash observed with VOCS

 src/shared/vcp.c | 52 +++++++++++++++++++++++++++---------------------
 1 file changed, 29 insertions(+), 23 deletions(-)

-- 
2.34.1


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

* [PATCH BlueZ v2 1/1] shared/vcp: Fixed the crash observed with VOCS
  2023-07-24 12:29 [PATCH BlueZ v2 0/1] Fixed the crash observed with VOCS Nitin Jadhav
@ 2023-07-24 12:29 ` Nitin Jadhav
  2023-07-24 14:04   ` bluez.test.bot
  2023-07-24 18:27   ` [PATCH BlueZ v2 1/1] shared/vcp: " Luiz Augusto von Dentz
  0 siblings, 2 replies; 5+ messages in thread
From: Nitin Jadhav @ 2023-07-24 12:29 UTC (permalink / raw)
  To: linux-bluetooth
  Cc: devyani.godbole, pav, luiz.dentz, sathish.narasimman, nitin.jadhav

Root cause
- There are two types of database- Remote and Local (rdb and ldb).
- In client mode currently the code was written to access ldb.

Fix
- Correcting it, to access rdb has resolved the problem in VOCS.
- Same correction is done for VCS.

Reported-by: Pauli Virtanen <pav@iki.fi>
---
v2: Fixed GitLint and ScanBuild warnings
---
 src/shared/vcp.c | 52 +++++++++++++++++++++++++++---------------------
 1 file changed, 29 insertions(+), 23 deletions(-)

diff --git a/src/shared/vcp.c b/src/shared/vcp.c
index 74bd01729..80d4dfcd4 100644
--- a/src/shared/vcp.c
+++ b/src/shared/vcp.c
@@ -973,7 +973,7 @@ static void vocs_voaodec_read(struct gatt_db_attribute *attrib,
 	struct bt_vocs *vocs = user_data;
 	struct iovec iov;
 
-	iov.iov_base = &vocs->vocs_ao_dec;
+	iov.iov_base = vocs->vocs_ao_dec;
 	iov.iov_len = strlen(vocs->vocs_ao_dec);
 
 	gatt_db_attribute_read_result(attrib, id, 0, iov.iov_base,
@@ -998,10 +998,12 @@ static struct bt_vcs *vcs_new(struct gatt_db *db, struct bt_vcp_db *vdb)
 
 	/* Populate DB with VCS attributes */
 	bt_uuid16_create(&uuid, VCS_UUID);
-	vcs->service = gatt_db_add_service(db, &uuid, true, 9);
+
+	vcs->service = gatt_db_add_service(db, &uuid, true, 10);
 	gatt_db_service_add_included(vcs->service, vdb->vocs->service);
 	gatt_db_service_set_active(vdb->vocs->service, true);
 
+
 	bt_uuid16_create(&uuid, VOL_STATE_CHRC_UUID);
 	vcs->vs = gatt_db_service_add_characteristic(vcs->service,
 					&uuid,
@@ -1385,11 +1387,12 @@ static void read_vocs_audio_location(struct bt_vcp *vcp, bool success,
 				     const uint8_t *value, uint16_t length,
 				     void *user_data)
 {
-	uint32_t *vocs_audio_loc;
-	struct iovec iov = {
-		.iov_base = (void *) value,
-		.iov_len = length,
-	};
+	uint32_t vocs_audio_loc;
+
+	if (!value) {
+		DBG(vcp, "Unable to get VOCS Audio Location");
+		return;
+	}
 
 	if (!success) {
 		DBG(vcp, "Unable to read VOCS Audio Location: error 0x%02x",
@@ -1397,26 +1400,22 @@ static void read_vocs_audio_location(struct bt_vcp *vcp, bool success,
 		return;
 	}
 
-	vocs_audio_loc = iov_pull_mem(&iov, sizeof(uint32_t));
-	if (!*vocs_audio_loc) {
-		DBG(vcp, "Unable to get VOCS Audio Location");
-		return;
-	}
+	memcpy(&vocs_audio_loc, value, length);
 
-	DBG(vcp, "VOCS Audio Loc:%x", *vocs_audio_loc);
+	DBG(vcp, "VOCS Audio Loc:%x", vocs_audio_loc);
 }
 
-
 static void read_vocs_audio_descriptor(struct bt_vcp *vcp, bool success,
 				       uint8_t att_ecode,
 				       const uint8_t *value, uint16_t length,
 				       void *user_data)
 {
 	char *vocs_ao_dec_r;
-	struct iovec iov = {
-		.iov_base = (void *) value,
-		.iov_len = length,
-	};
+
+	if (!value) {
+		DBG(vcp, "Unable to get VOCS Audio Descriptor");
+		return;
+	}
 
 	if (!success) {
 		DBG(vcp, "Unable to read VOCS Audio Descriptor: error 0x%02x",
@@ -1424,13 +1423,20 @@ static void read_vocs_audio_descriptor(struct bt_vcp *vcp, bool success,
 		return;
 	}
 
-	vocs_ao_dec_r = iov_pull_mem(&iov, length);
-	if (!*vocs_ao_dec_r) {
+	vocs_ao_dec_r = malloc(length+1);
+	memset(vocs_ao_dec_r, 0, length+1);
+
+	memcpy(vocs_ao_dec_r, value, length);
+
+	if (!vocs_ao_dec_r) {
 		DBG(vcp, "Unable to get VOCS Audio Descriptor");
 		return;
 	}
 
-	DBG(vcp, "VOCS Audio Descriptor:%s", *vocs_ao_dec_r);
+	DBG(vcp, "VOCS Audio Descriptor: %s", vocs_ao_dec_r);
+
+	free(vocs_ao_dec_r);
+	vocs_ao_dec_r = NULL;
 }
 
 static void vcp_pending_destroy(void *data)
@@ -1719,10 +1725,10 @@ bool bt_vcp_attach(struct bt_vcp *vcp, struct bt_gatt_client *client)
 		return false;
 
 	bt_uuid16_create(&uuid, VCS_UUID);
-	gatt_db_foreach_service(vcp->ldb->db, &uuid, foreach_vcs_service, vcp);
+	gatt_db_foreach_service(vcp->rdb->db, &uuid, foreach_vcs_service, vcp);
 
 	bt_uuid16_create(&uuid, VOL_OFFSET_CS_UUID);
-	gatt_db_foreach_service(vcp->ldb->db, &uuid, foreach_vocs_service, vcp);
+	gatt_db_foreach_service(vcp->rdb->db, &uuid, foreach_vocs_service, vcp);
 
 	return true;
 }
-- 
2.34.1


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

* RE: Fixed the crash observed with VOCS
  2023-07-24 12:29 ` [PATCH BlueZ v2 1/1] shared/vcp: " Nitin Jadhav
@ 2023-07-24 14:04   ` bluez.test.bot
  2023-07-24 18:27   ` [PATCH BlueZ v2 1/1] shared/vcp: " Luiz Augusto von Dentz
  1 sibling, 0 replies; 5+ messages in thread
From: bluez.test.bot @ 2023-07-24 14:04 UTC (permalink / raw)
  To: linux-bluetooth, nitin.jadhav

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

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=768882

---Test result---

Test Summary:
CheckPatch                    PASS      0.51 seconds
GitLint                       PASS      0.32 seconds
BuildEll                      PASS      33.95 seconds
BluezMake                     PASS      977.84 seconds
MakeCheck                     PASS      13.43 seconds
MakeDistcheck                 PASS      196.12 seconds
CheckValgrind                 PASS      317.14 seconds
CheckSmatch                   PASS      418.65 seconds
bluezmakeextell               PASS      129.27 seconds
IncrementalBuild              PASS      811.74 seconds
ScanBuild                     PASS      1304.39 seconds



---
Regards,
Linux Bluetooth


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

* Re: [PATCH BlueZ v2 1/1] shared/vcp: Fixed the crash observed with VOCS
  2023-07-24 12:29 ` [PATCH BlueZ v2 1/1] shared/vcp: " Nitin Jadhav
  2023-07-24 14:04   ` bluez.test.bot
@ 2023-07-24 18:27   ` Luiz Augusto von Dentz
  1 sibling, 0 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2023-07-24 18:27 UTC (permalink / raw)
  To: Nitin Jadhav; +Cc: linux-bluetooth, devyani.godbole, pav, sathish.narasimman

Hi Nitin,

On Mon, Jul 24, 2023 at 5:29 AM Nitin Jadhav <nitin.jadhav@nxp.com> wrote:
>
> Root cause
> - There are two types of database- Remote and Local (rdb and ldb).
> - In client mode currently the code was written to access ldb.
>
> Fix
> - Correcting it, to access rdb has resolved the problem in VOCS.
> - Same correction is done for VCS.
>
> Reported-by: Pauli Virtanen <pav@iki.fi>
> ---
> v2: Fixed GitLint and ScanBuild warnings
> ---
>  src/shared/vcp.c | 52 +++++++++++++++++++++++++++---------------------
>  1 file changed, 29 insertions(+), 23 deletions(-)
>
> diff --git a/src/shared/vcp.c b/src/shared/vcp.c
> index 74bd01729..80d4dfcd4 100644
> --- a/src/shared/vcp.c
> +++ b/src/shared/vcp.c
> @@ -973,7 +973,7 @@ static void vocs_voaodec_read(struct gatt_db_attribute *attrib,
>         struct bt_vocs *vocs = user_data;
>         struct iovec iov;
>
> -       iov.iov_base = &vocs->vocs_ao_dec;
> +       iov.iov_base = vocs->vocs_ao_dec;
>         iov.iov_len = strlen(vocs->vocs_ao_dec);
>
>         gatt_db_attribute_read_result(attrib, id, 0, iov.iov_base,
> @@ -998,10 +998,12 @@ static struct bt_vcs *vcs_new(struct gatt_db *db, struct bt_vcp_db *vdb)
>
>         /* Populate DB with VCS attributes */
>         bt_uuid16_create(&uuid, VCS_UUID);
> -       vcs->service = gatt_db_add_service(db, &uuid, true, 9);
> +
> +       vcs->service = gatt_db_add_service(db, &uuid, true, 10);

Not sure what this has to do with the crashes?

>         gatt_db_service_add_included(vcs->service, vdb->vocs->service);
>         gatt_db_service_set_active(vdb->vocs->service, true);
>
> +

Please remove the extra space above.

>         bt_uuid16_create(&uuid, VOL_STATE_CHRC_UUID);
>         vcs->vs = gatt_db_service_add_characteristic(vcs->service,
>                                         &uuid,
> @@ -1385,11 +1387,12 @@ static void read_vocs_audio_location(struct bt_vcp *vcp, bool success,
>                                      const uint8_t *value, uint16_t length,
>                                      void *user_data)
>  {
> -       uint32_t *vocs_audio_loc;
> -       struct iovec iov = {
> -               .iov_base = (void *) value,
> -               .iov_len = length,
> -       };
> +       uint32_t vocs_audio_loc;
> +
> +       if (!value) {
> +               DBG(vcp, "Unable to get VOCS Audio Location");
> +               return;
> +       }
>
>         if (!success) {
>                 DBG(vcp, "Unable to read VOCS Audio Location: error 0x%02x",
> @@ -1397,26 +1400,22 @@ static void read_vocs_audio_location(struct bt_vcp *vcp, bool success,
>                 return;
>         }
>
> -       vocs_audio_loc = iov_pull_mem(&iov, sizeof(uint32_t));
> -       if (!*vocs_audio_loc) {
> -               DBG(vcp, "Unable to get VOCS Audio Location");
> -               return;
> -       }
> +       memcpy(&vocs_audio_loc, value, length);
>
> -       DBG(vcp, "VOCS Audio Loc:%x", *vocs_audio_loc);
> +       DBG(vcp, "VOCS Audio Loc:%x", vocs_audio_loc);

We should probably store the location within vcp, that said I don't
think this has anything to do with the crashes though.

>  }
>
> -
>  static void read_vocs_audio_descriptor(struct bt_vcp *vcp, bool success,
>                                        uint8_t att_ecode,
>                                        const uint8_t *value, uint16_t length,
>                                        void *user_data)
>  {
>         char *vocs_ao_dec_r;
> -       struct iovec iov = {
> -               .iov_base = (void *) value,
> -               .iov_len = length,
> -       };
> +
> +       if (!value) {
> +               DBG(vcp, "Unable to get VOCS Audio Descriptor");
> +               return;
> +       }
>
>         if (!success) {
>                 DBG(vcp, "Unable to read VOCS Audio Descriptor: error 0x%02x",
> @@ -1424,13 +1423,20 @@ static void read_vocs_audio_descriptor(struct bt_vcp *vcp, bool success,
>                 return;
>         }
>
> -       vocs_ao_dec_r = iov_pull_mem(&iov, length);
> -       if (!*vocs_ao_dec_r) {
> +       vocs_ao_dec_r = malloc(length+1);
> +       memset(vocs_ao_dec_r, 0, length+1);
> +
> +       memcpy(vocs_ao_dec_r, value, length);
> +
> +       if (!vocs_ao_dec_r) {
>                 DBG(vcp, "Unable to get VOCS Audio Descriptor");
>                 return;
>         }
>
> -       DBG(vcp, "VOCS Audio Descriptor:%s", *vocs_ao_dec_r);
> +       DBG(vcp, "VOCS Audio Descriptor: %s", vocs_ao_dec_r);
>
> +       free(vocs_ao_dec_r);
> +       vocs_ao_dec_r = NULL;

Ditto, not really sure what this has to do with the crashes, besides
allocating memory just to free it here sounds useless.

>  }
>
>  static void vcp_pending_destroy(void *data)
> @@ -1719,10 +1725,10 @@ bool bt_vcp_attach(struct bt_vcp *vcp, struct bt_gatt_client *client)
>                 return false;
>
>         bt_uuid16_create(&uuid, VCS_UUID);
> -       gatt_db_foreach_service(vcp->ldb->db, &uuid, foreach_vcs_service, vcp);
> +       gatt_db_foreach_service(vcp->rdb->db, &uuid, foreach_vcs_service, vcp);
>
>         bt_uuid16_create(&uuid, VOL_OFFSET_CS_UUID);
> -       gatt_db_foreach_service(vcp->ldb->db, &uuid, foreach_vocs_service, vcp);
> +       gatt_db_foreach_service(vcp->rdb->db, &uuid, foreach_vocs_service, vcp);

These changes seem to be the actual problem, so I'd split them and if
you still want to introduce the other changes as well please create
proper commits describing why they are required.

>         return true;
>  }
> --
> 2.34.1
>


-- 
Luiz Augusto von Dentz

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

* RE: Fixed the crash observed with VOCS
  2023-07-25 11:21 [PATCH BlueZ v3 1/3] " Nitin Jadhav
@ 2023-07-25 13:33 ` bluez.test.bot
  0 siblings, 0 replies; 5+ messages in thread
From: bluez.test.bot @ 2023-07-25 13:33 UTC (permalink / raw)
  To: linux-bluetooth, nitin.jadhav

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

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=769262

---Test result---

Test Summary:
CheckPatch                    FAIL      1.47 seconds
GitLint                       FAIL      1.02 seconds
BuildEll                      PASS      34.62 seconds
BluezMake                     PASS      1221.61 seconds
MakeCheck                     PASS      13.02 seconds
MakeDistcheck                 PASS      200.94 seconds
CheckValgrind                 PASS      327.52 seconds
CheckSmatch                   PASS      460.63 seconds
bluezmakeextell               PASS      134.82 seconds
IncrementalBuild              PASS      3132.74 seconds
ScanBuild                     PASS      1394.25 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script
Output:
[BlueZ,v3,2/3] shared/vcp: Fixed issues related to read audio location and descriptor
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#99: 
- Audio output descriptor & location read functions, requires code correction

/github/workspace/src/src/13326329.patch total: 0 errors, 1 warnings, 76 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/src/13326329.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
[BlueZ,v3,2/3] shared/vcp: Fixed issues related to read audio location and descriptor

WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (85>80): "[BlueZ,v3,2/3] shared/vcp: Fixed issues related to read audio location and descriptor"


---
Regards,
Linux Bluetooth


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

end of thread, other threads:[~2023-07-25 13:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-24 12:29 [PATCH BlueZ v2 0/1] Fixed the crash observed with VOCS Nitin Jadhav
2023-07-24 12:29 ` [PATCH BlueZ v2 1/1] shared/vcp: " Nitin Jadhav
2023-07-24 14:04   ` bluez.test.bot
2023-07-24 18:27   ` [PATCH BlueZ v2 1/1] shared/vcp: " Luiz Augusto von Dentz
2023-07-25 11:21 [PATCH BlueZ v3 1/3] " Nitin Jadhav
2023-07-25 13:33 ` bluez.test.bot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.