summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2024-01-16 17:49:29 -0600
committerJoel Sherrill <joel@rtems.org>2024-01-22 09:56:40 -0600
commit07ee157e5e4ab567e1a926fcdd6eae4402b6bdd7 (patch)
tree6fdebd1990f6a3efa8a173e71fc721386cbd13dd
parentcpukit/libmisc/uuid: Check for invalid FD (diff)
downloadrtems-07ee157e5e4ab567e1a926fcdd6eae4402b6bdd7.tar.bz2
cpukit/libmisc: Cast getpid() before shifting
Cast getpid() before shifting to avoid truncation of upper bits before the 64bit XOR occurs.
-rw-r--r--cpukit/libmisc/uuid/gen_uuid.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/cpukit/libmisc/uuid/gen_uuid.c b/cpukit/libmisc/uuid/gen_uuid.c
index 9b8dbeaa2e..5601c887c9 100644
--- a/cpukit/libmisc/uuid/gen_uuid.c
+++ b/cpukit/libmisc/uuid/gen_uuid.c
@@ -171,7 +171,12 @@ static int get_random_fd(void)
fcntl(fd, F_SETFD, i | FD_CLOEXEC);
}
#endif
+#ifdef __rtems__
+ srand((((time_t)getpid()) << ((sizeof(pid_t)*CHAR_BIT)>>1)) ^ getuid()
+ ^ tv.tv_sec ^ tv.tv_usec);
+#else
srand((getpid() << ((sizeof(pid_t)*CHAR_BIT)>>1)) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
+#endif
#ifdef DO_JRAND_MIX
jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);
jrand_seed[1] = getppid() ^ (tv.tv_usec & 0xFFFF);