I was thinking smaller would be more "acceptable" ... but I too would prefer something like OsRandom() in os/utils.c ... is that something that should be exported to drivers or just internal to the server?

On Mar 22, 2010, at 13:51, Tiago Vignatti wrote:

Jeremy Huddleston wrote:
Mainly to shut up clang. These are not security-sensitive uses of rand()
Signed-off-by: Jeremy Huddleston <jerem...@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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to