SHA256
1
0
forked from pool/mbedtls
mbedtls/getrandom-syscall-fallback.patch

68 lines
1.7 KiB
Diff

Index: mbedtls-1.3.10/library/entropy_poll.c
===================================================================
--- mbedtls-1.3.10.orig/library/entropy_poll.c
+++ mbedtls-1.3.10/library/entropy_poll.c
@@ -81,40 +81,35 @@ int platform_entropy_poll( void *data, u
#include <sys/syscall.h>
#if defined(SYS_getrandom)
#define HAVE_GETRANDOM
-static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags )
+static ssize_t getrandom_wrapper( void *buf, size_t buflen, unsigned int flags )
{
return( syscall( SYS_getrandom, buf, buflen, flags ) );
}
#endif /* SYS_getrandom */
#endif /* __linux__ */
-#if defined(HAVE_GETRANDOM)
-
+#include <stdio.h>
#include <errno.h>
int platform_entropy_poll( void *data,
unsigned char *output, size_t len, size_t *olen )
{
- int ret;
+ FILE *file;
+ size_t ret;
((void) data);
- if( ( ret = getrandom_wrapper( output, len, 0 ) ) < 0 )
- return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED );
-
- *olen = ret;
- return( 0 );
-}
-
-#else /* HAVE_GETRANDOM */
+#if defined(HAVE_GETRANDOM)
+ ssize_t sysret;
-#include <stdio.h>
+ if( ( sysret = getrandom_wrapper( output, len, 0 ) ) >= 0 )
+ {
+ *olen = sysret;
+ return( 0 );
+ }
+ if (sysret < 0 && errno != ENOSYS)
+ return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED );
-int platform_entropy_poll( void *data,
- unsigned char *output, size_t len, size_t *olen )
-{
- FILE *file;
- size_t ret;
- ((void) data);
+#endif /* HAVE_GETRANDOM */
*olen = 0;
@@ -134,7 +129,6 @@ int platform_entropy_poll( void *data,
return( 0 );
}
-#endif /* HAVE_GETRANDOM */
#endif /* _WIN32 && !EFIX64 && !EFI32 */
#endif /* !POLARSSL_NO_PLATFORM_ENTROPY */