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
}