lkml.org 
[lkml]   [2024]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 09/10] selftests: timers: Fix valid-adjtimex signed left-shift undefined behavior
    Date
    From: John Stultz <jstultz@google.com>

    [ Upstream commit 076361362122a6d8a4c45f172ced5576b2d4a50d ]

    The struct adjtimex freq field takes a signed value who's units are in
    shifted (<<16) parts-per-million.

    Unfortunately for negative adjustments, the straightforward use of:

    freq = ppm << 16 trips undefined behavior warnings with clang:

    valid-adjtimex.c:66:6: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
    -499<<16,
    ~~~~^
    valid-adjtimex.c:67:6: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
    -450<<16,
    ~~~~^
    .

    Fix it by using a multiply by (1 << 16) instead of shifting negative values
    in the valid-adjtimex test case. Align the values for better readability.

    Reported-by: Lee Jones <joneslee@google.com>
    Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: John Stultz <jstultz@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Link: https://lore.kernel.org/r/20240409202222.2830476-1-jstultz@google.com
    Link: https://lore.kernel.org/lkml/0c6d4f0d-2064-4444-986b-1d1ed782135f@collabora.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../testing/selftests/timers/valid-adjtimex.c | 73 +++++++++----------
    1 file changed, 36 insertions(+), 37 deletions(-)

    diff --git a/tools/testing/selftests/timers/valid-adjtimex.c b/tools/testing/selftests/timers/valid-adjtimex.c
    index 48b9a803235a8..d13ebde203221 100644
    --- a/tools/testing/selftests/timers/valid-adjtimex.c
    +++ b/tools/testing/selftests/timers/valid-adjtimex.c
    @@ -21,9 +21,6 @@
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details.
    */
    -
    -
    -
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    @@ -62,45 +59,47 @@ int clear_time_state(void)
    #define NUM_FREQ_OUTOFRANGE 4
    #define NUM_FREQ_INVALID 2

    +#define SHIFTED_PPM (1 << 16)
    +
    long valid_freq[NUM_FREQ_VALID] = {
    - -499<<16,
    - -450<<16,
    - -400<<16,
    - -350<<16,
    - -300<<16,
    - -250<<16,
    - -200<<16,
    - -150<<16,
    - -100<<16,
    - -75<<16,
    - -50<<16,
    - -25<<16,
    - -10<<16,
    - -5<<16,
    - -1<<16,
    + -499 * SHIFTED_PPM,
    + -450 * SHIFTED_PPM,
    + -400 * SHIFTED_PPM,
    + -350 * SHIFTED_PPM,
    + -300 * SHIFTED_PPM,
    + -250 * SHIFTED_PPM,
    + -200 * SHIFTED_PPM,
    + -150 * SHIFTED_PPM,
    + -100 * SHIFTED_PPM,
    + -75 * SHIFTED_PPM,
    + -50 * SHIFTED_PPM,
    + -25 * SHIFTED_PPM,
    + -10 * SHIFTED_PPM,
    + -5 * SHIFTED_PPM,
    + -1 * SHIFTED_PPM,
    -1000,
    - 1<<16,
    - 5<<16,
    - 10<<16,
    - 25<<16,
    - 50<<16,
    - 75<<16,
    - 100<<16,
    - 150<<16,
    - 200<<16,
    - 250<<16,
    - 300<<16,
    - 350<<16,
    - 400<<16,
    - 450<<16,
    - 499<<16,
    + 1 * SHIFTED_PPM,
    + 5 * SHIFTED_PPM,
    + 10 * SHIFTED_PPM,
    + 25 * SHIFTED_PPM,
    + 50 * SHIFTED_PPM,
    + 75 * SHIFTED_PPM,
    + 100 * SHIFTED_PPM,
    + 150 * SHIFTED_PPM,
    + 200 * SHIFTED_PPM,
    + 250 * SHIFTED_PPM,
    + 300 * SHIFTED_PPM,
    + 350 * SHIFTED_PPM,
    + 400 * SHIFTED_PPM,
    + 450 * SHIFTED_PPM,
    + 499 * SHIFTED_PPM,
    };

    long outofrange_freq[NUM_FREQ_OUTOFRANGE] = {
    - -1000<<16,
    - -550<<16,
    - 550<<16,
    - 1000<<16,
    + -1000 * SHIFTED_PPM,
    + -550 * SHIFTED_PPM,
    + 550 * SHIFTED_PPM,
    + 1000 * SHIFTED_PPM,
    };

    #define LONG_MAX (~0UL>>1)
    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 17:56    [W:7.018 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site