Vladis Dronov c40c82e
From 2d244c6b5aea8f1a8e70307540d9d95b8111a242 Mon Sep 17 00:00:00 2001
Vladis Dronov c40c82e
From: Vladis Dronov <vdronov@redhat.com>
Vladis Dronov c40c82e
Date: Mon, 14 Jun 2021 14:04:27 +0200
Vladis Dronov c40c82e
Subject: Small bug and warning fixes per covscan report
Vladis Dronov c40c82e
Vladis Dronov c40c82e
- Fix a strncpy() bug.
Vladis Dronov c40c82e
Vladis Dronov c40c82e
- Remove unused variables.
Vladis Dronov c40c82e
Vladis Dronov c40c82e
- A small formatting fix.
Vladis Dronov c40c82e
Vladis Dronov c40c82e
- Fix signedness warnings.
Vladis Dronov c40c82e
Vladis Dronov c40c82e
- Add parenthesis to definitions of CHUNK_SIZE.
Vladis Dronov c40c82e
Vladis Dronov c40c82e
- Adjust default_watermark() so wm is set to a default value in all cases.
Vladis Dronov c40c82e
  Also add logging the same way it was done in init_kernel_rng().
Vladis Dronov c40c82e
Vladis Dronov c40c82e
Signed-off-by: Vladis Dronov <vdronov@redhat.com>
Vladis Dronov c40c82e
---
Vladis Dronov c40c82e
 rngd_darn.c   |  4 ++--
Vladis Dronov c40c82e
 rngd_jitter.c |  3 +--
Vladis Dronov c40c82e
 rngd_linux.c  | 31 ++++++++++++++++++++++---------
Vladis Dronov c40c82e
 rngd_rdrand.c |  2 --
Vladis Dronov c40c82e
 rngd_rndr.c   |  2 +-
Vladis Dronov c40c82e
 rngd_rtlsdr.c |  6 +++---
Vladis Dronov c40c82e
 stats.c       |  2 +-
Vladis Dronov c40c82e
 7 files changed, 30 insertions(+), 20 deletions(-)
Vladis Dronov c40c82e
Vladis Dronov c40c82e
diff --git a/rngd_darn.c b/rngd_darn.c
Vladis Dronov c40c82e
index bc8edec..5254195 100644
Vladis Dronov c40c82e
--- a/rngd_darn.c
Vladis Dronov c40c82e
+++ b/rngd_darn.c
Vladis Dronov c40c82e
@@ -46,9 +46,9 @@ static uint64_t get_darn();
Vladis Dronov c40c82e
 static int refill_rand(struct rng *ent_src, bool allow_reinit);
Vladis Dronov c40c82e
 static size_t copy_avail_rand_to_buf(unsigned char *buf, size_t size, size_t copied);
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
-#define CHUNK_SIZE AES_BLOCK * 8
Vladis Dronov c40c82e
+#define CHUNK_SIZE		(AES_BLOCK*8)
Vladis Dronov c40c82e
 #define RDRAND_ROUNDS		512		/* 512:1 data reduction */
Vladis Dronov c40c82e
-#define THRESH_BITS 14
Vladis Dronov c40c82e
+#define THRESH_BITS		14
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 /* ossl AES context */
Vladis Dronov c40c82e
 static struct ossl_aes_ctx *ossl_ctx;
Vladis Dronov c40c82e
diff --git a/rngd_jitter.c b/rngd_jitter.c
Vladis Dronov c40c82e
index b68c791..7403c02 100644
Vladis Dronov c40c82e
--- a/rngd_jitter.c
Vladis Dronov c40c82e
+++ b/rngd_jitter.c
Vladis Dronov c40c82e
@@ -128,7 +128,7 @@ int pipefds[2];
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 unsigned char *aes_buf;
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
-static char key[AES_BLOCK];
Vladis Dronov c40c82e
+static unsigned char key[AES_BLOCK];
Vladis Dronov c40c82e
 static unsigned char iv_buf[CHUNK_SIZE] __attribute__((aligned(128)));
Vladis Dronov c40c82e
 static struct ossl_aes_ctx *ossl_ctx;
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
@@ -322,7 +322,6 @@ int validate_jitter_options(struct rng *ent_src)
Vladis Dronov c40c82e
 	int delay = ent_src->rng_options[JITTER_OPT_RETRY_DELAY].int_val;
Vladis Dronov c40c82e
 	int rcount = ent_src->rng_options[JITTER_OPT_RETRY_COUNT].int_val;
Vladis Dronov c40c82e
 	int soft_timer = ent_src->rng_options[JITTER_OPT_FORCE_INT_TIMER].int_val;
Vladis Dronov c40c82e
-	int num_threads = ent_src->rng_options[JITTER_OPT_THREADS].int_val;
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 	/* Need at least one thread to do this work */
Vladis Dronov c40c82e
 	if (!threads) {
Vladis Dronov c40c82e
diff --git a/rngd_linux.c b/rngd_linux.c
Vladis Dronov c40c82e
index cf4fcdf..c52c62d 100644
Vladis Dronov c40c82e
--- a/rngd_linux.c
Vladis Dronov c40c82e
+++ b/rngd_linux.c
Vladis Dronov c40c82e
@@ -56,22 +56,35 @@ extern int kent_pool_size;
Vladis Dronov c40c82e
 /*
Vladis Dronov c40c82e
  * Get the default watermark
Vladis Dronov c40c82e
  */
Vladis Dronov c40c82e
+
Vladis Dronov c40c82e
+#define DEFAULT_WATERMARK_GUESS 4096
Vladis Dronov c40c82e
+
Vladis Dronov c40c82e
 int default_watermark(void)
Vladis Dronov c40c82e
 {
Vladis Dronov c40c82e
 	FILE *f;
Vladis Dronov c40c82e
-	unsigned int wm;	/* Default guess */
Vladis Dronov c40c82e
+	unsigned int wm;
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 	f = fopen("/proc/sys/kernel/random/poolsize", "r");
Vladis Dronov c40c82e
-	if (!f)
Vladis Dronov c40c82e
+	if (!f) {
Vladis Dronov c40c82e
+		wm = DEFAULT_WATERMARK_GUESS;
Vladis Dronov c40c82e
+		message(LOG_DAEMON|LOG_ERR, "can't open /proc/sys/kernel/random/poolsize: %s",
Vladis Dronov c40c82e
+			strerror(errno));
Vladis Dronov c40c82e
 		goto err;
Vladis Dronov c40c82e
-	/*
Vladis Dronov c40c82e
-	 * Default to 4096 if fscanf fails
Vladis Dronov c40c82e
-	 */
Vladis Dronov c40c82e
-	if(fscanf(f,"%u", &wm) < 1)
Vladis Dronov c40c82e
-		wm = 4096;
Vladis Dronov c40c82e
+	}
Vladis Dronov c40c82e
+
Vladis Dronov c40c82e
+	/* Use DEFAULT_WATERMARK_GUESS if fscanf fails */
Vladis Dronov c40c82e
+	if(fscanf(f,"%u", &wm) < 1) {
Vladis Dronov c40c82e
+		wm = DEFAULT_WATERMARK_GUESS;
Vladis Dronov c40c82e
+		message(LOG_DAEMON|LOG_ERR, "can't read /proc/sys/kernel/random/poolsize: %s",
Vladis Dronov c40c82e
+			strerror(errno));
Vladis Dronov c40c82e
+	}
Vladis Dronov c40c82e
+
Vladis Dronov c40c82e
+err:
Vladis Dronov c40c82e
 	kent_pool_size = wm;
Vladis Dronov c40c82e
 	wm = wm*3/4;
Vladis Dronov c40c82e
-err:
Vladis Dronov c40c82e
+	message(LOG_DAEMON|LOG_ERR, "kernel entropy pool size: %d pool watermark: %d",
Vladis Dronov c40c82e
+		kent_pool_size, wm);
Vladis Dronov c40c82e
+
Vladis Dronov c40c82e
 	if (f)
Vladis Dronov c40c82e
 		fclose(f);
Vladis Dronov c40c82e
 	return wm;
Vladis Dronov c40c82e
@@ -153,7 +166,7 @@ int random_add_entropy(void *buf, size_t size)
Vladis Dronov c40c82e
 	} else
Vladis Dronov c40c82e
 		write(random_fd, buf, size);
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
-	return ent->ent_count; 
Vladis Dronov c40c82e
+	return ent->ent_count;
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 }
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
diff --git a/rngd_rdrand.c b/rngd_rdrand.c
Vladis Dronov c40c82e
index cba27a9..caa9d05 100644
Vladis Dronov c40c82e
--- a/rngd_rdrand.c
Vladis Dronov c40c82e
+++ b/rngd_rdrand.c
Vladis Dronov c40c82e
@@ -243,8 +243,6 @@ int init_drng_entropy_source(struct rng *ent_src)
Vladis Dronov c40c82e
 	const uint32_t features_ebx7_rdseed = 1 << 18;
Vladis Dronov c40c82e
 	uint32_t max_cpuid_leaf;
Vladis Dronov c40c82e
 	unsigned char xkey[AES_BLOCK];	/* Material to XOR into the key */
Vladis Dronov c40c82e
-	int fd;
Vladis Dronov c40c82e
-	int i;
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 	if (!x86_has_cpuid())
Vladis Dronov c40c82e
 		return 1;	/* No CPUID instruction */
Vladis Dronov c40c82e
diff --git a/rngd_rndr.c b/rngd_rndr.c
Vladis Dronov c40c82e
index 176ce90..79bf2ce 100644
Vladis Dronov c40c82e
--- a/rngd_rndr.c
Vladis Dronov c40c82e
+++ b/rngd_rndr.c
Vladis Dronov c40c82e
@@ -47,7 +47,7 @@ static struct ossl_aes_ctx *ossl_ctx;
Vladis Dronov c40c82e
 static unsigned char key[AES_BLOCK];
Vladis Dronov c40c82e
 static unsigned char iv_buf[AES_BLOCK];
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
-#define CHUNK_SIZE AES_BLOCK * 8
Vladis Dronov c40c82e
+#define CHUNK_SIZE (AES_BLOCK*8)
Vladis Dronov c40c82e
 static unsigned char aes_buf[CHUNK_SIZE];
Vladis Dronov c40c82e
 static size_t aes_buf_pos;
Vladis Dronov c40c82e
 #define REKEY_BITS 8
Vladis Dronov c40c82e
diff --git a/rngd_rtlsdr.c b/rngd_rtlsdr.c
Vladis Dronov c40c82e
index 949c8b0..5371905 100644
Vladis Dronov c40c82e
--- a/rngd_rtlsdr.c
Vladis Dronov c40c82e
+++ b/rngd_rtlsdr.c
Vladis Dronov c40c82e
@@ -21,12 +21,12 @@
Vladis Dronov c40c82e
 #include "rngd.h"
Vladis Dronov c40c82e
 #include "ossl_helpers.h"
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
-#define RAW_BUF_SZ	    4096
Vladis Dronov c40c82e
+#define RAW_BUF_SZ              4096
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
-#define CHUNK_SIZE	      (AES_BLOCK*8)   /* 8 parallel streams */
Vladis Dronov c40c82e
+#define CHUNK_SIZE              (AES_BLOCK*8)   /* 8 parallel streams */
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 static rtlsdr_dev_t *radio = NULL;
Vladis Dronov c40c82e
-static char raw_buffera[RAW_BUF_SZ];
Vladis Dronov c40c82e
+static unsigned char raw_buffera[RAW_BUF_SZ];
Vladis Dronov c40c82e
 static int freq_min;
Vladis Dronov c40c82e
 static int freq_max;
Vladis Dronov c40c82e
 static int sample_min;
Vladis Dronov c40c82e
diff --git a/stats.c b/stats.c
Vladis Dronov c40c82e
index 5c4036a..a172a35 100644
Vladis Dronov c40c82e
--- a/stats.c
Vladis Dronov c40c82e
+++ b/stats.c
Vladis Dronov c40c82e
@@ -65,7 +65,7 @@ static void scale_mult_unit(char *unit, int unitsize,
Vladis Dronov c40c82e
 	if (mult)
Vladis Dronov c40c82e
 		snprintf(unit, unitsize, "%ci%s", multchar[mult-1], baseunit);
Vladis Dronov c40c82e
 	else
Vladis Dronov c40c82e
-		strncpy(unit, baseunit, unitsize);
Vladis Dronov c40c82e
+		strncpy(unit, baseunit, unitsize-1);
Vladis Dronov c40c82e
 }
Vladis Dronov c40c82e
 
Vladis Dronov c40c82e
 /* Computes elapsed time in microseconds */
Vladis Dronov c40c82e
-- 
Vladis Dronov c40c82e
2.26.3
Vladis Dronov c40c82e