@cryptotaxi247 / netdata-1 / commits / 09769bfb3

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) {