cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

test-bufferiszero.c (2121B)


      1/*
      2 * QEMU buffer_is_zero test
      3 *
      4 * Copyright (c) 2016 Red Hat, Inc.
      5 *
      6 * This library is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public
      8 * License as published by the Free Software Foundation; either
      9 * version 2.1 of the License, or (at your option) any later version.
     10 *
     11 * This library is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14 * Lesser General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU Lesser General Public
     17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
     18 *
     19 */
     20
     21#include "qemu/osdep.h"
     22#include "qemu/cutils.h"
     23
     24static char buffer[8 * 1024 * 1024];
     25
     26static void test_1(void)
     27{
     28    size_t s, a, o;
     29
     30    /* Basic positive test.  */
     31    g_assert(buffer_is_zero(buffer, sizeof(buffer)));
     32
     33    /* Basic negative test.  */
     34    buffer[sizeof(buffer) - 1] = 1;
     35    g_assert(!buffer_is_zero(buffer, sizeof(buffer)));
     36    buffer[sizeof(buffer) - 1] = 0;
     37
     38    /* Positive tests for size and alignment.  */
     39    for (a = 1; a <= 64; a++) {
     40        for (s = 1; s < 1024; s++) {
     41            buffer[a - 1] = 1;
     42            buffer[a + s] = 1;
     43            g_assert(buffer_is_zero(buffer + a, s));
     44            buffer[a - 1] = 0;
     45            buffer[a + s] = 0;
     46        }
     47    }
     48
     49    /* Negative tests for size, alignment, and the offset of the marker.  */
     50    for (a = 1; a <= 64; a++) {
     51        for (s = 1; s < 1024; s++) {
     52            for (o = 0; o < s; ++o) {
     53                buffer[a + o] = 1;
     54                g_assert(!buffer_is_zero(buffer + a, s));
     55                buffer[a + o] = 0;
     56            }
     57        }
     58    }
     59}
     60
     61static void test_2(void)
     62{
     63    if (g_test_perf()) {
     64        test_1();
     65    } else {
     66        do {
     67            test_1();
     68        } while (test_buffer_is_zero_next_accel());
     69    }
     70}
     71
     72int main(int argc, char **argv)
     73{
     74    g_test_init(&argc, &argv, NULL);
     75    g_test_add_func("/cutils/bufferiszero", test_2);
     76
     77    return g_test_run();
     78}