* Fixes issues reported by Smatch static checker @ 2010-06-05 10:14 Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 1/3] sbc: Fix redundant null check on calling free() Gustavo F. Padovan 0 siblings, 1 reply; 8+ messages in thread From: Gustavo F. Padovan @ 2010-06-05 10:14 UTC (permalink / raw) To: linux-bluetooth; +Cc: gustavo Issues found by smatch static check: http://smatch.sourceforge.net/ There are still 3 critical issues: src/storage.c +773 write_trust(29) error: we previously assumed 'match' could be null. lib/sdp.c +2052 sdp_get_lang_attr(16) warn: variable dereferenced before check 'pEncoding' lib/sdp.c +2067 sdp_get_lang_attr(31) error: we previously assumed 'pOffset' could be null. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] sbc: Fix redundant null check on calling free() 2010-06-05 10:14 Fixes issues reported by Smatch static checker Gustavo F. Padovan @ 2010-06-05 10:14 ` Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 2/3] " Gustavo F. Padovan 2010-06-08 6:21 ` [PATCH 1/3] sbc: " Johan Hedberg 0 siblings, 2 replies; 8+ messages in thread From: Gustavo F. Padovan @ 2010-06-05 10:14 UTC (permalink / raw) To: linux-bluetooth; +Cc: gustavo Issues found by smatch static check: http://smatch.sourceforge.net/ --- sbc/sbc.c | 3 +-- sbc/sbcdec.c | 9 +++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sbc/sbc.c b/sbc/sbc.c index edd152f..86399dd 100644 --- a/sbc/sbc.c +++ b/sbc/sbc.c @@ -1138,8 +1138,7 @@ void sbc_finish(sbc_t *sbc) if (!sbc) return; - if (sbc->priv_alloc_base) - free(sbc->priv_alloc_base); + free(sbc->priv_alloc_base); memset(sbc, 0, sizeof(sbc_t)); } diff --git a/sbc/sbcdec.c b/sbc/sbcdec.c index 77b8aed..7008e88 100644 --- a/sbc/sbcdec.c +++ b/sbc/sbcdec.c @@ -259,15 +259,13 @@ int main(int argc, char *argv[]) break; case 'd': - if (output) - free(output); + free(output); output = strdup(optarg); tofile = 0; break; case 'f' : - if (output) - free(output); + free(output); output = strdup(optarg); tofile = 1; break; @@ -289,8 +287,7 @@ int main(int argc, char *argv[]) for (i = 0; i < argc; i++) decode(argv[i], output ? output : "/dev/dsp", tofile); - if (output) - free(output); + free(output); return 0; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] Fix redundant null check on calling free() 2010-06-05 10:14 ` [PATCH 1/3] sbc: Fix redundant null check on calling free() Gustavo F. Padovan @ 2010-06-05 10:14 ` Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 3/3] sdptool: Fix 2 possible NULL dereference Gustavo F. Padovan 2010-06-08 8:02 ` [PATCH 2/3] Fix redundant null check on calling free() Johan Hedberg 2010-06-08 6:21 ` [PATCH 1/3] sbc: " Johan Hedberg 1 sibling, 2 replies; 8+ messages in thread From: Gustavo F. Padovan @ 2010-06-05 10:14 UTC (permalink / raw) To: linux-bluetooth; +Cc: gustavo Issues found by smatch static check: http://smatch.sourceforge.net/ --- input/device.c | 6 +-- lib/sdp.c | 89 +++++++++++++++++---------------------------------- src/sdp-xml.c | 8 +--- src/sdpd-request.c | 12 ++----- src/storage.c | 6 +-- test/ipctest.c | 6 +-- 6 files changed, 42 insertions(+), 85 deletions(-) diff --git a/input/device.c b/input/device.c index 8daf8b2..f06b229 100644 --- a/input/device.c +++ b/input/device.c @@ -596,8 +596,7 @@ failed: close(req->ctrl_sock); cleanup: - if (req->rd_data) - free(req->rd_data); + free(req->rd_data); g_free(req); } @@ -662,8 +661,7 @@ static int hidp_add_connection(const struct input_device *idev, err = ioctl_connadd(req); cleanup: - if (req->rd_data) - free(req->rd_data); + free(req->rd_data); g_free(req); return err; diff --git a/lib/sdp.c b/lib/sdp.c index ca3b4c4..79f4ae5 100644 --- a/lib/sdp.c +++ b/lib/sdp.c @@ -2915,11 +2915,8 @@ int sdp_device_record_register_binary(sdp_session_t *session, bdaddr_t *device, } end: - if (req) - free(req); - - if (rsp) - free(rsp); + free(req); + free(rsp); return status; } @@ -3025,11 +3022,8 @@ int sdp_device_record_unregister_binary(sdp_session_t *session, bdaddr_t *device status = -1; } end: - if (reqbuf) - free(reqbuf); - - if (rspbuf) - free(rspbuf); + free(reqbuf); + free(rspbuf); return status; } @@ -3133,10 +3127,8 @@ int sdp_device_record_update(sdp_session_t *session, bdaddr_t *device, const sdp status = -1; } end: - if (reqbuf) - free(reqbuf); - if (rspbuf) - free(rspbuf); + free(reqbuf); + free(rspbuf); return status; } @@ -3472,10 +3464,8 @@ int sdp_service_search_req(sdp_session_t *session, const sdp_list_t *search, } while (cstate); end: - if (reqbuf) - free(reqbuf); - if (rspbuf) - free(rspbuf); + free(reqbuf); + free(rspbuf); return status; } @@ -3649,12 +3639,9 @@ sdp_record_t *sdp_service_attr_req(sdp_session_t *session, uint32_t handle, } end: - if (reqbuf) - free(reqbuf); - if (rsp_concat_buf.data) - free(rsp_concat_buf.data); - if (rspbuf) - free(rspbuf); + free(reqbuf); + free(rsp_concat_buf.data); + free(rspbuf); return rec; } @@ -3777,9 +3764,8 @@ int sdp_service_search_async(sdp_session_t *session, const sdp_list_t *search, u t = session->priv; - /* check if the buffer is already allocated */ - if (t->rsp_concat_buf.data) - free(t->rsp_concat_buf.data); + /* clean possible allocated buffer */ + free(t->rsp_concat_buf.data); memset(&t->rsp_concat_buf, 0, sizeof(sdp_buf_t)); if (!t->reqbuf) { @@ -3825,10 +3811,8 @@ int sdp_service_search_async(sdp_session_t *session, const sdp_list_t *search, u return 0; end: - if (t->reqbuf) { - free(t->reqbuf); - t->reqbuf = NULL; - } + free(t->reqbuf); + t->reqbuf = NULL; return -1; } @@ -3881,9 +3865,8 @@ int sdp_service_attr_async(sdp_session_t *session, uint32_t handle, sdp_attrreq_ t = session->priv; - /* check if the buffer is already allocated */ - if (t->rsp_concat_buf.data) - free(t->rsp_concat_buf.data); + /* clean possible allocated buffer */ + free(t->rsp_concat_buf.data); memset(&t->rsp_concat_buf, 0, sizeof(sdp_buf_t)); if (!t->reqbuf) { @@ -3939,10 +3922,8 @@ int sdp_service_attr_async(sdp_session_t *session, uint32_t handle, sdp_attrreq_ return 0; end: - if (t->reqbuf) { - free(t->reqbuf); - t->reqbuf = NULL; - } + free(t->reqbuf); + t->reqbuf = NULL; return -1; } @@ -3996,9 +3977,8 @@ int sdp_service_search_attr_async(sdp_session_t *session, const sdp_list_t *sear t = session->priv; - /* check if the buffer is already allocated */ - if (t->rsp_concat_buf.data) - free(t->rsp_concat_buf.data); + /* clean possible allocated buffer */ + free(t->rsp_concat_buf.data); memset(&t->rsp_concat_buf, 0, sizeof(sdp_buf_t)); if (!t->reqbuf) { @@ -4058,10 +4038,8 @@ int sdp_service_search_attr_async(sdp_session_t *session, const sdp_list_t *sear return 0; end: - if (t->reqbuf) { - free(t->reqbuf); - t->reqbuf = NULL; - } + free(t->reqbuf); + t->reqbuf = NULL; return -1; } @@ -4286,8 +4264,7 @@ end: t->cb(pdu_id, status, pdata, size, t->udata); } - if (rspbuf) - free(rspbuf); + free(rspbuf); return err; } @@ -4521,12 +4498,9 @@ int sdp_service_search_attr_req(sdp_session_t *session, const sdp_list_t *search } } end: - if (rsp_concat_buf.data) - free(rsp_concat_buf.data); - if (reqbuf) - free(reqbuf); - if (rspbuf) - free(rspbuf); + free(rsp_concat_buf.data); + free(reqbuf); + free(rspbuf); return status; } @@ -4557,11 +4531,9 @@ int sdp_close(sdp_session_t *session) t = session->priv; if (t) { - if (t->reqbuf) - free(t->reqbuf); + free(t->reqbuf); - if (t->rsp_concat_buf.data) - free(t->rsp_concat_buf.data); + free(t->rsp_concat_buf.data); free(t); } @@ -4668,8 +4640,7 @@ fail: err = errno; if (session->sock >= 0) close(session->sock); - if (session->priv) - free(session->priv); + free(session->priv); free(session); errno = err; diff --git a/src/sdp-xml.c b/src/sdp-xml.c index fbe608c..4b0520d 100644 --- a/src/sdp-xml.c +++ b/src/sdp-xml.c @@ -728,12 +728,8 @@ void sdp_xml_data_free(struct sdp_xml_data *elem) if (elem->data) sdp_data_free(elem->data); - if (elem->name) - free(elem->name); - - if (elem->text) - - free(elem->text); + free(elem->name); + free(elem->text); free(elem); } diff --git a/src/sdpd-request.c b/src/sdpd-request.c index 8c88d6e..d56ffc2 100644 --- a/src/sdpd-request.c +++ b/src/sdpd-request.c @@ -526,8 +526,7 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) } done: - if (cstate) - free(cstate); + free(cstate); if (pattern) sdp_list_free(pattern, free); @@ -745,8 +744,7 @@ static int service_attr_req(sdp_req_t *req, sdp_buf_t *buf) buf->buf_size += sizeof(uint16_t); done: - if (cstate) - free(cstate); + free(cstate); if (seq) sdp_list_free(seq, free); if (status) @@ -929,10 +927,8 @@ static int service_search_attr_req(sdp_req_t *req, sdp_buf_t *buf) } done: - if (cstate) - free(cstate); - if (tmpbuf.data) - free(tmpbuf.data); + free(cstate); + free(tmpbuf.data); if (pattern) sdp_list_free(pattern, free); if (seq) diff --git a/src/storage.c b/src/storage.c index ed1e5ec..07c1ac2 100644 --- a/src/storage.c +++ b/src/storage.c @@ -763,8 +763,7 @@ int write_trust(const char *src, const char *addr, const char *service, /* If the old setting is the same as the requested one, we're done */ if (trusted == trust) { g_slist_free(services); - if (str) - free(str); + free(str); return 0; } @@ -784,8 +783,7 @@ int write_trust(const char *src, const char *addr, const char *service, g_slist_free(services); - if (str) - free(str); + free(str); return ret; } diff --git a/test/ipctest.c b/test/ipctest.c index 1a7543b..9fdfac4 100644 --- a/test/ipctest.c +++ b/test/ipctest.c @@ -1029,8 +1029,7 @@ static gboolean input_cb(GIOChannel *gin, GIOCondition condition, gpointer data) if (sscanf(line, "%*s %as", &address) != 1) DBG("set with bdaddr BDADDR"); - if (u->address) - free(u->address); + free(u->address); u->address = address; DBG("bdaddr %s", u->address); @@ -1049,8 +1048,7 @@ static gboolean input_cb(GIOChannel *gin, GIOCondition condition, gpointer data) DBG("set with profile [hsp|a2dp]"); } - if (profile) - free(profile); + free(profile); DBG("profile %s", u->transport == BT_CAPABILITIES_TRANSPORT_SCO ? "hsp" : "a2dp"); } -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] sdptool: Fix 2 possible NULL dereference 2010-06-05 10:14 ` [PATCH 2/3] " Gustavo F. Padovan @ 2010-06-05 10:14 ` Gustavo F. Padovan 2010-06-08 6:27 ` Johan Hedberg 2010-06-08 8:02 ` [PATCH 2/3] Fix redundant null check on calling free() Johan Hedberg 1 sibling, 1 reply; 8+ messages in thread From: Gustavo F. Padovan @ 2010-06-05 10:14 UTC (permalink / raw) To: linux-bluetooth; +Cc: gustavo Issues found by smatch static check: http://smatch.sourceforge.net/ --- tools/sdptool.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-) diff --git a/tools/sdptool.c b/tools/sdptool.c index 6fb2e90..89a497a 100644 --- a/tools/sdptool.c +++ b/tools/sdptool.c @@ -513,14 +513,16 @@ static void sdp_data_printf(sdp_data_t *sdpdata, struct attrib_context *context, */ static void print_tree_attr_func(void *value, void *userData) { - sdp_data_t *sdpdata = NULL; + sdp_data_t *sdpdata = value; uint16_t attrId; struct service_context *service = (struct service_context *) userData; struct attrib_context context; struct attrib_def *attrDef = NULL; int i; - sdpdata = (sdp_data_t *)value; + if (!sdpdata) + return; + attrId = sdpdata->attrId; /* Search amongst the generic attributes */ for (i = 0; i < attrib_max; i++) @@ -549,10 +551,7 @@ static void print_tree_attr_func(void *value, void *userData) context.attrib = attrDef; context.member_index = 0; /* Parse attribute members */ - if (sdpdata) - sdp_data_printf(sdpdata, &context, 2); - else - printf(" NULL value\n"); + sdp_data_printf(sdpdata, &context, 2); /* Update service */ service->service = context.service; } @@ -723,6 +722,9 @@ static void print_raw_attr_func(void *value, void *userData) struct attrib_def *def = NULL; int i; + if (!data) + return; + /* Search amongst the generic attributes */ for (i = 0; i < attrib_max; i++) if (attrib_names[i].num == data->attrId) { @@ -735,10 +737,7 @@ static void print_raw_attr_func(void *value, void *userData) else printf("\tAttribute 0x%04x\n", data->attrId); - if (data) - print_raw_data(data, 2); - else - printf(" NULL value\n"); + print_raw_data(data, 2); } static void print_raw_attr(sdp_record_t *rec) -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] sdptool: Fix 2 possible NULL dereference 2010-06-05 10:14 ` [PATCH 3/3] sdptool: Fix 2 possible NULL dereference Gustavo F. Padovan @ 2010-06-08 6:27 ` Johan Hedberg 0 siblings, 0 replies; 8+ messages in thread From: Johan Hedberg @ 2010-06-08 6:27 UTC (permalink / raw) To: Gustavo F. Padovan; +Cc: linux-bluetooth Hi Gustavo, On Sat, Jun 05, 2010, Gustavo F. Padovan wrote: > Issues found by smatch static check: > http://smatch.sourceforge.net/ > --- > tools/sdptool.c | 19 +++++++++---------- > 1 files changed, 9 insertions(+), 10 deletions(-) This patch is now also upstream. Thanks. Johan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] Fix redundant null check on calling free() 2010-06-05 10:14 ` [PATCH 2/3] " Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 3/3] sdptool: Fix 2 possible NULL dereference Gustavo F. Padovan @ 2010-06-08 8:02 ` Johan Hedberg 1 sibling, 0 replies; 8+ messages in thread From: Johan Hedberg @ 2010-06-08 8:02 UTC (permalink / raw) To: Gustavo F. Padovan; +Cc: linux-bluetooth Hi Gustavo, On Sat, Jun 05, 2010, Gustavo F. Padovan wrote: > Issues found by smatch static check: http://smatch.sourceforge.net/ > --- > input/device.c | 6 +-- > lib/sdp.c | 89 +++++++++++++++++---------------------------------- > src/sdp-xml.c | 8 +--- > src/sdpd-request.c | 12 ++----- > src/storage.c | 6 +-- > test/ipctest.c | 6 +-- > 6 files changed, 42 insertions(+), 85 deletions(-) Both NULL-check removal patches have been pushed upstream. Johan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] sbc: Fix redundant null check on calling free() 2010-06-05 10:14 ` [PATCH 1/3] sbc: Fix redundant null check on calling free() Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 2/3] " Gustavo F. Padovan @ 2010-06-08 6:21 ` Johan Hedberg 2010-06-08 7:13 ` Marcel Holtmann 1 sibling, 1 reply; 8+ messages in thread From: Johan Hedberg @ 2010-06-08 6:21 UTC (permalink / raw) To: Gustavo F. Padovan; +Cc: linux-bluetooth Hi Gustavo, On Sat, Jun 05, 2010, Gustavo F. Padovan wrote: > Issues found by smatch static check: http://smatch.sourceforge.net/ > --- > sbc/sbc.c | 3 +-- > sbc/sbcdec.c | 9 +++------ > 2 files changed, 4 insertions(+), 8 deletions(-) > > diff --git a/sbc/sbc.c b/sbc/sbc.c > index edd152f..86399dd 100644 > --- a/sbc/sbc.c > +++ b/sbc/sbc.c > @@ -1138,8 +1138,7 @@ void sbc_finish(sbc_t *sbc) > if (!sbc) > return; > > - if (sbc->priv_alloc_base) > - free(sbc->priv_alloc_base); > + free(sbc->priv_alloc_base); I'm a bit hesitant at removing these NULL checks since older libc versions might need them. Any comments from Marcel? Johan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] sbc: Fix redundant null check on calling free() 2010-06-08 6:21 ` [PATCH 1/3] sbc: " Johan Hedberg @ 2010-06-08 7:13 ` Marcel Holtmann 0 siblings, 0 replies; 8+ messages in thread From: Marcel Holtmann @ 2010-06-08 7:13 UTC (permalink / raw) To: Johan Hedberg; +Cc: Gustavo F. Padovan, linux-bluetooth Hi Johan, > > Issues found by smatch static check: http://smatch.sourceforge.net/ > > --- > > sbc/sbc.c | 3 +-- > > sbc/sbcdec.c | 9 +++------ > > 2 files changed, 4 insertions(+), 8 deletions(-) > > > > diff --git a/sbc/sbc.c b/sbc/sbc.c > > index edd152f..86399dd 100644 > > --- a/sbc/sbc.c > > +++ b/sbc/sbc.c > > @@ -1138,8 +1138,7 @@ void sbc_finish(sbc_t *sbc) > > if (!sbc) > > return; > > > > - if (sbc->priv_alloc_base) > > - free(sbc->priv_alloc_base); > > + free(sbc->priv_alloc_base); > > I'm a bit hesitant at removing these NULL checks since older libc > versions might need them. Any comments from Marcel? this is just fine. If you have such an old libc version that doesn't do it, then you have a problem anyway. I am also not sure that this is a problem with any libc version at all. The only argument that might hold this is if you wanna compile this for a non GNU platform. I don't even know if that is possible since I actually don't care about non Linux platforms. Regards Marcel ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-06-08 8:02 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-06-05 10:14 Fixes issues reported by Smatch static checker Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 1/3] sbc: Fix redundant null check on calling free() Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 2/3] " Gustavo F. Padovan 2010-06-05 10:14 ` [PATCH 3/3] sdptool: Fix 2 possible NULL dereference Gustavo F. Padovan 2010-06-08 6:27 ` Johan Hedberg 2010-06-08 8:02 ` [PATCH 2/3] Fix redundant null check on calling free() Johan Hedberg 2010-06-08 6:21 ` [PATCH 1/3] sbc: " Johan Hedberg 2010-06-08 7:13 ` Marcel Holtmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).