From: Ismagil Iskakov <i.iskakov@omp.ru>
To: <linux-bluetooth@vger.kernel.org>
Cc: Ismagil Iskakov <i.iskakov@omp.ru>
Subject: [PATCH BlueZ 02/11] profiles/audio: add nullity checks
Date: Tue, 8 Jul 2025 10:33:25 +0300 [thread overview]
Message-ID: <20250708073334.2393559-3-i.iskakov@omp.ru> (raw)
In-Reply-To: <20250708073334.2393559-1-i.iskakov@omp.ru>
Cover bass_setup unsuccessful search and btd_device_get_service.
This change is motivated by the other usages where checks for
NULL exist.
---
profiles/audio/a2dp.c | 45 ++++++++++++++++++++++++++++++++----------
profiles/audio/avrcp.c | 24 +++++++++++++++++++---
profiles/audio/bass.c | 5 +++++
3 files changed, 61 insertions(+), 13 deletions(-)
diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 6204006d6..56a035c7e 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -646,6 +646,24 @@ static gboolean auto_config(gpointer data)
struct btd_service *service;
struct a2dp_stream *stream;
+ dev = avdtp_get_device(setup->session);
+
+ if (setup->sep->type == AVDTP_SEP_TYPE_SOURCE) {
+ service = btd_device_get_service(dev, A2DP_SINK_UUID);
+
+ if (service == NULL) {
+ error("a2dp sink service not found");
+ return FALSE;
+ }
+ } else {
+ service = btd_device_get_service(dev, A2DP_SOURCE_UUID);
+
+ if (service == NULL) {
+ error("a2dp source service not found");
+ return FALSE;
+ }
+ }
+
/* Check if configuration was aborted */
stream = queue_find(setup->sep->streams, match_stream, setup->stream);
if (!stream)
@@ -654,16 +672,12 @@ static gboolean auto_config(gpointer data)
if (setup->err != NULL)
goto done;
- dev = avdtp_get_device(setup->session);
-
avdtp_stream_add_cb(setup->session, setup->stream,
stream_state_changed, setup->sep);
if (setup->sep->type == AVDTP_SEP_TYPE_SOURCE) {
- service = btd_device_get_service(dev, A2DP_SINK_UUID);
sink_new_stream(service, setup->session, setup->stream);
} else {
- service = btd_device_get_service(dev, A2DP_SOURCE_UUID);
source_new_stream(service, setup->session, setup->stream);
}
@@ -995,10 +1009,25 @@ static void setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
struct btd_service *service;
int ret;
- if (a2dp_sep->type == AVDTP_SEP_TYPE_SINK)
+ dev = avdtp_get_device(session);
+
+ if (a2dp_sep->type == AVDTP_SEP_TYPE_SINK) {
DBG("Sink %p: Set_Configuration_Cfm", sep);
- else
+ service = btd_device_get_service(dev, A2DP_SOURCE_UUID);
+
+ if (service == NULL) {
+ error("a2dp source service not found");
+ return;
+ }
+ } else {
DBG("Source %p: Set_Configuration_Cfm", sep);
+ service = btd_device_get_service(dev, A2DP_SINK_UUID);
+
+ if (service == NULL) {
+ error("a2dp sink service not found");
+ return;
+ }
+ }
setup = find_setup_by_session(session);
@@ -1024,14 +1053,10 @@ static void setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
if (!setup)
return;
- dev = avdtp_get_device(session);
-
/* Notify D-Bus interface of the new stream */
if (a2dp_sep->type == AVDTP_SEP_TYPE_SOURCE) {
- service = btd_device_get_service(dev, A2DP_SINK_UUID);
sink_new_stream(service, session, setup->stream);
} else {
- service = btd_device_get_service(dev, A2DP_SOURCE_UUID);
source_new_stream(service, session, setup->stream);
}
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index ba191e441..08edeac40 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3082,8 +3082,14 @@ static void set_ct_player(struct avrcp *session, struct avrcp_player *player)
if (session->controller->player == player)
goto done;
- session->controller->player = player;
service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
+
+ if (service == NULL) {
+ error("avrcp target service not found");
+ return;
+ }
+
+ session->controller->player = player;
control_set_player(service, player ?
media_player_get_path(player->user_data) : NULL);
@@ -4278,12 +4284,18 @@ static void target_init(struct avrcp *session)
if (session->target != NULL)
return;
+ service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID);
+
+ if (service == NULL) {
+ error("avrcp remote service not found");
+ return;
+ }
+
target = data_init(session, AVRCP_REMOTE_UUID);
session->target = target;
DBG("%p version 0x%04x", target, target->version);
- service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID);
btd_service_connecting_complete(service, 0);
player = g_slist_nth_data(server->players, 0);
@@ -4332,6 +4344,13 @@ static void controller_init(struct avrcp *session)
if (session->controller != NULL)
return;
+ service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
+
+ if (service == NULL) {
+ error("avrcp target service not found");
+ return;
+ }
+
controller = data_init(session, AVRCP_TARGET_UUID);
session->controller = controller;
@@ -4339,7 +4358,6 @@ static void controller_init(struct avrcp *session)
if (controller->obex_port)
DBG("%p OBEX PSM 0x%04x", controller, controller->obex_port);
- service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
btd_service_connecting_complete(service, 0);
/* Only create player if category 1 is supported */
diff --git a/profiles/audio/bass.c b/profiles/audio/bass.c
index b27a3fc12..f617efa2c 100644
--- a/profiles/audio/bass.c
+++ b/profiles/audio/bass.c
@@ -349,6 +349,11 @@ static void bap_state_changed(struct bt_bap_stream *stream, uint8_t old_state,
struct bass_setup *setup = queue_find(dg->setups,
match_setup_stream, stream);
+ if (setup == NULL) {
+ error("unable to find setup in delegator");
+ return;
+ }
+
if (dg->bap != bap)
return;
--
2.34.1
next prev parent reply other threads:[~2025-07-08 7:35 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-08 7:33 [PATCH BlueZ 00/11] Fix bugs found by static analysis Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 01/11] btio: fix range validation of security level Ismagil Iskakov
2025-07-08 7:51 ` Fix bugs found by static analysis bluez.test.bot
2025-07-08 7:33 ` Ismagil Iskakov [this message]
2025-07-08 7:33 ` [PATCH BlueZ 03/11] src/shared: add nullity checks Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 04/11] isotest: close fd after sending when nconn=1 Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 05/11] obexd/client: fix err condition causing memleak Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 06/11] profiles/audio: fix memleak of bt_bap Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 07/11] src/shared: fix memleak Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 08/11] src/shared: move null checks before dereferencing Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 09/11] isotest: remove repeating conditions Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 10/11] profiles/audio: fix io_unlink args order Ismagil Iskakov
2025-07-08 7:33 ` [PATCH BlueZ 11/11] src/plugin: fix " Ismagil Iskakov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250708073334.2393559-3-i.iskakov@omp.ru \
--to=i.iskakov@omp.ru \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox