* Fix #19052; [backport:1.6.0] Adds a compile flag to avoid a getrandom syscall, fixing #19052. This is neccesary when the getrandom syscall is missing, as noted in #19052, particularly in kernel versions < 3.17 when getrandom was introduced. Specifically relevant is this is missing from kernel 3.10, which is the supported kernel throughout RHEL 7 and CentOS 7, which is widely used at many organizations. Without this, versions of nim that include sysrand (i.e. versions >= 1.6.0) will not compile without modification, however with this change a compile flag may be used to fall back using /dev/urandom as done with any unknown Posix OS (preferred here as a fallback since it already supplies a cryptographically secure PRNG and existing code deals with entropy pool init, etc). The change is placed behind a compile flag, as discussed in github ticket #19052 (summed up here): * First, I can't seem to catch that a importc such as SYS_getrandom is declared without using it (the declared proc returns true, but compiler throws an undeclared identifier flag when referencing it). * Second, it seemed preferable to be behaviorally explicit vs implicit when considering this is intended to be a cryptographically secure PRNG. * Third, if I intend to compile on a kernel >= 3.17 while running the binary on at least one system < 3.17, I'll want to be able to target this without relying on a compile time determination if the getrandom syscall is available. * Documenting compile flag for -d:nimNoGetRandom and adding changelog entry Related to #19052 and comments in PR #19053. Also created a new changelog file since none currently exists. Co-authored-by: Timothy Alexander <talexander@midwestlabs.com>
This commit is contained in:
parent
8d5a275189
commit
dde556665a
2 changed files with 37 additions and 1 deletions
|
|
@ -38,6 +38,11 @@
|
|||
## .. _randomFillSync: https://nodejs.org/api/crypto.html#crypto_crypto_randomfillsync_buffer_offset_size
|
||||
## .. _/dev/urandom: https://en.wikipedia.org/wiki//dev/random
|
||||
##
|
||||
## On a Linux target, a call to the `getrandom` syscall can be avoided (e.g.
|
||||
## for targets running kernel version < 3.17) by passing a compile flag of
|
||||
## `-d:nimNoGetRandom`. If this flag is passed, sysrand will use `/dev/urandom`
|
||||
## as with any other POSIX compliant OS.
|
||||
##
|
||||
|
||||
runnableExamples:
|
||||
doAssert urandom(0).len == 0
|
||||
|
|
@ -159,7 +164,7 @@ elif defined(windows):
|
|||
|
||||
result = randomBytes(addr dest[0], size)
|
||||
|
||||
elif defined(linux):
|
||||
elif defined(linux) and not defined(nimNoGetRandom):
|
||||
# TODO using let, pending bootstrap >= 1.4.0
|
||||
var SYS_getrandom {.importc: "SYS_getrandom", header: "<sys/syscall.h>".}: clong
|
||||
const syscallHeader = """#include <unistd.h>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue