Hanno Becker 27516979c1 Entropy: Fall through to /dev/random if getrandom() syscall unknown
This commit fixes issue #1212 related to platform-specific entropy
polling in an syscall-emulated environment.

Previously, the implementation of the entropy gathering function
`mbedtls_platform_entropy_poll()` for linux machines used the
following logic to determine how to obtain entropy from the kernel:

1. If the getrandom() system call identifier SYS_getrandom is present and
   the kernel version is 3.17 or higher, use syscall( SYS_getrandom, ... )
2. Otherwise, fall back to reading from /dev/random.

There are two issues with this:

1. Portability:
   When cross-compiling the code for a different
   architecture and running it through system call
   emulation in qemu, qemu reports the host kernel
   version through uname but, as of v.2.5.0,
   doesn't support emulating the getrandom() syscall.
   This leads to `mbedtls_platform_entropy_poll()`
   failing even though reading from /dev/random would
   have worked.

2. Style:
   Extracting the linux kernel version from
   the output of `uname` is slightly tedious.

This commit fixes both by implementing the suggestion in #1212:
- It removes the kernel-version detection through uname().
- Instead, it checks whether `syscall( SYS_getrandom, ... )`
  fails with errno set to ENOSYS indicating an unknown system call.
  If so, it falls through to trying to read from /dev/random.

Fixes #1212.
2018-10-18 12:12:04 +01:00
..
2018-08-13 13:49:52 +03:00
2018-05-25 14:54:14 +01:00
2017-07-27 21:44:33 +01:00
2018-06-18 10:30:30 +02:00
2017-09-06 17:51:14 +03:00
2017-10-10 19:04:27 +03:00
2018-05-15 09:21:57 +01:00
2018-08-20 10:39:27 +03:00
2018-08-17 16:52:08 +01:00
2018-07-24 16:43:20 +01:00
2015-09-04 14:21:07 +02:00
2018-05-25 14:54:14 +01:00
2015-09-04 14:21:07 +02:00
2017-10-29 17:53:52 +02:00
2018-04-11 20:27:32 -04:00
2018-07-24 16:43:20 +01:00