From: Slavomir Kaslev <kaslevs@vmware.com>
To: rostedt@goodmis.org
Cc: linux-trace-devel@vger.kernel.org, slavomir.kaslev@gmail.com
Subject: [RFC PATCH v8 01/11] trace-cmd: Make ports unsigned int
Date: Tue, 2 Apr 2019 16:42:07 +0300 [thread overview]
Message-ID: <20190402134230.30988-2-kaslevs@vmware.com> (raw)
In-Reply-To: <20190402134230.30988-1-kaslevs@vmware.com>
Switch ports data type to unsigned int since vsocket ports are 32 bit unsigned
integers and sometimes cause overflow when stored in int variables.
Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com>
---
include/trace-cmd/trace-cmd.h | 2 +-
tracecmd/trace-listen.c | 10 +++++-----
tracecmd/trace-msg.c | 28 ++++++++++++++++++++--------
3 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h
index ca4452b..9cfb987 100644
--- a/include/trace-cmd/trace-cmd.h
+++ b/include/trace-cmd/trace-cmd.h
@@ -324,7 +324,7 @@ int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle);
/* for server */
int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle);
int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle,
- int *ports);
+ unsigned *ports);
int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd);
int tracecmd_msg_collect_data(struct tracecmd_msg_handle *msg_handle, int ofd);
bool tracecmd_msg_done(struct tracecmd_msg_handle *msg_handle);
diff --git a/tracecmd/trace-listen.c b/tracecmd/trace-listen.c
index 8bd7bad..ce975c8 100644
--- a/tracecmd/trace-listen.c
+++ b/tracecmd/trace-listen.c
@@ -517,10 +517,10 @@ static int *create_all_readers(const char *node, const char *port,
{
int use_tcp = msg_handle->flags & TRACECMD_MSG_FL_USE_TCP;
char buf[BUFSIZ];
- int *port_array;
+ unsigned int *port_array;
int *pid_array;
- int start_port;
- int udp_port;
+ unsigned int start_port;
+ unsigned int udp_port;
int cpus = msg_handle->cpu_count;
int cpu;
int pid;
@@ -528,11 +528,11 @@ static int *create_all_readers(const char *node, const char *port,
if (!pagesize)
return NULL;
- port_array = malloc(sizeof(int) * cpus);
+ port_array = malloc(sizeof(*port_array) * cpus);
if (!port_array)
return NULL;
- pid_array = malloc(sizeof(int) * cpus);
+ pid_array = malloc(sizeof(*pid_array) * cpus);
if (!pid_array) {
free(port_array);
return NULL;
diff --git a/tracecmd/trace-msg.c b/tracecmd/trace-msg.c
index e2dd188..461b6cb 100644
--- a/tracecmd/trace-msg.c
+++ b/tracecmd/trace-msg.c
@@ -161,12 +161,24 @@ static int make_tinit(struct tracecmd_msg_handle *msg_handle,
return 0;
}
-static int write_ints(char *buf, size_t buf_len, int *arr, int arr_len)
+static unsigned int atou(const char *s)
+{
+ long r;
+
+ r = atol(s);
+ if (r >= 0 && r <= UINT_MAX)
+ return r;
+
+ return 0;
+}
+
+static int write_uints(char *buf, size_t buf_len,
+ unsigned int *arr, int arr_len)
{
int i, ret, tot = 0;
for (i = 0; i < arr_len; i++) {
- ret = snprintf(buf, buf_len, "%d", arr[i]);
+ ret = snprintf(buf, buf_len, "%u", arr[i]);
if (ret < 0)
return ret;
@@ -184,15 +196,15 @@ static int write_ints(char *buf, size_t buf_len, int *arr, int arr_len)
return tot;
}
-static int make_rinit(struct tracecmd_msg *msg, int cpus, int *ports)
+static int make_rinit(struct tracecmd_msg *msg, int cpus, unsigned int *ports)
{
int data_size;
- data_size = write_ints(NULL, 0, ports, cpus);
+ data_size = write_uints(NULL, 0, ports, cpus);
msg->buf = malloc(data_size);
if (!msg->buf)
return -ENOMEM;
- write_ints(msg->buf, data_size, ports, cpus);
+ write_uints(msg->buf, data_size, ports, cpus);
msg->rinit.cpus = htonl(cpus);
msg->hdr.size = htonl(ntohl(msg->hdr.size) + data_size);
@@ -442,7 +454,7 @@ int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle,
}
cpus = ntohl(msg.rinit.cpus);
- ports = malloc_or_die(sizeof(*ports) * cpus);
+ ports = malloc(sizeof(*ports) * cpus);
if (!ports) {
ret = -ENOMEM;
goto out;
@@ -456,7 +468,7 @@ int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle,
goto error;
}
- ports[i] = atoi(p);
+ ports[i] = atou(p);
p = strchr(p, '\0');
}
@@ -588,7 +600,7 @@ error:
}
int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle,
- int *ports)
+ unsigned int *ports)
{
struct tracecmd_msg msg;
int ret;
--
2.19.1
next prev parent reply other threads:[~2019-04-02 13:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-02 13:42 [RFC PATCH v8 00/11] Add VM kernel tracing over vsockets and FIFOs Slavomir Kaslev
2019-04-02 13:42 ` Slavomir Kaslev [this message]
2019-04-02 13:42 ` [RFC PATCH v8 01/13] trace-cmd: Minor cleanup in tracecmd_start_recording() Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 02/11] trace-cmd: Detect if vsockets are available Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 02/13] trace-cmd: Minor cleanup in print_stat() Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 03/11] trace-cmd: Add tracecmd_create_recorder_virt function Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 03/13] trace-cmd: Detect if vsockets are available Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 04/11] trace-cmd: Add TRACE_REQ and TRACE_RESP messages Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 04/13] trace-cmd: Add tracecmd_create_recorder_virt function Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 05/13] trace-cmd: Add TRACE_REQ and TRACE_RESP messages Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 05/11] trace-cmd: Add buffer instance flags for tracing in guest and agent context Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 06/11] trace-cmd: Add VM kernel tracing over vsockets transport Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 06/13] trace-cmd: Add buffer instance flags for tracing in guest and agent context Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 07/13] trace-cmd: Add VM kernel tracing over vsockets transport Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 07/11] trace-cmd: Use splice(2) for vsockets if available Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 08/11] trace-cmd: Add `trace-cmd setup-guest` command Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 08/13] trace-cmd: Use splice(2) for vsockets if available Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 09/13] trace-cmd: Add `trace-cmd setup-guest` command Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 09/11] trace-cmd: Try to autodetect number of guest CPUs in setup-guest if not specified Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 10/11] trace-cmd: Add setup-guest flag for attaching FIFOs to the guest VM config Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 10/13] trace-cmd: Try to autodetect number of guest CPUs in setup-guest if not specified Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 11/13] trace-cmd: Add setup-guest flag for attaching FIFOs to the guest VM config Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 11/11] trace-cmd: Add splice() recording from FIFO without additional pipe buffer Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 12/13] " Slavomir Kaslev
2019-04-02 13:42 ` [RFC PATCH v8 13/13] trace-cmd: Add VM tracing over FIFOs transport Slavomir Kaslev
2019-04-02 13:44 ` [RFC PATCH v8 00/11] Add VM kernel tracing over vsockets and FIFOs Slavomir Kaslev
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=20190402134230.30988-2-kaslevs@vmware.com \
--to=kaslevs@vmware.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=slavomir.kaslev@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.