Get new entropy on each attempt __gen_tempname (BZ #15813)
Commit Message
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.
---
sysdeps/posix/tempname.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
Comments
* Adhemerval Zanella:
> + uint64_t pid = (uint64_t)__getpid () << 32;
Space after cast? Rest of the change looks okay.
Thanks,
Florian
On 29/07/2019 05:33, Florian Weimer wrote:
> * Adhemerval Zanella:
>
>> + uint64_t pid = (uint64_t)__getpid () << 32;
>
> Space after cast? Rest of the change looks okay.
Ack, changed locally.
>
> Thanks,
> Florian
>
On 7/29/19 1:55 PM, Adhemerval Zanella wrote:
>
>
> On 29/07/2019 05:33, Florian Weimer wrote:
>> * Adhemerval Zanella:
>>
>>> + uint64_t pid = (uint64_t)__getpid () << 32;
>>
>> Space after cast? Rest of the change looks okay.
>
> Ack, changed locally.
Are you OK with this waiting for 2.31 to open?
I'd like to minimize the changes to those we're making for
gcc 10 compatibility.
On 29/07/2019 15:52, Carlos O'Donell wrote:
> On 7/29/19 1:55 PM, Adhemerval Zanella wrote:
>>
>>
>> On 29/07/2019 05:33, Florian Weimer wrote:
>>> * Adhemerval Zanella:
>>>
>>>> + uint64_t pid = (uint64_t)__getpid () << 32;
>>>
>>> Space after cast? Rest of the change looks okay.
>>
>> Ack, changed locally.
>
> Are you OK with this waiting for 2.31 to open?
>
> I'd like to minimize the changes to those we're making for
> gcc 10 compatibility.
>
Certainly, I forgot to add on this fix that it is meant for 2.31.
@@ -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];