2021-12-20 23:59:28

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 2/3] build: Fix build when sanitizer are enabled

From: Luiz Augusto von Dentz <[email protected]>

This fixes various issues found when sanitizers are enabled.
---
monitor/packet.c | 3 ++-
peripheral/main.c | 2 +-
profiles/audio/a2dp.c | 5 ++++-
profiles/network/bnep.c | 2 +-
src/shared/gatt-server.c | 2 --
tools/mesh-gatt/util.c | 11 ++++++++---
tools/test-runner.c | 2 +-
7 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/monitor/packet.c b/monitor/packet.c
index 71f711dc5..397000644 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -330,7 +330,8 @@ static void print_packet(struct timeval *tv, struct ucred *cred, char ident,
if ((filter_mask & PACKET_FILTER_SHOW_INDEX) &&
index != HCI_DEV_NONE) {
if (use_color()) {
- n = sprintf(ts_str + ts_pos, "%s", COLOR_INDEX_LABEL);
+ n = snprintf(ts_str + ts_pos, sizeof(ts_str) - ts_pos,
+ "%s", COLOR_INDEX_LABEL);
if (n > 0)
ts_pos += n;
}
diff --git a/peripheral/main.c b/peripheral/main.c
index 0f5210403..91adb45fc 100644
--- a/peripheral/main.c
+++ b/peripheral/main.c
@@ -73,7 +73,7 @@ static void prepare_filesystem(void)
if (!is_init)
return;

- for (i = 0; mount_table[i].fstype; i++) {
+ for (i = 0; mount_table[i].fstype && mount_table[i].target; i++) {
struct stat st;

if (lstat(mount_table[i].target, &st) < 0) {
diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index eba2f9822..d0808c77a 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -1338,9 +1338,12 @@ static gboolean a2dp_reconfigure(gpointer data)
if (setup->rsep) {
cap = avdtp_get_codec(setup->rsep->sep);
rsep_codec = (struct avdtp_media_codec_capability *) cap->data;
+ /* Check that codec really match after closing */
+ if (sep->codec != rsep_codec->media_codec_type)
+ setup->rsep = NULL;
}

- if (!setup->rsep || sep->codec != rsep_codec->media_codec_type)
+ if (!setup->rsep)
setup->rsep = find_remote_sep(setup->chan, sep);

if (!setup->rsep) {
diff --git a/profiles/network/bnep.c b/profiles/network/bnep.c
index f94f1da8a..ba0edb42c 100644
--- a/profiles/network/bnep.c
+++ b/profiles/network/bnep.c
@@ -345,7 +345,7 @@ struct bnep *bnep_new(int sk, uint16_t local_role, uint16_t remote_role,
session->io = g_io_channel_unix_new(dup_fd);
session->src = local_role;
session->dst = remote_role;
- strncpy(session->iface, iface, 16);
+ strncpy(session->iface, iface, 15);
session->iface[15] = '\0';

g_io_channel_set_close_on_unref(session->io, TRUE);
diff --git a/src/shared/gatt-server.c b/src/shared/gatt-server.c
index 9beec44be..776e5ce2b 100644
--- a/src/shared/gatt-server.c
+++ b/src/shared/gatt-server.c
@@ -1119,8 +1119,6 @@ static void read_multiple_cb(struct bt_att_chan *chan, uint8_t opcode,
}

data = read_mult_data_new(server, chan, opcode, length / 2);
- if (!data)
- goto error;

for (i = 0; i < data->num_handles; i++)
data->handles[i] = get_le16(pdu + i * 2);
diff --git a/tools/mesh-gatt/util.c b/tools/mesh-gatt/util.c
index e845c4112..eb8b8eb29 100644
--- a/tools/mesh-gatt/util.c
+++ b/tools/mesh-gatt/util.c
@@ -41,9 +41,14 @@ void print_byte_array(const char *prefix, const void *ptr, int len)
char *line, *bytes;
int i;

- line = g_malloc(strlen(prefix) + (16 * 3) + 2);
- sprintf(line, "%s ", prefix);
- bytes = line + strlen(prefix) + 1;
+ if (prefix) {
+ line = g_malloc(strlen(prefix) + (16 * 3) + 2);
+ sprintf(line, "%s ", prefix);
+ bytes = line + strlen(prefix) + 1;
+ } else {
+ line = g_malloc((16 * 3) + 2);
+ bytes = line + 1;
+ }

for (i = 0; i < len; ++i) {
sprintf(bytes, "%2.2x ", data[i]);
diff --git a/tools/test-runner.c b/tools/test-runner.c
index eac120f4a..71cc0d2df 100644
--- a/tools/test-runner.c
+++ b/tools/test-runner.c
@@ -136,7 +136,7 @@ static void prepare_sandbox(void)
{
int i;

- for (i = 0; mount_table[i].fstype; i++) {
+ for (i = 0; mount_table[i].fstype && mount_table[i].target; i++) {
struct stat st;

if (lstat(mount_table[i].target, &st) < 0) {
--
2.33.1