aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-07-25 11:22:17 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-08-01 08:09:08 -0300
commite1df30fbc2e2167a982c0e77a7ebee28f4dd0800 (patch)
tree3803d6ed28b9ddbcf64baf3f46565489ee8484d0 /sysdeps
parent0b8c2f95df589c9c1ad25312475049bcc7ed7059 (diff)
downloadglibc-e1df30fbc2e2167a982c0e77a7ebee28f4dd0800.tar
glibc-e1df30fbc2e2167a982c0e77a7ebee28f4dd0800.tar.gz
glibc-e1df30fbc2e2167a982c0e77a7ebee28f4dd0800.tar.bz2
glibc-e1df30fbc2e2167a982c0e77a7ebee28f4dd0800.zip
Get new entropy on each attempt __gen_tempname (BZ #15813)
This is missing bit for fully fix BZ#15813 (the other two were fixed by 359653aaacad463). Checked on x86_64-linux-gnu. [BZ #15813] sysdeps/posix/tempname.c (__gen_tempname): get entrypy on each attempt.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/posix/tempname.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index de346949b2..310df3c4ca 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -186,7 +186,6 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
{
int len;
char *XXXXXX;
- uint64_t value;
unsigned int count;
int fd = -1;
int save_errno = errno;
@@ -218,13 +217,13 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
/* This is where the Xs start. */
XXXXXX = &tmpl[len - 6 - suffixlen];
- /* Get some more or less random data. */
- RANDOM_BITS (value);
- value ^= (uint64_t)__getpid () << 32;
-
- for (count = 0; count < attempts; value += 7777, ++count)
+ uint64_t pid = (uint64_t) __getpid () << 32;
+ for (count = 0; count < attempts; ++count)
{
- uint64_t v = value;
+ uint64_t v;
+ /* Get some more or less random data. */
+ RANDOM_BITS (v);
+ v ^= pid;
/* Fill in the random bits. */
XXXXXX[0] = letters[v % 62];