[all-commits] [llvm/llvm-project] aab9e9: [Support, Windows] Tolerate failure of CryptGenRandom

Simon Tatham via All-commits all-commits at lists.llvm.org
Tue Apr 7 01:21:20 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: aab9e9de4d9925617bb9bc3891fa96107b615149
      https://github.com/llvm/llvm-project/commit/aab9e9de4d9925617bb9bc3891fa96107b615149
  Author: Simon Tatham <simon.tatham at arm.com>
  Date:   2020-04-07 (Tue, 07 Apr 2020)

  Changed paths:
    M llvm/lib/Support/Windows/Process.inc

  Log Message:
  -----------
  [Support,Windows] Tolerate failure of CryptGenRandom

Summary:
In `Unix/Process.inc`, we seed a random number generator from
`/dev/urandom` if possible, but if not, we're happy to fall back to
ordinary pseudorandom strategies, like the current time and PID.

The corresponding function on Windows calls `CryptGenRandom`, but it
//doesn't// have a fallback if that strategy fails. But `CryptGenRandom`
//can// fail, if a cryptography provider isn't properly initialized, or
occasionally (by our observation) simply intermittently.

If it's reasonable on Unix to implement traditional pseudorandom-number
seeding as a fallback, then it's surely reasonable to do the same on
Windows. So this patch adds a last-ditch use of ordinary rand(), using
much the same strategy as the Unix fallback code.

Reviewers: hans, sammccall

Reviewed By: hans

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77553




More information about the All-commits mailing list