linux/mm/rodata_test.c
<<
>>
Prefs
   1/*
   2 * rodata_test.c: functional test for mark_rodata_ro function
   3 *
   4 * (C) Copyright 2008 Intel Corporation
   5 * Author: Arjan van de Ven <arjan@linux.intel.com>
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Public License
   9 * as published by the Free Software Foundation; version 2
  10 * of the License.
  11 */
  12#define pr_fmt(fmt) "rodata_test: " fmt
  13
  14#include <linux/uaccess.h>
  15#include <asm/sections.h>
  16
  17static const int rodata_test_data = 0xC3;
  18
  19void rodata_test(void)
  20{
  21        unsigned long start, end;
  22        int zero = 0;
  23
  24        /* test 1: read the value */
  25        /* If this test fails, some previous testrun has clobbered the state */
  26        if (!rodata_test_data) {
  27                pr_err("test 1 fails (start data)\n");
  28                return;
  29        }
  30
  31        /* test 2: write to the variable; this should fault */
  32        if (!probe_kernel_write((void *)&rodata_test_data,
  33                                (void *)&zero, sizeof(zero))) {
  34                pr_err("test data was not read only\n");
  35                return;
  36        }
  37
  38        /* test 3: check the value hasn't changed */
  39        if (rodata_test_data == zero) {
  40                pr_err("test data was changed\n");
  41                return;
  42        }
  43
  44        /* test 4: check if the rodata section is PAGE_SIZE aligned */
  45        start = (unsigned long)__start_rodata;
  46        end = (unsigned long)__end_rodata;
  47        if (start & (PAGE_SIZE - 1)) {
  48                pr_err("start of .rodata is not page size aligned\n");
  49                return;
  50        }
  51        if (end & (PAGE_SIZE - 1)) {
  52                pr_err("end of .rodata is not page size aligned\n");
  53                return;
  54        }
  55
  56        pr_info("all tests were successful\n");
  57}
  58