[PATCH] Use arc4random instead of rand where available
Tiago Vignatti
vignatti at freedesktop.org
Mon Mar 22 13:51:39 PDT 2010
Jeremy Huddleston wrote:
> Mainly to shut up clang. These are not security-sensitive uses of rand()
>
> Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
> ---
> configure.ac | 2 +-
> dix/window.c | 18 ++++++++++++++++++
> exa/exa_glyphs.c | 8 ++++++++
> include/dix-config.h.in | 3 +++
> 4 files changed, 30 insertions(+), 1 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index d379b3a..361f380 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -206,7 +206,7 @@ dnl Checks for library functions.
> AC_FUNC_VPRINTF
> AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
> strtol getopt getopt_long vsnprintf walkcontext backtrace \
> - getisax getzoneid shmctl64 strcasestr ffs])
> + getisax getzoneid shmctl64 strcasestr ffs arc4random])
> AC_FUNC_ALLOCA
> dnl Old HAS_* names used in os/*.c.
> AC_CHECK_FUNC([getdtablesize],
> diff --git a/dix/window.c b/dix/window.c
> index c7201df..303cf4d 100644
> --- a/dix/window.c
> +++ b/dix/window.c
> @@ -3189,10 +3189,17 @@ dixSaveScreens(ClientPtr client, int on, int mode)
> if (logoScreenSaver)
> (*pWin->drawable.pScreen->ClearToBackground)(pWin, 0, 0, 0, 0, FALSE);
> #endif
> +#ifdef HAVE_ARC4RANDOM
> + (*pWin->drawable.pScreen->MoveWindow)(pWin,
> + (short)(-(arc4random() % RANDOM_WIDTH)),
> + (short)(-(arc4random() % RANDOM_WIDTH)),
> + pWin->nextSib, VTMove);
> +#else
> (*pWin->drawable.pScreen->MoveWindow)(pWin,
> (short)(-(rand() % RANDOM_WIDTH)),
> (short)(-(rand() % RANDOM_WIDTH)),
> pWin->nextSib, VTMove);
> +#endif
> #ifndef NOLOGOHACK
> if (logoScreenSaver)
> DrawLogo(pWin);
> @@ -3732,7 +3739,11 @@ DrawLogo(WindowPtr pWin)
> if (!pGC)
> return;
>
> +#ifdef HAVE_ARC4RANDOM
> + if ((arc4random() % 100) <= 17) /* make the probability for white fairly low */
> +#else
> if ((rand() % 100) <= 17) /* make the probability for white fairly low */
> +#endif
> fore[0].val = pScreen->whitePixel;
> else
> fore[0].val = pScreen->blackPixel;
> @@ -3776,10 +3787,17 @@ DrawLogo(WindowPtr pWin)
> size = width;
> if (height < width)
> size = height;
> +#ifdef HAVE_ARC4RANDOM
> + size = RANDOM_WIDTH + arc4random() % (size - RANDOM_WIDTH);
> + size &= ~1;
> + x += arc4random() % (width - size);
> + y += arc4random() % (height - size);
> +#else
> size = RANDOM_WIDTH + rand() % (size - RANDOM_WIDTH);
> size &= ~1;
> x += rand() % (width - size);
> y += rand() % (height - size);
> +#endif
>
> /*
> * Draw what will be the thin strokes.
> diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
> index fd14e9b..8c9e591 100644
> --- a/exa/exa_glyphs.c
> +++ b/exa/exa_glyphs.c
> @@ -223,7 +223,11 @@ exaRealizeGlyphCaches(ScreenPtr pScreen,
> for (j = 0; j < cache->hashSize; j++)
> cache->hashEntries[j] = -1;
>
> +#ifdef HAVE_ARC4RANDOM
> + cache->evictionPosition = arc4random() % cache->size;
> +#else
> cache->evictionPosition = rand() % cache->size;
> +#endif
> }
>
> /* Each cache references the picture individually */
> @@ -504,7 +508,11 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen,
> exaGlyphCacheHashInsert(cache, pGlyph, pos);
>
> /* And pick a new eviction position */
> +#ifdef HAVE_ARC4RANDOM
> + cache->evictionPosition = arc4random() % cache->size;
> +#else
> cache->evictionPosition = rand() % cache->size;
> +#endif
> }
>
> exaGlyphCacheUploadGlyph(pScreen, cache, x, y, pGlyph);
> diff --git a/include/dix-config.h.in b/include/dix-config.h.in
> index 058c8fd..2ded353 100644
> --- a/include/dix-config.h.in
> +++ b/include/dix-config.h.in
> @@ -54,6 +54,9 @@
> /* Support XDM-AUTH*-1 */
> #undef HASXDMAUTH
>
> +/* Define to 1 if you have the `arc4random' function. */
> +#undef HAVE_ARC4RANDOM
> +
> /* Define to 1 if you have the `getdtablesize' function. */
> #undef HAS_GETDTABLESIZE
>
a macro on some internal header file would be much nicer, isn't Jeremy?
Tiago
More information about the xorg-devel
mailing list