summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Kobal <vlad@prokk.net>2019-05-14 18:35:12 +0300
committerGitHub <noreply@github.com>2019-05-14 18:35:12 +0300
commit0d5fa83e224afa6d530ed6a5e6e6fe35a8af955e (patch)
tree99a1a33870b26e93b18693dc2775888abcd298b6
parent1833691018fda9eb6b80eed373c482a394a1267e (diff)
Fix segmentation fault (#6011)
* Fix segmentation fault * Make system info printing safe * Fix quotes for OS name
-rw-r--r--database/rrdhost.c39
-rw-r--r--streaming/rrdpush.c28
-rw-r--r--web/api/web_api_v1.c26
3 files changed, 53 insertions, 40 deletions
diff --git a/database/rrdhost.c b/database/rrdhost.c
index de0366267c..3b06ed1ada 100644
--- a/database/rrdhost.c
+++ b/database/rrdhost.c
@@ -825,19 +825,32 @@ struct rrdhost_system_info *rrdhost_system_info_dup(struct rrdhost_system_info *
struct rrdhost_system_info *ret = callocz(1, sizeof(struct rrdhost_system_info));
if(likely(system_info)) {
- ret->os_name = strdupz(system_info->os_name);
- ret->os_id = strdupz(system_info->os_id);
- ret->os_id_like = strdupz(system_info->os_id_like);
- ret->os_version = strdupz(system_info->os_version);
- ret->os_version_id = strdupz(system_info->os_version_id);
- ret->os_detection = strdupz(system_info->os_detection);
- ret->kernel_name = strdupz(system_info->kernel_name);
- ret->kernel_version = strdupz(system_info->kernel_version);
- ret->architecture = strdupz(system_info->architecture);
- ret->virtualization = strdupz(system_info->virtualization);
- ret->virt_detection = strdupz(system_info->virt_detection);
- ret->container = strdupz(system_info->container);
- ret->container_detection = strdupz(system_info->container_detection);
+ if(system_info->os_name)
+ ret->os_name = strdupz(system_info->os_name);
+ if(system_info->os_id)
+ ret->os_id = strdupz(system_info->os_id);
+ if(system_info->os_id_like)
+ ret->os_id_like = strdupz(system_info->os_id_like);
+ if(system_info->os_version)
+ ret->os_version = strdupz(system_info->os_version);
+ if(system_info->os_version_id)
+ ret->os_version_id = strdupz(system_info->os_version_id);
+ if(system_info->os_detection)
+ ret->os_detection = strdupz(system_info->os_detection);
+ if(system_info->kernel_name)
+ ret->kernel_name = strdupz(system_info->kernel_name);
+ if(system_info->kernel_version)
+ ret->kernel_version = strdupz(system_info->kernel_version);
+ if(system_info->architecture)
+ ret->architecture = strdupz(system_info->architecture);
+ if(system_info->virtualization)
+ ret->virtualization = strdupz(system_info->virtualization);
+ if(system_info->virt_detection)
+ ret->virt_detection = strdupz(system_info->virt_detection);
+ if(system_info->container)
+ ret->container = strdupz(system_info->container);
+ if(system_info->container_detection)
+ ret->container_detection = strdupz(system_info->container_detection);
}
return ret;
diff --git a/streaming/rrdpush.c b/streaming/rrdpush.c
index 5467b65fb7..2e9050ff28 100644
--- a/streaming/rrdpush.c
+++ b/streaming/rrdpush.c
@@ -469,20 +469,20 @@ static int rrdpush_sender_thread_connect_to_master(RRDHOST *host, int default_po
, default_rrd_update_every
, host->os
, host->timezone
- , (host->tags)?host->tags:""
- , host->system_info->os_name
- , host->system_info->os_id
- , host->system_info->os_id_like
- , host->system_info->os_version
- , host->system_info->os_version_id
- , host->system_info->os_detection
- , host->system_info->kernel_name
- , host->system_info->kernel_version
- , host->system_info->architecture
- , host->system_info->virtualization
- , host->system_info->virt_detection
- , host->system_info->container
- , host->system_info->container_detection
+ , (host->tags) ? host->tags : ""
+ , (host->system_info->os_name) ? host->system_info->os_name : ""
+ , (host->system_info->os_id) ? host->system_info->os_id : ""
+ , (host->system_info->os_id_like) ? host->system_info->os_id_like : ""
+ , (host->system_info->os_version) ? host->system_info->os_version : ""
+ , (host->system_info->os_version_id) ? host->system_info->os_version_id : ""
+ , (host->system_info->os_detection) ? host->system_info->os_detection : ""
+ , (host->system_info->kernel_name) ? host->system_info->kernel_name : ""
+ , (host->system_info->kernel_version) ? host->system_info->kernel_version : ""
+ , (host->system_info->architecture) ? host->system_info->architecture : ""
+ , (host->system_info->virtualization) ? host->system_info->virtualization : ""
+ , (host->system_info->virt_detection) ? host->system_info->virt_detection : ""
+ , (host->system_info->container) ? host->system_info->container : ""
+ , (host->system_info->container_detection) ? host->system_info->container_detection : ""
, host->program_name
, host->program_version
);
diff --git a/web/api/web_api_v1.c b/web/api/web_api_v1.c
index 04c9198cca..7c0d728bf8 100644
--- a/web/api/web_api_v1.c
+++ b/web/api/web_api_v1.c
@@ -736,19 +736,19 @@ inline int web_client_api_request_v1_info(RRDHOST *host, struct web_client *w, c
web_client_api_request_v1_info_summary_alarm_statuses(host, wb);
buffer_strcat(wb, "\t},\n");
- buffer_sprintf(wb, "\t\"os_name\": %s,\n", host->system_info->os_name);
- buffer_sprintf(wb, "\t\"os_id\": \"%s\",\n", host->system_info->os_id);
- buffer_sprintf(wb, "\t\"os_id_like\": \"%s\",\n", host->system_info->os_id_like);
- buffer_sprintf(wb, "\t\"os_version\": \"%s\",\n", host->system_info->os_version);
- buffer_sprintf(wb, "\t\"os_version_id\": \"%s\",\n", host->system_info->os_version_id);
- buffer_sprintf(wb, "\t\"os_detection\": \"%s\",\n", host->system_info->os_detection);
- buffer_sprintf(wb, "\t\"kernel_name\": \"%s\",\n", host->system_info->kernel_name);
- buffer_sprintf(wb, "\t\"kernel_version\": \"%s\",\n", host->system_info->kernel_version);
- buffer_sprintf(wb, "\t\"architecture\": \"%s\",\n", host->system_info->architecture);
- buffer_sprintf(wb, "\t\"virtualization\": \"%s\",\n", host->system_info->virtualization);
- buffer_sprintf(wb, "\t\"virt_detection\": \"%s\",\n", host->system_info->virt_detection);
- buffer_sprintf(wb, "\t\"container\": \"%s\",\n", host->system_info->container);
- buffer_sprintf(wb, "\t\"container_detection\": \"%s\",\n", host->system_info->container_detection);
+ buffer_sprintf(wb, "\t\"os_name\": %s,\n", (host->system_info->os_name) ? host->system_info->os_name : "\"\"");
+ buffer_sprintf(wb, "\t\"os_id\": \"%s\",\n", (host->system_info->os_id) ? host->system_info->os_id : "");
+ buffer_sprintf(wb, "\t\"os_id_like\": \"%s\",\n", (host->system_info->os_id_like) ? host->system_info->os_id_like : "");
+ buffer_sprintf(wb, "\t\"os_version\": \"%s\",\n", (host->system_info->os_version) ? host->system_info->os_version : "");
+ buffer_sprintf(wb, "\t\"os_version_id\": \"%s\",\n", (host->system_info->os_version_id) ? host->system_info->os_version_id : "");
+ buffer_sprintf(wb, "\t\"os_detection\": \"%s\",\n", (host->system_info->os_detection) ? host->system_info->os_detection : "");
+ buffer_sprintf(wb, "\t\"kernel_name\": \"%s\",\n", (host->system_info->kernel_name) ? host->system_info->kernel_name : "");
+ buffer_sprintf(wb, "\t\"kernel_version\": \"%s\",\n", (host->system_info->kernel_version) ? host->system_info->kernel_version : "");
+ buffer_sprintf(wb, "\t\"architecture\": \"%s\",\n", (host->system_info->architecture) ? host->system_info->architecture : "");
+ buffer_sprintf(wb, "\t\"virtualization\": \"%s\",\n", (host->system_info->virtualization) ? host->system_info->virtualization : "");
+ buffer_sprintf(wb, "\t\"virt_detection\": \"%s\",\n", (host->system_info->virt_detection) ? host->system_info->virt_detection : "");
+ buffer_sprintf(wb, "\t\"container\": \"%s\",\n", (host->system_info->container) ? host->system_info->container : "");
+ buffer_sprintf(wb, "\t\"container_detection\": \"%s\",\n", (host->system_info->container_detection) ? host->system_info->container_detection : "");
buffer_strcat(wb, "\t\"collectors\": [");
chartcollectors2json(host, wb);