From: Steve Grubb <sgrubb@redhat.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH 1/1] Fix various memory leaks
Date: Wed, 12 May 2021 13:39:32 -0400 [thread overview]
Message-ID: <20210512133932.4e2b4bd0@ivy-bridge> (raw)
Hello,
I was checking the code via static analysis and found a number of
leaks throughout the code. This patch should address most of what
was discovered.
Signed-off-by: Steve Grubb <sgrubb@redhat.com>
---
mesh/rpl.c | 4 +++-
obexd/plugins/filesystem.c | 2 +-
obexd/plugins/ftp.c | 8 ++++++--
obexd/plugins/messages-dummy.c | 1 +
plugins/hostname.c | 3 +--
profiles/audio/avrcp.c | 4 +++-
src/main.c | 1 +
src/shared/shell.c | 1 +
tools/mesh-cfgclient.c | 2 +-
tools/mesh-gatt/gatt.c | 1 +
tools/mesh-gatt/node.c | 12 +++++++++---
11 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/mesh/rpl.c b/mesh/rpl.c
index ac0f6b6f2..c53c6fbfd 100644
--- a/mesh/rpl.c
+++ b/mesh/rpl.c
@@ -143,8 +143,10 @@ static void get_entries(const char *iv_path, struct l_queue *rpl_list)
return;
iv_txt = basename(iv_path);
- if (sscanf(iv_txt, "%08x", &iv_index) != 1)
+ if (sscanf(iv_txt, "%08x", &iv_index) != 1) {
+ closedir(dir);
return;
+ }
memset(seq_txt, 0, sizeof(seq_txt));
diff --git a/obexd/plugins/filesystem.c b/obexd/plugins/filesystem.c
index 09bff8ad0..44e3cf3d2 100644
--- a/obexd/plugins/filesystem.c
+++ b/obexd/plugins/filesystem.c
@@ -415,7 +415,7 @@ static void *capability_open(const char *name, int oflag, mode_t mode,
goto fail;
}
- object->buffer = g_string_new(buf);
+ object->buffer = buf;
if (size)
*size = object->buffer->len;
diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index 259bfcae2..4b04bab06 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -386,8 +386,10 @@ static int ftp_copy(struct ftp_session *ftp, const char *name,
ret = verify_path(destdir);
g_free(destdir);
- if (ret < 0)
+ if (ret < 0) {
+ g_free(destination);
return ret;
+ }
source = g_build_filename(ftp->folder, name, NULL);
@@ -424,8 +426,10 @@ static int ftp_move(struct ftp_session *ftp, const char *name,
ret = verify_path(destdir);
g_free(destdir);
- if (ret < 0)
+ if (ret < 0) {
+ g_free(destination);
return ret;
+ }
source = g_build_filename(ftp->folder, name, NULL);
diff --git a/obexd/plugins/messages-dummy.c b/obexd/plugins/messages-dummy.c
index 34199fa05..e37b52df6 100644
--- a/obexd/plugins/messages-dummy.c
+++ b/obexd/plugins/messages-dummy.c
@@ -488,6 +488,7 @@ int messages_get_messages_listing(void *session, const char *name,
int err = -errno;
DBG("fopen(): %d, %s", -err, strerror(-err));
g_free(path);
+ g_free(mld);
return -EBADR;
}
}
diff --git a/plugins/hostname.c b/plugins/hostname.c
index f7ab9e8bc..1a9513adb 100644
--- a/plugins/hostname.c
+++ b/plugins/hostname.c
@@ -213,11 +213,10 @@ static void read_dmi_fallback(void)
return;
type = atoi(contents);
+ g_free(contents);
if (type < 0 || type > 0x1D)
return;
- g_free(contents);
-
/* from systemd hostname chassis list */
switch (type) {
case 0x3:
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index c6a342ee3..58d30b24d 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3508,8 +3508,10 @@ static struct avrcp_player *create_ct_player(struct avrcp *session,
path = device_get_path(session->dev);
mp = media_player_controller_create(path, id);
- if (mp == NULL)
+ if (mp == NULL) {
+ g_free(player);
return NULL;
+ }
media_player_set_callbacks(mp, &ct_cbs, player);
player->user_data = mp;
diff --git a/src/main.c b/src/main.c
index c32bda7d4..94141b1e4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -795,6 +795,7 @@ static void parse_config(GKeyFile *config)
parse_br_config(config);
parse_le_config(config);
+ g_free(str);
}
static void init_defaults(void)
diff --git a/src/shared/shell.c b/src/shared/shell.c
index c0de1640d..f05fb2820 100644
--- a/src/shared/shell.c
+++ b/src/shared/shell.c
@@ -611,6 +611,7 @@ void bt_shell_prompt_input(const char *label, const char *msg,
prompt->user_data = user_data;
queue_push_tail(data.prompts, prompt);
+ g_free(str);
return;
}
diff --git a/tools/mesh-cfgclient.c b/tools/mesh-cfgclient.c
index 1eeed2a1a..49069674f 100644
--- a/tools/mesh-cfgclient.c
+++ b/tools/mesh-cfgclient.c
@@ -914,7 +914,7 @@ static void cmd_import_node(int argc, char *argv[])
/* Number of elements */
if (sscanf(argv[4], "%u", &req->arg3) != 1)
- return;
+ goto fail;
/* DevKey */
req->data2 = l_util_from_hexstring(argv[5], &sz);
diff --git a/tools/mesh-gatt/gatt.c b/tools/mesh-gatt/gatt.c
index b99234f91..c8a8123fb 100644
--- a/tools/mesh-gatt/gatt.c
+++ b/tools/mesh-gatt/gatt.c
@@ -525,6 +525,7 @@ bool mesh_gatt_notify(GDBusProxy *proxy, bool enable, GDBusReturnFunction cb,
notify_io_destroy();
if (cb)
cb(NULL, user_data);
+ g_free(data);
return true;
} else {
method = "StopNotify";
diff --git a/tools/mesh-gatt/node.c b/tools/mesh-gatt/node.c
index 6afda3387..356e1cd1a 100644
--- a/tools/mesh-gatt/node.c
+++ b/tools/mesh-gatt/node.c
@@ -396,8 +396,10 @@ bool node_parse_composition(struct mesh_node *node, uint8_t *data, uint16_t len)
uint16_t vendor_id;
struct mesh_element *ele;
ele = g_malloc0(sizeof(struct mesh_element));
- if (!ele)
+ if (!ele) {
+ g_free(comp);
return false;
+ }
ele->index = i;
ele->loc = get_le16(data);
@@ -412,8 +414,10 @@ bool node_parse_composition(struct mesh_node *node, uint8_t *data, uint16_t len)
mod_id = get_le16(data);
/* initialize uppper 16 bits to 0xffff for SIG models */
mod_id |= 0xffff0000;
- if (!node_set_model(node, ele->index, mod_id))
+ if (!node_set_model(node, ele->index, mod_id)) {
+ g_free(comp);
return false;
+ }
data += 2;
len -= 2;
}
@@ -421,8 +425,10 @@ bool node_parse_composition(struct mesh_node *node, uint8_t *data, uint16_t len)
mod_id = get_le16(data + 2);
vendor_id = get_le16(data);
mod_id |= (vendor_id << 16);
- if (!node_set_model(node, ele->index, mod_id))
+ if (!node_set_model(node, ele->index, mod_id)) {
+ g_free(comp);
return false;
+ }
data += 4;
len -= 4;
}
--
2.31.1
next reply other threads:[~2021-05-12 17:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-12 17:39 Steve Grubb [this message]
2021-05-12 18:06 ` [PATCH 1/1] Fix various memory leaks Luiz Augusto von Dentz
2021-05-12 18:50 ` [1/1] " bluez.test.bot
2021-05-12 22:35 ` [PATCH 1/1] " Bastien Nocera
2021-05-13 2:10 ` Steve Grubb
2021-05-13 20:32 ` Luiz Augusto von Dentz
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=20210512133932.4e2b4bd0@ivy-bridge \
--to=sgrubb@redhat.com \
--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