From 457d44d3ded86a1196883b5ec05a91514d69f564 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 12 Aug 2015 18:00:17 +0300 Subject: [PATCH] tools/hcidump: Fix resource leaks --- tools/hcidump.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tools/hcidump.c b/tools/hcidump.c index 8839eb0bd..af8f5925a 100644 --- a/tools/hcidump.c +++ b/tools/hcidump.c @@ -145,7 +145,8 @@ static int process_frames(int dev, int sock, int fd, unsigned long flags) struct frame frm; struct pollfd fds[2]; int nfds = 0; - char *buf, *ctrl; + char *buf; + char ctrl[100]; int len, hdr_size = HCIDUMP_HDR_SIZE; if (sock < 0) @@ -167,13 +168,6 @@ static int process_frames(int dev, int sock, int fd, unsigned long flags) dp = (void *) buf; frm.data = buf + hdr_size; - ctrl = malloc(100); - if (!ctrl) { - free(buf); - perror("Can't allocate control buffer"); - return -1; - } - if (dev == HCI_DEV_NONE) printf("system: "); else @@ -538,13 +532,13 @@ static int open_socket(int dev, unsigned long flags) opt = 1; if (setsockopt(sk, SOL_HCI, HCI_DATA_DIR, &opt, sizeof(opt)) < 0) { perror("Can't enable data direction info"); - return -1; + goto fail; } opt = 1; if (setsockopt(sk, SOL_HCI, HCI_TIME_STAMP, &opt, sizeof(opt)) < 0) { perror("Can't enable time stamp"); - return -1; + goto fail; } /* Setup filter */ @@ -553,7 +547,7 @@ static int open_socket(int dev, unsigned long flags) hci_filter_all_events(&flt); if (setsockopt(sk, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) { perror("Can't set filter"); - return -1; + goto fail; } /* Bind socket to the HCI device */ @@ -563,10 +557,14 @@ static int open_socket(int dev, unsigned long flags) if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { printf("Can't attach to device hci%d. %s(%d)\n", dev, strerror(errno), errno); - return -1; + goto fail; } return sk; + +fail: + close(sk); + return -1; } static struct { -- 2.47.3