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

replay-random.c (1108B)


      1/*
      2 * replay-random.c
      3 *
      4 * Copyright (c) 2010-2020 Institute for System Programming
      5 *                         of the Russian Academy of Sciences.
      6 *
      7 * This work is licensed under the terms of the GNU GPL, version 2 or later.
      8 * See the COPYING file in the top-level directory.
      9 *
     10 */
     11
     12#include "qemu/osdep.h"
     13#include "qemu/error-report.h"
     14#include "sysemu/replay.h"
     15#include "replay-internal.h"
     16
     17void replay_save_random(int ret, void *buf, size_t len)
     18{
     19    g_assert(replay_mutex_locked());
     20
     21    replay_save_instructions();
     22    replay_put_event(EVENT_RANDOM);
     23    replay_put_dword(ret);
     24    replay_put_array(buf, len);
     25}
     26
     27int replay_read_random(void *buf, size_t len)
     28{
     29    int ret = 0;
     30    g_assert(replay_mutex_locked());
     31
     32    replay_account_executed_instructions();
     33    if (replay_next_event_is(EVENT_RANDOM)) {
     34        size_t buf_size = 0;
     35        ret = replay_get_dword();
     36        replay_get_array(buf, &buf_size);
     37        replay_finish_event();
     38        g_assert(buf_size == len);
     39    } else {
     40        error_report("Missing random event in the replay log");
     41        exit(1);
     42    }
     43    return ret;
     44}