cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

set-tz.c (2358B)


      1/* Set tz value
      2 *              by: John Stultz <john.stultz@linaro.org>
      3 *              (C) Copyright Linaro 2016
      4 *              Licensed under the GPLv2
      5 *
      6 *   This program is free software: you can redistribute it and/or modify
      7 *   it under the terms of the GNU General Public License as published by
      8 *   the Free Software Foundation, either version 2 of the License, or
      9 *   (at your option) any later version.
     10 *
     11 *   This program 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
     14 *   GNU General Public License for more details.
     15 */
     16
     17
     18#include <stdio.h>
     19#include <stdlib.h>
     20#include <time.h>
     21#include <sys/time.h>
     22#include <sys/timex.h>
     23#include <string.h>
     24#include <signal.h>
     25#include <unistd.h>
     26#include "../kselftest.h"
     27
     28int set_tz(int min, int dst)
     29{
     30	struct timezone tz;
     31
     32	tz.tz_minuteswest = min;
     33	tz.tz_dsttime = dst;
     34
     35	return settimeofday(0, &tz);
     36}
     37
     38int get_tz_min(void)
     39{
     40	struct timezone tz;
     41	struct timeval tv;
     42
     43	memset(&tz, 0, sizeof(tz));
     44	gettimeofday(&tv, &tz);
     45	return tz.tz_minuteswest;
     46}
     47
     48int get_tz_dst(void)
     49{
     50	struct timezone tz;
     51	struct timeval tv;
     52
     53	memset(&tz, 0, sizeof(tz));
     54	gettimeofday(&tv, &tz);
     55	return tz.tz_dsttime;
     56}
     57
     58int main(int argc, char **argv)
     59{
     60	int i, ret;
     61	int min, dst;
     62
     63	min = get_tz_min();
     64	dst = get_tz_dst();
     65	printf("tz_minuteswest started at %i, dst at %i\n", min, dst);
     66
     67	printf("Checking tz_minuteswest can be properly set: ");
     68	fflush(stdout);
     69	for (i = -15*60; i < 15*60; i += 30) {
     70		ret = set_tz(i, dst);
     71		ret = get_tz_min();
     72		if (ret != i) {
     73			printf("[FAILED] expected: %i got %i\n", i, ret);
     74			goto err;
     75		}
     76	}
     77	printf("[OK]\n");
     78
     79	printf("Checking invalid tz_minuteswest values are caught: ");
     80	fflush(stdout);
     81
     82	if (!set_tz(-15*60-1, dst)) {
     83		printf("[FAILED] %i didn't return failure!\n", -15*60-1);
     84		goto err;
     85	}
     86
     87	if (!set_tz(15*60+1, dst)) {
     88		printf("[FAILED] %i didn't return failure!\n", 15*60+1);
     89		goto err;
     90	}
     91
     92	if (!set_tz(-24*60, dst)) {
     93		printf("[FAILED] %i didn't return failure!\n", -24*60);
     94		goto err;
     95	}
     96
     97	if (!set_tz(24*60, dst)) {
     98		printf("[FAILED] %i didn't return failure!\n", 24*60);
     99		goto err;
    100	}
    101
    102	printf("[OK]\n");
    103
    104	set_tz(min, dst);
    105	return ksft_exit_pass();
    106
    107err:
    108	set_tz(min, dst);
    109	return ksft_exit_fail();
    110}