86 lines
2.7 KiB
Diff
86 lines
2.7 KiB
Diff
|
|
From ba57a3d8c0c26b3792b2daa191a6e76fa546a25d Mon Sep 17 00:00:00 2001
|
||
|
|
From: zhongtao <zhongtao17@huawei.com>
|
||
|
|
Date: Sat, 25 Nov 2023 22:25:03 +1400
|
||
|
|
Subject: [PATCH 163/181] use RAND_bytes to replace /dev/urandom
|
||
|
|
|
||
|
|
Signed-off-by: zhongtao <zhongtao17@huawei.com>
|
||
|
|
---
|
||
|
|
src/utils/cutils/utils.c | 25 +++++++++----------------
|
||
|
|
src/utils/cutils/utils.h | 2 ++
|
||
|
|
2 files changed, 11 insertions(+), 16 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/utils/cutils/utils.c b/src/utils/cutils/utils.c
|
||
|
|
index a994731d..46a478b6 100644
|
||
|
|
--- a/src/utils/cutils/utils.c
|
||
|
|
+++ b/src/utils/cutils/utils.c
|
||
|
|
@@ -37,6 +37,7 @@
|
||
|
|
#include <termios.h> // IWYU pragma: keep
|
||
|
|
#include <strings.h>
|
||
|
|
#include <time.h>
|
||
|
|
+#include <openssl/rand.h>
|
||
|
|
|
||
|
|
#include "isula_libutils/log.h"
|
||
|
|
#include "isula_libutils/json_common.h"
|
||
|
|
@@ -1274,37 +1275,29 @@ void util_usleep_nointerupt(unsigned long usec)
|
||
|
|
|
||
|
|
int util_generate_random_str(char *id, size_t len)
|
||
|
|
{
|
||
|
|
- int fd = -1;
|
||
|
|
- int num = 0;
|
||
|
|
+#define MAX_RANDOM_BYTES_LEN 100
|
||
|
|
size_t i;
|
||
|
|
- const int m = 256;
|
||
|
|
+ unsigned char random_bytes[MAX_RANDOM_BYTES_LEN] = { 0 };
|
||
|
|
+ len = len / 2;
|
||
|
|
|
||
|
|
- if (id == NULL) {
|
||
|
|
+ if (id == NULL || len > MAX_RANDOM_BYTES_LEN) {
|
||
|
|
+ ERROR("Invalid id or len");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
- len = len / 2;
|
||
|
|
- fd = open("/dev/urandom", O_RDONLY);
|
||
|
|
- if (fd == -1) {
|
||
|
|
- ERROR("Failed to open /dev/urandom");
|
||
|
|
+ if (RAND_bytes((unsigned char *)random_bytes, len) != 1) {
|
||
|
|
+ ERROR("Failed to get random bytes by RAND_bytes");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
for (i = 0; i < len; i++) {
|
||
|
|
int nret;
|
||
|
|
- if (util_read_nointr(fd, &num, sizeof(int)) < 0) {
|
||
|
|
- ERROR("Failed to read urandom value");
|
||
|
|
- close(fd);
|
||
|
|
- return -1;
|
||
|
|
- }
|
||
|
|
- unsigned char rs = (unsigned char)(num % m);
|
||
|
|
+ unsigned char rs = random_bytes[i];
|
||
|
|
nret = snprintf((id + i * 2), ((len - i) * 2 + 1), "%02x", (unsigned int)rs);
|
||
|
|
if (nret < 0 || (size_t)nret >= ((len - i) * 2 + 1)) {
|
||
|
|
ERROR("Failed to snprintf random string");
|
||
|
|
- close(fd);
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
- close(fd);
|
||
|
|
id[i * 2] = '\0';
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
diff --git a/src/utils/cutils/utils.h b/src/utils/cutils/utils.h
|
||
|
|
index bb510062..5a1592fd 100644
|
||
|
|
--- a/src/utils/cutils/utils.h
|
||
|
|
+++ b/src/utils/cutils/utils.h
|
||
|
|
@@ -375,6 +375,8 @@ int util_input_noecho(char *buf, size_t maxlen);
|
||
|
|
|
||
|
|
void util_usleep_nointerupt(unsigned long usec);
|
||
|
|
|
||
|
|
+// id : random string, notice: the length of id needs to be len + 1
|
||
|
|
+// len : the length of the random string that needs to be generated, notice: len needs to be an even number
|
||
|
|
int util_generate_random_str(char *id, size_t len);
|
||
|
|
|
||
|
|
int util_check_inherited_exclude_fds(bool closeall, int *fds_to_ignore, size_t len_fds);
|
||
|
|
--
|
||
|
|
2.42.0
|
||
|
|
|