The interminable rework of afs_random() 79/13879/4
authorBenjamin Kaduk <kaduk@mit.edu>
Fri, 9 Aug 2019 14:59:44 +0000 (07:59 -0700)
committerStephan Wiesand <stephan.wiesand@desy.de>
Sun, 26 Jan 2020 17:57:24 +0000 (12:57 -0500)
Commit f0a3d477d6109697645cfdcc17617b502349d91b restructured the
operation on tv_usec to avoid using undefined behavior, but in
the process introduced a behavior change.  Historically (at least as
far back as AFS-3.3), we masked off the low nybble (four bits) of
tv_usec before adding the low byte (eight bits) of the rxi_getaddr()
output.  Why there was a desire to combine two sources of input for
the overlapping four bits remains unclear, but restore the historical
behavior for now, as the intent of commit
f0a3d477d6109697645cfdcc17617b502349d91b was to not introduce any
behavior changes.

Reviewed-on: https://gerrit.openafs.org/13759
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 1c4e94da2a8fce9d79006ad6d6673d3d7de117d3)

Change-Id: Iec10673e5ec73c1e0edcc231690cb6133fce8691
Reviewed-on: https://gerrit.openafs.org/13879
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>

src/afs/afs_server.c

index 327c0c5..68fefc6 100644 (file)
@@ -824,11 +824,11 @@ afs_random(void)
        osi_timeval_t t;
        osi_GetTime(&t);
        /*
-        * Clear the low byte of tv_usec in a size-independent manner before adding
+        * Clear the low nybble of tv_usec in a size-independent manner before adding
         * in the rest of the state.
         */
        state = t.tv_usec;
-       state ^= (state & 0xff);
+       state ^= (state & 0x0f);
        state += rxi_getaddr() & 0xff;
        state += (t.tv_sec & 0xff);
        for (i = 0; i < 30; i++) {