summaryrefslogtreecommitdiffstats
path: root/source/l/glibc/patches/glibc.e1df30fbc2e2167a982c0e77a7ebee28f4dd0800.patch
blob: d5dabb4a42252a4dfc26d3bfe5726f3f53fb3f87 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
From e1df30fbc2e2167a982c0e77a7ebee28f4dd0800 Mon Sep 17 00:00:00 2001
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Thu, 25 Jul 2019 11:22:17 -0300
Subject: [PATCH] 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.

diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index de34694..310df3c 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];
-- 
2.9.3