[Spice-devel] [linux/vd-agent v1 3/7] covscan: check return value of fprintf

Victor Toso victortoso at redhat.com
Fri Jul 12 09:12:38 UTC 2019


From: Victor Toso <me at victortoso.com>

 | Error: CHECKED_RETURN (CWE-252):
 | spice-vdagent-0.19.0/src/vdagentd/vdagentd.c:999: check_return: Calling "fprintf" without checking return value (as is done elsewhere 29 out of 30 times).
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:95: example_assign: Example 1: Assigning: "r" = return value from "fprintf(f, "# xorg.conf generated by spice-vdagentd\n")".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:95: example_checked: Example 1 (cont.): "r" has its value checked in "r < 0".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:96: example_assign: Example 2: Assigning: "r" = return value from "fprintf(f, "# generated from monitor info provided by the client\n\n")".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:96: example_checked: Example 2 (cont.): "r" has its value checked in "r < 0".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:99: example_assign: Example 3: Assigning: "r" = return value from "fprintf(f, "# Client has only 1 monitor\n")".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:99: example_checked: Example 3 (cont.): "r" has its value checked in "r < 0".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:100: example_assign: Example 4: Assigning: "r" = return value from "fprintf(f, "# This works best with no xorg.conf, leaving xorg.conf empty\n")".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:100: example_checked: Example 4 (cont.): "r" has its value checked in "r < 0".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:106: example_assign: Example 5: Assigning: "r" = return value from "fprintf(f, "Section \"ServerFlags\"\n")".
 | spice-vdagent-0.19.0/src/vdagentd/xorg-conf.c:106: example_checked: Example 5 (cont.): "r" has its value checked in "r < 0".
 | #  997|           pidfile = fopen(pidfilename, "w");
 | #  998|           if (pidfile) {
 | #  999|->             fprintf(pidfile, "%d\n", (int)getpid());
 | # 1000|               fclose(pidfile);
 | # 1001|           }

Signed-off-by: Victor Toso <victortoso at redhat.com>
---
 src/vdagentd/vdagentd.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
index 72a3e13..63f3a12 100644
--- a/src/vdagentd/vdagentd.c
+++ b/src/vdagentd/vdagentd.c
@@ -996,7 +996,11 @@ static void daemonize(void)
         }
         pidfile = fopen(pidfilename, "w");
         if (pidfile) {
-            fprintf(pidfile, "%d\n", (int)getpid());
+            int pid = (int) getpid();
+            int r = fprintf(pidfile, "%d\n", pid);
+            if (r < 0) {
+                syslog(LOG_ERR, "Failure to write pid %d to file %s", pid, pidfilename);
+            }
             fclose(pidfile);
         }
         break;
-- 
2.21.0



More information about the Spice-devel mailing list