root/mm/rodata_test.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rodata_test

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

/* [<][>][^][v][top][bottom][index][help] */