2014-02-07 22:28:40

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 0/5] Fixes for memory leaks

Hi all,

This patch set fixes some memory leaks reported by clang static analyzer.
There is no relation between patches of this set so they can be applied
independently.

BR,

Andre


Andre Guedes (5):
hcitool: Fix memory leak in cmd_info
hcidump: Fix memory leak
cltest: Fix memory leak
amptest: Fix memory leak
rctest: Fix memory leak

tools/amptest.c | 12 ++++++++----
tools/cltest.c | 5 +++--
tools/hcidump.c | 9 +++++++--
tools/hcitool.c | 3 +++
tools/rctest.c | 5 ++++-
5 files changed, 25 insertions(+), 9 deletions(-)

--
1.8.5.3



2014-02-17 12:02:04

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH 0/5] Fixes for memory leaks

Hi Andre,

On Sat, Feb 8, 2014 at 12:28 AM, Andre Guedes
<[email protected]> wrote:
> Hi all,
>
> This patch set fixes some memory leaks reported by clang static analyzer.
> There is no relation between patches of this set so they can be applied
> independently.
>
> BR,
>
> Andre
>
>
> Andre Guedes (5):
> hcitool: Fix memory leak in cmd_info
> hcidump: Fix memory leak
> cltest: Fix memory leak
> amptest: Fix memory leak
> rctest: Fix memory leak
>
> tools/amptest.c | 12 ++++++++----
> tools/cltest.c | 5 +++--
> tools/hcidump.c | 9 +++++++--
> tools/hcitool.c | 3 +++
> tools/rctest.c | 5 ++++-
> 5 files changed, 25 insertions(+), 9 deletions(-)
>
> --
> 1.8.5.3

Applied, thanks.


--
Luiz Augusto von Dentz

2014-02-07 22:28:45

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 5/5] rctest: Fix memory leak

---
tools/rctest.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/rctest.c b/tools/rctest.c
index 77fa03c..9281392 100644
--- a/tools/rctest.c
+++ b/tools/rctest.c
@@ -466,8 +466,11 @@ static void save_mode(int sk)
while ((len = read(sk, b, data_size)) > 0) {
ret = write(save_fd, b, len);
if (ret < 0)
- return;
+ goto done;
}
+
+done:
+ free(b);
}

static void recv_mode(int sk)
--
1.8.5.3


2014-02-07 22:28:43

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 3/5] cltest: Fix memory leak

---
tools/cltest.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/cltest.c b/tools/cltest.c
index 16b7553..4ddb98a 100644
--- a/tools/cltest.c
+++ b/tools/cltest.c
@@ -205,8 +205,8 @@ static bool find_controllers(void)
dl = malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t));
if (!dl) {
perror("Failed allocate HCI device request memory");
- result = false;
- goto done;
+ close(fd);
+ return false;
}

dl->dev_num = HCI_MAX_DEV;
@@ -243,6 +243,7 @@ static bool find_controllers(void)
}

done:
+ free(dl);
close(fd);
return result;
}
--
1.8.5.3


2014-02-07 22:28:44

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 4/5] amptest: Fix memory leak

---
tools/amptest.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/tools/amptest.c b/tools/amptest.c
index 16f15bc..6192f7e 100644
--- a/tools/amptest.c
+++ b/tools/amptest.c
@@ -496,6 +496,7 @@ static bool find_amp_controller(void)
struct hci_dev_list_req *dl;
struct hci_dev_req *dr;
int fd, i;
+ bool result;

fd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
if (fd < 0) {
@@ -515,8 +516,8 @@ static bool find_amp_controller(void)

if (ioctl(fd, HCIGETDEVLIST, (void *) dl) < 0) {
perror("Failed to get HCI device list");
- close(fd);
- return false;
+ result = false;
+ goto done;
}

for (i = 0; i< dl->dev_num; i++) {
@@ -541,9 +542,12 @@ static bool find_amp_controller(void)
}
}

- close(fd);
+ result = true;

- return true;
+done:
+ free(dl);
+ close(fd);
+ return result;
}

int main(int argc ,char *argv[])
--
1.8.5.3


2014-02-07 22:28:42

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 2/5] hcidump: Fix memory leak

Memory pointed by frm.data variable was not freed in both failure and
success flows.
---
tools/hcidump.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/hcidump.c b/tools/hcidump.c
index 50123d2..2bbc207 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
@@ -309,7 +309,7 @@ static void read_dump(int fd)
if (err < 0)
goto failed;
if (!err)
- return;
+ goto done;

if (parser.flags & DUMP_PKTLOG) {
switch (ph.type) {
@@ -407,7 +407,7 @@ static void read_dump(int fd)
if (err < 0)
goto failed;
if (!err)
- return;
+ goto done;

frm.ptr = frm.data;
frm.len = frm.data_len;
@@ -432,8 +432,13 @@ static void read_dump(int fd)
parse(&frm);
}

+done:
+ free(frm.data);
+ return;
+
failed:
perror("Read failed");
+ free(frm.data);
exit(1);
}

--
1.8.5.3


2014-02-07 22:28:41

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 1/5] hcitool: Fix memory leak in cmd_info

Free memory pointed by cr variable after it is used.
---
tools/hcitool.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/tools/hcitool.c b/tools/hcitool.c
index 8a92067..c2df8e3 100644
--- a/tools/hcitool.c
+++ b/tools/hcitool.c
@@ -961,6 +961,7 @@ static void cmd_info(int dev_id, int argc, char **argv)
htobs(di.pkt_type & ACL_PTYPE_MASK),
0, 0x01, &handle, 25000) < 0) {
perror("Can't create connection");
+ free(cr);
close(dd);
exit(1);
}
@@ -969,6 +970,8 @@ static void cmd_info(int dev_id, int argc, char **argv)
} else
handle = htobs(cr->conn_info->handle);

+ free(cr);
+
printf("\tBD Address: %s\n", argv[0]);

comp = batocomp(&bdaddr);
--
1.8.5.3