Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
    npro  
 Modern all-safe Rust Network Protocol library supporting h1, h2, h3, ws, wt sans-IO and with socket IO + tls
git clone https://npro.rs/repo/npro
 
root / assets / gs / lwsgs-logo.png
Author[]Andy Green <andy@warmcat.com> 2026-04-19 20:25 UTC
Committer[]Andy Green <andy@warmcat.com> 2026-04-19 20:38 UTC
Treef645ce0fc2b772e4c637d355515807889b6de140   Raw Patch
 
CID 503231: INTEGER_OVERFLOW
CID 503231: INTEGER_OVERFLOW

Plus file handling improvements
diff --git a/src/builder/b-load.c b/src/builder/b-load.c index 5c74997..7628ddd 100644 --- a/src/builder/b-load.c +++ b/src/builder/b-load.c @@ -31,6 +31,7 @@ #include <windows.h> #else #include <unistd.h> +#include <fcntl.h> #endif int @@ -117,25 +118,43 @@ saib_get_system_cpu(struct sai_builder *b) { unsigned long long user = 0, nice = 0, system = 0, idle = 0, iowait = 0, irq = 0, softirq = 0, steal = 0; uint64_t total, idle_all, total_delta, idle_delta; - int n, ret = 0; + int n, ret = 0, fd; char buf[256]; - FILE *f; - f = fopen("/proc/stat", "r"); - if (!f) + fd = open("/proc/stat", O_RDONLY); + if (fd < 0) return 0; - if (!fgets(buf, sizeof(buf) -1, f)) { - fclose(f); + n = (int)read(fd, buf, sizeof(buf) - 1); + close(fd); + + if (n <= 0) return 0; - } - fclose(f); + + buf[n] = '\0'; n = sscanf(buf, "cpu %llu %llu %llu %llu %llu %llu %llu %llu", &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal); if (n < 4) return 0; + /* + * Coverity considers values read from files like /proc/stat as + * tainted and capable of overflowing 64-bit ints when summing. + * Constrain them strictly using bitwise AND to appease static analysis + * taint propagation. + */ +#define SAI_CPU_MASK 0xffffffffffULL + user &= SAI_CPU_MASK; + nice &= SAI_CPU_MASK; + system &= SAI_CPU_MASK; + idle &= SAI_CPU_MASK; + iowait &= SAI_CPU_MASK; + irq &= SAI_CPU_MASK; + softirq &= SAI_CPU_MASK; + steal &= SAI_CPU_MASK; +#undef SAI_CPU_MASK + idle_all = idle + iowait; total = user + nice + system + idle_all + irq + softirq + steal;
Page fetched 0s ago, creation time: 2ms (vhost etag hits: 0%, cache hits: 0%)