[PATCH libXdmcp] Use getrandom() syscall if available
walter harms
wharms at bfs.de
Mon Apr 3 13:17:52 UTC 2017
Am 03.04.2017 14:52, schrieb Benjamin Tissoires:
> This allows to fix CVE-2017-2625 on Linux platforms without pulling in
> libbsd.
> The syscall getrandom is available since kernel v3.17. The code first
> tries to use the syscall on a supported kernel. If the syscall fails,
> it falls back to the current (vulnerable) code.
> We do not implement the glibc getrandom() call given that it's only
> available in glibc 2.25, and the #if dance is already messy here.
>
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires at gmail.com>
> ---
> Key.c | 12 ++++++++++++
> configure.ac | 3 +++
> 2 files changed, 15 insertions(+)
>
> diff --git a/Key.c b/Key.c
> index a09b316..61b07db 100644
> --- a/Key.c
> +++ b/Key.c
> @@ -36,6 +36,10 @@ in this Software without prior written authorization from The Open Group.
> #include <bsd/stdlib.h> /* for arc4random_buf() */
> #endif
>
> +#if HAVE_DECL_SYS_GETRANDOM
> +#include <sys/syscall.h> /* for SYS_getrandom */
> +#endif
> +
> #ifndef HAVE_ARC4RANDOM_BUF
> static void
> getbits (long data, unsigned char *dst)
> @@ -68,6 +72,14 @@ XdmcpGenerateKey (XdmAuthKeyPtr key)
> #ifndef HAVE_ARC4RANDOM_BUF
> long lowbits, highbits;
>
> +#if HAVE_DECL_SYS_GETRANDOM
> + int ret;
> +
> + ret = syscall(SYS_getrandom, key->data, 8, 0);
> + if (ret == 8)
> + return;
> +#endif
> +
i am not an expert on syscalls but would it help to test for
SYS_getrandom directly ?
re,
wh
> srandom ((int)getpid() ^ time((Time_t *)0));
> lowbits = random ();
> highbits = random ();
> diff --git a/configure.ac b/configure.ac
> index 2288502..d0d4d05 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -63,6 +63,9 @@ case $host_os in
> ;;
> esac
>
> +# Checks for syscalls
> +AC_CHECK_DECLS([SYS_getrandom], [], [], [[#include <sys/syscall.h>]])
> +
> # Checks for library functions.
> AC_CHECK_LIB([bsd], [arc4random_buf])
> AC_CHECK_FUNCS([srand48 lrand48 arc4random_buf])
More information about the xorg-devel
mailing list