@cryptotaxi247 / netdata-1 / commits / ecc549f5b

Fix a crash when xen libraries are misconfigured (#13535)

Vladimir Kobal committed Aug 22, 2022 at 11:20 UTC ecc549f5b0504f135b6855f416bf57ca77c666aa
1 file changed +19 -13
collectors/xenstat.plugin/xenstat_plugin.c
+19 -13
@@ -171,7 +171,7 @@ static struct domain_metrics *domain_metrics_free(struct domain_metrics *d) {
171 struct vbd_metrics *vbd, *vbd_f;
172 struct network_metrics *network, *network_f;
173
174 - if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: freeing memory for domain '%s' id %d, uuid %s\n", d->name, d->id, d->uuid);
174 + if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: freeing memory for domain '%s' id %u, uuid %s\n", d->name, d->id, d->uuid);
175
176 for(cur = node_metrics.domain_root; cur ; last = cur, cur = cur->next) {
177 if(unlikely(cur->hash == d->hash && !strcmp(cur->uuid, d->uuid))) break;
@@ -401,7 +401,7 @@ static int xenstat_collect(xenstat_handle *xhandle, libxl_ctx *ctx, libxl_dominf
401 if(unlikely(!d->name)) {
402 d->name = strdupz(xenstat_domain_name(domain));
403 netdata_fix_chart_id(d->name);
404 - if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: domain id %d, uuid %s has name '%s'\n", d->id, d->uuid, d->name);
404 + if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: domain id %u, uuid %s has name '%s'\n", d->id, d->uuid, d->name);
405 }
406
407 d->running = xenstat_domain_running(domain);
@@ -569,7 +569,7 @@ static void print_domain_vcpu_chart_definition(char *type, struct domain_metrics
569 }
570
571 static void print_domain_vbd_oo_chart_definition(char *type, unsigned int vbd, int obsolete_flag) {
572 - printf("CHART %s.oo_req_vbd%u '' 'VBD%u \"Out Of\" Requests' 'requests/s' 'vbd' 'xendomain.oo_req_vbd' line %d %d %s %s\n"
572 + printf("CHART %s.oo_req_vbd%u '' 'VBD%u \"Out Of\" Requests' 'requests/s' 'vbd' 'xendomain.oo_req_vbd' line %u %d %s %s\n"
573 , type
574 , vbd
575 , vbd
@@ -582,7 +582,7 @@ static void print_domain_vbd_oo_chart_definition(char *type, unsigned int vbd, i
582 }
583
584 static void print_domain_vbd_requests_chart_definition(char *type, unsigned int vbd, int obsolete_flag) {
585 - printf("CHART %s.requests_vbd%u '' 'VBD%u Requests' 'requests/s' 'vbd' 'xendomain.requests_vbd' line %d %d %s %s\n"
585 + printf("CHART %s.requests_vbd%u '' 'VBD%u Requests' 'requests/s' 'vbd' 'xendomain.requests_vbd' line %u %d %s %s\n"
586 , type
587 , vbd
588 , vbd
@@ -596,7 +596,7 @@ static void print_domain_vbd_requests_chart_definition(char *type, unsigned int
596 }
597
598 static void print_domain_vbd_sectors_chart_definition(char *type, unsigned int vbd, int obsolete_flag) {
599 - printf("CHART %s.sectors_vbd%u '' 'VBD%u Read/Written Sectors' 'sectors/s' 'vbd' 'xendomain.sectors_vbd' line %d %d %s %s\n"
599 + printf("CHART %s.sectors_vbd%u '' 'VBD%u Read/Written Sectors' 'sectors/s' 'vbd' 'xendomain.sectors_vbd' line %u %d %s %s\n"
600 , type
601 , vbd
602 , vbd
@@ -610,7 +610,7 @@ static void print_domain_vbd_sectors_chart_definition(char *type, unsigned int v
610 }
611
612 static void print_domain_network_bytes_chart_definition(char *type, unsigned int network, int obsolete_flag) {
613 - printf("CHART %s.bytes_network%u '' 'Network%u Received/Sent Bytes' 'kilobits/s' 'network' 'xendomain.bytes_network' line %d %d %s %s\n"
613 + printf("CHART %s.bytes_network%u '' 'Network%u Received/Sent Bytes' 'kilobits/s' 'network' 'xendomain.bytes_network' line %u %d %s %s\n"
614 , type
615 , network
616 , network
@@ -624,7 +624,7 @@ static void print_domain_network_bytes_chart_definition(char *type, unsigned int
624 }
625
626 static void print_domain_network_packets_chart_definition(char *type, unsigned int network, int obsolete_flag) {
627 - printf("CHART %s.packets_network%u '' 'Network%u Received/Sent Packets' 'packets/s' 'network' 'xendomain.packets_network' line %d %d %s %s\n"
627 + printf("CHART %s.packets_network%u '' 'Network%u Received/Sent Packets' 'packets/s' 'network' 'xendomain.packets_network' line %u %d %s %s\n"
628 , type
629 , network
630 , network
@@ -638,7 +638,7 @@ static void print_domain_network_packets_chart_definition(char *type, unsigned i
638 }
639
640 static void print_domain_network_errors_chart_definition(char *type, unsigned int network, int obsolete_flag) {
641 - printf("CHART %s.errors_network%u '' 'Network%u Receive/Transmit Errors' 'errors/s' 'network' 'xendomain.errors_network' line %d %d %s %s\n"
641 + printf("CHART %s.errors_network%u '' 'Network%u Receive/Transmit Errors' 'errors/s' 'network' 'xendomain.errors_network' line %u %d %s %s\n"
642 , type
643 , network
644 , network
@@ -652,7 +652,7 @@ static void print_domain_network_errors_chart_definition(char *type, unsigned in
652 }
653
654 static void print_domain_network_drops_chart_definition(char *type, unsigned int network, int obsolete_flag) {
655 - printf("CHART %s.drops_network%u '' 'Network%u Receive/Transmit Drops' 'drops/s' 'network' 'xendomain.drops_network' line %d %d %s %s\n"
655 + printf("CHART %s.drops_network%u '' 'Network%u Receive/Transmit Drops' 'drops/s' 'network' 'xendomain.drops_network' line %u %d %s %s\n"
656 , type
657 , network
658 , network
@@ -808,7 +808,7 @@ static void xenstat_send_domain_metrics() {
808 if(unlikely(vbd_m->oo_req_chart_generated
809 || vbd_m->requests_chart_generated
810 || vbd_m->sectors_chart_generated)) {
811 - if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: mark charts as obsolete for vbd %d, domain '%s', id %d, uuid %s\n", vbd_m->id, d->name, d->id, d->uuid);
811 + if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: mark charts as obsolete for vbd %u, domain '%s', id %u, uuid %s\n", vbd_m->id, d->name, d->id, d->uuid);
812 print_domain_vbd_oo_chart_definition(type, vbd_m->id, CHART_IS_OBSOLETE);
813 print_domain_vbd_requests_chart_definition(type, vbd_m->id, CHART_IS_OBSOLETE);
814 print_domain_vbd_sectors_chart_definition(type, vbd_m->id, CHART_IS_OBSOLETE);
@@ -895,7 +895,7 @@ static void xenstat_send_domain_metrics() {
895 || network_m->packets_chart_generated
896 || network_m->errors_chart_generated
897 || network_m->drops_chart_generated))
898 - if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: mark charts as obsolete for network %d, domain '%s', id %d, uuid %s\n", network_m->id, d->name, d->id, d->uuid);
898 + if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: mark charts as obsolete for network %u, domain '%s', id %u, uuid %s\n", network_m->id, d->name, d->id, d->uuid);
899 print_domain_network_bytes_chart_definition(type, network_m->id, CHART_IS_OBSOLETE);
900 print_domain_network_packets_chart_definition(type, network_m->id, CHART_IS_OBSOLETE);
901 print_domain_network_errors_chart_definition(type, network_m->id, CHART_IS_OBSOLETE);
@@ -908,7 +908,7 @@ static void xenstat_send_domain_metrics() {
908 }
909 }
910 else{
911 - if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: mark charts as obsolete for domain '%s', id %d, uuid %s\n", d->name, d->id, d->uuid);
911 + if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: mark charts as obsolete for domain '%s', id %u, uuid %s\n", d->name, d->id, d->uuid);
912 print_domain_states_chart_definition(type, CHART_IS_OBSOLETE);
913 print_domain_cpu_chart_definition(type, CHART_IS_OBSOLETE);
914 print_domain_vcpu_chart_definition(type, d, CHART_IS_OBSOLETE);
@@ -1006,12 +1006,16 @@ int main(int argc, char **argv) {
1006
1007 if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: calling xenstat_init()\n");
1008 xhandle = xenstat_init();
1009 - if (xhandle == NULL)
1009 + if (xhandle == NULL) {
1010 error("XENSTAT: failed to initialize xenstat library.");
1011 + return 1;
1012 + }
1013
1014 if(unlikely(debug)) fprintf(stderr, "xenstat.plugin: calling libxl_ctx_alloc()\n");
1015 if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, NULL)) {
1016 error("XENSTAT: failed to initialize xl context.");
1017 + xenstat_uninit(xhandle);
1018 + return 1;
1019 }
1020 libxl_dominfo_init(&info);
1021
@@ -1062,4 +1066,6 @@ int main(int argc, char **argv) {
1066 libxl_ctx_free(ctx);
1067 xenstat_uninit(xhandle);
1068 info("XENSTAT process exiting");
1069 +
1070 + return 0;
1071 }