* [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC
@ 2018-04-17 15:46 Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 1/3] ipc: use strlcpy where applicable Anatoly Burakov
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Anatoly Burakov @ 2018-04-17 15:46 UTC (permalink / raw)
To: dev; +Cc: thomas
This patchset fixes a few Coverity issues introduced
when various parts of DPDK IPC were added, and explains
away other reported issues.
Coverity issues fixed:
- 272595 - return without mutex unlock
- 272609 - fd leak
Coverity issues intentionally not fixed:
- 260407 - strcpy into fixed size buffer
- Both src and dst strings are fixed size, so this is false
positive
- Hopefully will be silenced by replacing strcpy with strlcpy
- 272565 - strcpy into fixed size buffer
- Same as above
- 272582 - strcpy into fixed size buffer
- Same as above
- 268321 - tainted string
- Not an issue, we handle errors correctly
- 272593 - tainted string
- Same as above
- 272604 - tainted string
- Same as above
- 260410 - not checking return value of rte_thread_setname
- We intentionally don't care if it fails
- 272583 - return without mutex unlock
- Independently discovered and fixed [1]
[1] http://dpdk.org/dev/patchwork/patch/38042/
Anatoly Burakov (3):
ipc: use strlcpy where applicable
ipc: fix return without mutex unlock
ipc: fix resource leak
lib/librte_eal/common/eal_common_proc.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-dev] [PATCH 1/3] ipc: use strlcpy where applicable
2018-04-17 15:46 [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Anatoly Burakov
@ 2018-04-17 15:46 ` Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 2/3] ipc: fix return without mutex unlock Anatoly Burakov
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Anatoly Burakov @ 2018-04-17 15:46 UTC (permalink / raw)
To: dev; +Cc: thomas, anatoly.burakov, jianfeng.tan
This also silences (or should silence) a few Coverity false
positives where we used strcpy before (Coverity complained
about not checking buffer size, but source buffers were
always known to be sized correctly).
Coverity issue: 260407
Coverity issue: 272565
Coverity issue: 272582
Fixes: bacaa2754017 ("eal: add channel for multi-process communication")
Fixes: f05e26051c15 ("eal: add IPC asynchronous request")
Fixes: 783b6e54971d ("eal: add synchronous multi-process communication")
Cc: anatoly.burakov@intel.com
Cc: jianfeng.tan@intel.com
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/librte_eal/common/eal_common_proc.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c
index 2179f3d..74bc300 100644
--- a/lib/librte_eal/common/eal_common_proc.c
+++ b/lib/librte_eal/common/eal_common_proc.c
@@ -129,7 +129,7 @@ create_socket_path(const char *name, char *buf, int len)
if (strlen(name) > 0)
snprintf(buf, len, "%s_%s", prefix, name);
else
- snprintf(buf, len, "%s", prefix);
+ strlcpy(buf, prefix, len);
}
int
@@ -200,7 +200,7 @@ rte_mp_action_register(const char *name, rte_mp_t action)
rte_errno = ENOMEM;
return -1;
}
- strcpy(entry->action_name, name);
+ strlcpy(entry->action_name, name, sizeof(entry->action_name));
entry->action = action;
pthread_mutex_lock(&mp_mutex_action);
@@ -323,8 +323,7 @@ process_msg(struct mp_msg_internal *m, struct sockaddr_un *s)
*/
struct rte_mp_msg dummy;
memset(&dummy, 0, sizeof(dummy));
- snprintf(dummy.name, sizeof(dummy.name),
- "%s", msg->name);
+ strlcpy(dummy.name, msg->name, sizeof(dummy.name));
mp_send(&dummy, s->sun_path, MP_IGN);
} else {
RTE_LOG(ERR, EAL, "Cannot find action: %s\n",
@@ -621,11 +620,11 @@ rte_mp_channel_init(void)
/* create filter path */
create_socket_path("*", path, sizeof(path));
- snprintf(mp_filter, sizeof(mp_filter), "%s", basename(path));
+ strlcpy(mp_filter, basename(path), sizeof(mp_filter));
/* path may have been modified, so recreate it */
create_socket_path("*", path, sizeof(path));
- snprintf(mp_dir_path, sizeof(mp_dir_path), "%s", dirname(path));
+ strlcpy(mp_dir_path, dirname(path), sizeof(mp_dir_path));
/* lock the directory */
dir_fd = open(mp_dir_path, O_RDONLY);
@@ -673,11 +672,11 @@ rte_mp_channel_init(void)
}
/* try best to set thread name */
- snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "rte_mp_handle");
+ strlcpy(thread_name, "rte_mp_handle", RTE_MAX_THREAD_NAME_LEN);
rte_thread_setname(mp_handle_tid, thread_name);
/* try best to set thread name */
- snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "rte_mp_async_handle");
+ strlcpy(thread_name, "rte_mp_async_handle", RTE_MAX_THREAD_NAME_LEN);
rte_thread_setname(async_reply_handle_tid, thread_name);
/* unlock the directory */
@@ -710,7 +709,7 @@ send_msg(const char *dst_path, struct rte_mp_msg *msg, int type)
memset(&dst, 0, sizeof(dst));
dst.sun_family = AF_UNIX;
- snprintf(dst.sun_path, sizeof(dst.sun_path), "%s", dst_path);
+ strlcpy(dst.sun_path, dst_path, sizeof(dst.sun_path));
memset(&msgh, 0, sizeof(msgh));
memset(control, 0, sizeof(control));
@@ -870,7 +869,7 @@ mp_request_async(const char *dst, struct rte_mp_msg *req,
memset(reply_msg, 0, sizeof(*reply_msg));
sync_req->type = REQUEST_TYPE_ASYNC;
- strcpy(sync_req->dst, dst);
+ strlcpy(sync_req->dst, dst, sizeof(sync_req->dst));
sync_req->request = req;
sync_req->reply = reply_msg;
sync_req->async.param = param;
@@ -916,7 +915,7 @@ mp_request_sync(const char *dst, struct rte_mp_msg *req,
sync_req.type = REQUEST_TYPE_SYNC;
sync_req.reply_received = 0;
- strcpy(sync_req.dst, dst);
+ strlcpy(sync_req.dst, dst, sizeof(sync_req.dst));
sync_req.request = req;
sync_req.reply = &msg;
pthread_cond_init(&sync_req.sync.cond, NULL);
--
2.7.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-dev] [PATCH 2/3] ipc: fix return without mutex unlock
2018-04-17 15:46 [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 1/3] ipc: use strlcpy where applicable Anatoly Burakov
@ 2018-04-17 15:46 ` Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 3/3] ipc: fix resource leak Anatoly Burakov
2018-04-20 14:40 ` [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Tan, Jianfeng
3 siblings, 0 replies; 6+ messages in thread
From: Anatoly Burakov @ 2018-04-17 15:46 UTC (permalink / raw)
To: dev; +Cc: thomas, anatoly.burakov
gettimeofday() returning a negative value is highly unlikely,
but if it ever happens, we will exit without unlocking the mutex.
Arguably at that point we'll have bigger problems, but fix this
issue anyway.
Coverity issue: 272595
Fixes: f05e26051c15 ("eal: add IPC asynchronous request")
Cc: anatoly.burakov@intel.com
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/librte_eal/common/eal_common_proc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c
index 74bc300..ad02c00 100644
--- a/lib/librte_eal/common/eal_common_proc.c
+++ b/lib/librte_eal/common/eal_common_proc.c
@@ -525,6 +525,7 @@ async_reply_handle(void *arg __rte_unused)
wait_for_async_messages();
if (gettimeofday(&now, NULL) < 0) {
+ pthread_mutex_unlock(&pending_requests.lock);
RTE_LOG(ERR, EAL, "Cannot get current time\n");
break;
}
--
2.7.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-dev] [PATCH 3/3] ipc: fix resource leak
2018-04-17 15:46 [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 1/3] ipc: use strlcpy where applicable Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 2/3] ipc: fix return without mutex unlock Anatoly Burakov
@ 2018-04-17 15:46 ` Anatoly Burakov
2018-04-20 14:40 ` [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Tan, Jianfeng
3 siblings, 0 replies; 6+ messages in thread
From: Anatoly Burakov @ 2018-04-17 15:46 UTC (permalink / raw)
To: dev; +Cc: thomas, anatoly.burakov
Coverity issue: 272609
Fixes: f05e26051c15 ("eal: add IPC asynchronous request")
Cc: anatoly.burakov@intel.com
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/librte_eal/common/eal_common_proc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c
index ad02c00..a329708 100644
--- a/lib/librte_eal/common/eal_common_proc.c
+++ b/lib/librte_eal/common/eal_common_proc.c
@@ -658,6 +658,7 @@ rte_mp_channel_init(void)
RTE_LOG(ERR, EAL, "failed to create mp thead: %s\n",
strerror(errno));
close(mp_fd);
+ close(dir_fd);
mp_fd = -1;
return -1;
}
--
2.7.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC
2018-04-17 15:46 [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Anatoly Burakov
` (2 preceding siblings ...)
2018-04-17 15:46 ` [dpdk-dev] [PATCH 3/3] ipc: fix resource leak Anatoly Burakov
@ 2018-04-20 14:40 ` Tan, Jianfeng
2018-04-23 20:34 ` Thomas Monjalon
3 siblings, 1 reply; 6+ messages in thread
From: Tan, Jianfeng @ 2018-04-20 14:40 UTC (permalink / raw)
To: Anatoly Burakov, dev; +Cc: thomas
On 4/17/2018 11:46 PM, Anatoly Burakov wrote:
> This patchset fixes a few Coverity issues introduced
> when various parts of DPDK IPC were added, and explains
> away other reported issues.
>
> Coverity issues fixed:
> - 272595 - return without mutex unlock
> - 272609 - fd leak
>
> Coverity issues intentionally not fixed:
> - 260407 - strcpy into fixed size buffer
> - Both src and dst strings are fixed size, so this is false
> positive
> - Hopefully will be silenced by replacing strcpy with strlcpy
> - 272565 - strcpy into fixed size buffer
> - Same as above
> - 272582 - strcpy into fixed size buffer
> - Same as above
> - 268321 - tainted string
> - Not an issue, we handle errors correctly
> - 272593 - tainted string
> - Same as above
> - 272604 - tainted string
> - Same as above
> - 260410 - not checking return value of rte_thread_setname
> - We intentionally don't care if it fails
> - 272583 - return without mutex unlock
> - Independently discovered and fixed [1]
>
> [1] http://dpdk.org/dev/patchwork/patch/38042/
>
> Anatoly Burakov (3):
> ipc: use strlcpy where applicable
> ipc: fix return without mutex unlock
> ipc: fix resource leak
>
> lib/librte_eal/common/eal_common_proc.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
For this series,
Acked-by: Jianfeng Tan <jianfeng.tan@intel.com>
Thanks for fixing these issues.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC
2018-04-20 14:40 ` [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Tan, Jianfeng
@ 2018-04-23 20:34 ` Thomas Monjalon
0 siblings, 0 replies; 6+ messages in thread
From: Thomas Monjalon @ 2018-04-23 20:34 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: dev, Tan, Jianfeng
> > Anatoly Burakov (3):
> > ipc: use strlcpy where applicable
> > ipc: fix return without mutex unlock
> > ipc: fix resource leak
> >
> > lib/librte_eal/common/eal_common_proc.c | 23 ++++++++++++-----------
> > 1 file changed, 12 insertions(+), 11 deletions(-)
> >
>
> For this series,
>
> Acked-by: Jianfeng Tan <jianfeng.tan@intel.com>
Applied, thanks
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-04-23 20:34 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-17 15:46 [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 1/3] ipc: use strlcpy where applicable Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 2/3] ipc: fix return without mutex unlock Anatoly Burakov
2018-04-17 15:46 ` [dpdk-dev] [PATCH 3/3] ipc: fix resource leak Anatoly Burakov
2018-04-20 14:40 ` [dpdk-dev] [PATCH 0/3] Coverity fixes for DPDK IPC Tan, Jianfeng
2018-04-23 20:34 ` Thomas Monjalon
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).