]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Get new entropy on each attempt __gen_tempname (BZ #15813)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 25 Jul 2019 14:22:17 +0000 (11:22 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 1 Aug 2019 11:09:08 +0000 (08:09 -0300)
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.

ChangeLog
sysdeps/posix/tempname.c

index cdb9e14881715711685d5f16515ec1f76729c82b..17918a129c0ac73a9c828aec6d40c39d2706e212 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-08-01  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+       [BZ #15813]
+       sysdeps/posix/tempname.c (__gen_tempname): get entropy on each
+       attempt.
+
 2019-08-01  Carlos O'Donell <carlos@redhat.com>
 
        * version.h (RELEASE): Set to "stable".
index de346949b2bef88fd53b0a9183d3f1505b328430..310df3c4ca04dba4e91a167573c3672cbc5d1c4e 100644 (file)
@@ -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];