lgtm workaround for false-positives; https://github.com/Semmle/ql/issues/199
Costa Tsaousis (ktsaou) committed
Sep 17, 2018 at 17:02 UTC
09769bfb3a210913c95332c34aaa2b1837d1c970
4 files changed
+64
-59
src/cgroup-network.c
+7
-6
@@ -459,17 +459,18 @@ void call_the_helper(pid_t pid, const char *cgroup) {
459
if(setresuid(0, 0, 0) == -1)
460
error("setresuid(0, 0, 0) failed.");
461
462
- char buffer[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
462
+ char command[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
463
if(cgroup)
464
- snprintfz(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, "exec " PLUGINS_DIR "/cgroup-network-helper.sh --cgroup '%s'", cgroup);
464
+ snprintfz(command, CGROUP_NETWORK_INTERFACE_MAX_LINE, "exec " PLUGINS_DIR "/cgroup-network-helper.sh --cgroup '%s'", cgroup);
465
else
466
- snprintfz(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, "exec " PLUGINS_DIR "/cgroup-network-helper.sh --pid %d", pid);
466
+ snprintfz(command, CGROUP_NETWORK_INTERFACE_MAX_LINE, "exec " PLUGINS_DIR "/cgroup-network-helper.sh --pid %d", pid);
467
468
- info("running: %s", buffer);
468
+ info("running: %s", command);
469
470
pid_t cgroup_pid;
471
- FILE *fp = mypopene(buffer, &cgroup_pid, environment);
471
+ FILE *fp = mypopene(command, &cgroup_pid, environment);
472
if(fp) {
473
+ char buffer[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
474
char *s;
475
while((s = fgets(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, fp))) {
476
trim(s);
@@ -490,7 +491,7 @@ void call_the_helper(pid_t pid, const char *cgroup) {
491
mypclose(fp, cgroup_pid);
492
}
493
else
493
- error("cannot execute cgroup-network helper script: %s", buffer);
494
+ error("cannot execute cgroup-network helper script: %s", command);
495
}
496
497
int is_valid_path_symbol(char c) {
src/health.c
+3
-3
@@ -179,9 +179,9 @@ static inline void health_alarm_execute(RRDHOST *host, ALARM_ENTRY *ae) {
179
error("HEALTH: Cannot popen(\"%s\", \"r\").", command_to_run);
180
goto done;
181
}
182
- debug(D_HEALTH, "HEALTH reading from command");
183
- char *s = fgets(command_to_run, FILENAME_MAX, fp);
184
- (void)s;
182
+ debug(D_HEALTH, "HEALTH reading from command (discarding command's output)");
183
+ char buffer[100 + 1];
184
+ while(fgets(buffer, 100, fp) != NULL) ;
185
ae->exec_code = mypclose(fp, command_pid);
186
debug(D_HEALTH, "done executing command - returned with code %d", ae->exec_code);
187
src/plugin_tc.c
+8
-7
@@ -858,7 +858,7 @@ void *tc_main(void *ptr) {
858
859
struct rusage thread;
860
861
- char buffer[TC_LINE_MAX+1] = "";
861
+ char command[FILENAME_MAX + 1];
862
char *words[PLUGINSD_MAX_WORDS] = { NULL };
863
864
uint32_t BEGIN_HASH = simple_hash("BEGIN");
@@ -877,23 +877,24 @@ void *tc_main(void *ptr) {
877
#endif
878
uint32_t first_hash;
879
880
- snprintfz(buffer, TC_LINE_MAX, "%s/tc-qos-helper.sh", netdata_configured_plugins_dir);
881
- char *tc_script = config_get("plugin:tc", "script to run to get tc values", buffer);
880
+ snprintfz(command, TC_LINE_MAX, "%s/tc-qos-helper.sh", netdata_configured_plugins_dir);
881
+ char *tc_script = config_get("plugin:tc", "script to run to get tc values", command);
882
883
while(!netdata_exit) {
884
FILE *fp;
885
struct tc_device *device = NULL;
886
struct tc_class *class = NULL;
887
888
- snprintfz(buffer, TC_LINE_MAX, "exec %s %d", tc_script, localhost->rrd_update_every);
889
- debug(D_TC_LOOP, "executing '%s'", buffer);
888
+ snprintfz(command, TC_LINE_MAX, "exec %s %d", tc_script, localhost->rrd_update_every);
889
+ debug(D_TC_LOOP, "executing '%s'", command);
890
891
- fp = mypopen(buffer, (pid_t *)&tc_child_pid);
891
+ fp = mypopen(command, (pid_t *)&tc_child_pid);
892
if(unlikely(!fp)) {
893
- error("TC: Cannot popen(\"%s\", \"r\").", buffer);
893
+ error("TC: Cannot popen(\"%s\", \"r\").", command);
894
goto cleanup;
895
}
896
897
+ char buffer[TC_LINE_MAX+1] = "";
898
while(fgets(buffer, TC_LINE_MAX, fp) != NULL) {
899
if(unlikely(netdata_exit)) break;
900
src/sys_fs_cgroup.c
+46
-43
@@ -752,53 +752,55 @@ static inline void read_cgroup_network_interfaces(struct cgroup *cg) {
752
debug(D_CGROUP, "looking for the network interfaces of cgroup '%s' with chart id '%s' and title '%s'", cg->id, cg->chart_id, cg->chart_title);
753
754
pid_t cgroup_pid;
755
- char buffer[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
755
+ char command[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
756
757
- snprintfz(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, "exec %s --cgroup '%s%s'", cgroups_network_interface_script, cgroup_cpuacct_base, cg->id);
757
+ snprintfz(command, CGROUP_NETWORK_INTERFACE_MAX_LINE, "exec %s --cgroup '%s%s'", cgroups_network_interface_script, cgroup_cpuacct_base, cg->id);
758
759
- debug(D_CGROUP, "executing command '%s' for cgroup '%s'", buffer, cg->id);
760
- FILE *fp = mypopen(buffer, &cgroup_pid);
761
- if(fp) {
762
- char *s;
763
- while((s = fgets(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, fp))) {
764
- trim(s);
759
+ debug(D_CGROUP, "executing command '%s' for cgroup '%s'", command, cg->id);
760
+ FILE *fp = mypopen(command, &cgroup_pid);
761
+ if(!fp) {
762
+ error("CGROUP: cannot popen(\"%s\", \"r\").", command);
763
+ return;
764
+ }
765
766
- if(*s && *s != '\n') {
767
- char *t = s;
768
- while(*t && *t != ' ') t++;
769
- if(*t == ' ') {
770
- *t = '\0';
771
- t++;
772
- }
766
+ char *s;
767
+ char buffer[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
768
+ while((s = fgets(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, fp))) {
769
+ trim(s);
770
+
771
+ if(*s && *s != '\n') {
772
+ char *t = s;
773
+ while(*t && *t != ' ') t++;
774
+ if(*t == ' ') {
775
+ *t = '\0';
776
+ t++;
777
+ }
778
774
- if(!*s) {
775
- error("CGROUP: empty host interface returned by script");
776
- continue;
777
- }
779
+ if(!*s) {
780
+ error("CGROUP: empty host interface returned by script");
781
+ continue;
782
+ }
783
779
- if(!*t) {
780
- error("CGROUP: empty guest interface returned by script");
781
- continue;
782
- }
784
+ if(!*t) {
785
+ error("CGROUP: empty guest interface returned by script");
786
+ continue;
787
+ }
788
784
- struct cgroup_network_interface *i = callocz(1, sizeof(struct cgroup_network_interface));
785
- i->host_device = strdupz(s);
786
- i->container_device = strdupz(t);
787
- i->next = cg->interfaces;
788
- cg->interfaces = i;
789
+ struct cgroup_network_interface *i = callocz(1, sizeof(struct cgroup_network_interface));
790
+ i->host_device = strdupz(s);
791
+ i->container_device = strdupz(t);
792
+ i->next = cg->interfaces;
793
+ cg->interfaces = i;
794
790
- info("CGROUP: cgroup '%s' has network interface '%s' as '%s'", cg->id, i->host_device, i->container_device);
795
+ info("CGROUP: cgroup '%s' has network interface '%s' as '%s'", cg->id, i->host_device, i->container_device);
796
792
- // register a device rename to proc_net_dev.c
793
- netdev_rename_device_add(i->host_device, i->container_device, cg->chart_id);
794
- }
797
+ // register a device rename to proc_net_dev.c
798
+ netdev_rename_device_add(i->host_device, i->container_device, cg->chart_id);
799
}
796
-
797
- mypclose(fp, cgroup_pid);
798
- // debug(D_CGROUP, "closed command for cgroup '%s'", cg->id);
800
}
800
- else
801
- error("CGROUP: cannot popen(\"%s\", \"r\").", buffer);
801
+
802
+ mypclose(fp, cgroup_pid);
803
+ // debug(D_CGROUP, "closed command for cgroup '%s'", cg->id);
804
}
805
806
static inline void free_cgroup_network_interfaces(struct cgroup *cg) {
@@ -846,14 +848,15 @@ static inline void cgroup_get_chart_name(struct cgroup *cg) {
848
debug(D_CGROUP, "looking for the name of cgroup '%s' with chart id '%s' and title '%s'", cg->id, cg->chart_id, cg->chart_title);
849
850
pid_t cgroup_pid;
849
- char buffer[CGROUP_CHARTID_LINE_MAX + 1];
851
+ char command[CGROUP_CHARTID_LINE_MAX + 1];
852
851
- snprintfz(buffer, CGROUP_CHARTID_LINE_MAX, "exec %s '%s' '%s'", cgroups_rename_script, cg->chart_id, cg->id);
853
+ snprintfz(command, CGROUP_CHARTID_LINE_MAX, "exec %s '%s' '%s'", cgroups_rename_script, cg->chart_id, cg->id);
854
853
- debug(D_CGROUP, "executing command \"%s\" for cgroup '%s'", buffer, cg->id);
854
- FILE *fp = mypopen(buffer, &cgroup_pid);
855
+ debug(D_CGROUP, "executing command \"%s\" for cgroup '%s'", command, cg->id);
856
+ FILE *fp = mypopen(command, &cgroup_pid);
857
if(fp) {
856
- // debug(D_CGROUP, "reading from command '%s' for cgroup '%s'", buffer, cg->id);
858
+ // debug(D_CGROUP, "reading from command '%s' for cgroup '%s'", command, cg->id);
859
+ char buffer[CGROUP_CHARTID_LINE_MAX + 1];
860
char *s = fgets(buffer, CGROUP_CHARTID_LINE_MAX, fp);
861
// debug(D_CGROUP, "closing command for cgroup '%s'", cg->id);
862
mypclose(fp, cgroup_pid);
@@ -873,7 +876,7 @@ static inline void cgroup_get_chart_name(struct cgroup *cg) {
876
}
877
}
878
else
876
- error("CGROUP: cannot popen(\"%s\", \"r\").", buffer);
879
+ error("CGROUP: cannot popen(\"%s\", \"r\").", command);
880
}
881
882
static inline struct cgroup *cgroup_add(const char *id) {