root/samples/livepatch/livepatch-sample.c

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

DEFINITIONS

This source file includes following definitions.
  1. livepatch_cmdline_proc_show
  2. livepatch_init
  3. livepatch_exit

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * livepatch-sample.c - Kernel Live Patching Sample Module
   4  *
   5  * Copyright (C) 2014 Seth Jennings <sjenning@redhat.com>
   6  */
   7 
   8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   9 
  10 #include <linux/module.h>
  11 #include <linux/kernel.h>
  12 #include <linux/livepatch.h>
  13 
  14 /*
  15  * This (dumb) live patch overrides the function that prints the
  16  * kernel boot cmdline when /proc/cmdline is read.
  17  *
  18  * Example:
  19  *
  20  * $ cat /proc/cmdline
  21  * <your cmdline>
  22  *
  23  * $ insmod livepatch-sample.ko
  24  * $ cat /proc/cmdline
  25  * this has been live patched
  26  *
  27  * $ echo 0 > /sys/kernel/livepatch/livepatch_sample/enabled
  28  * $ cat /proc/cmdline
  29  * <your cmdline>
  30  */
  31 
  32 #include <linux/seq_file.h>
  33 static int livepatch_cmdline_proc_show(struct seq_file *m, void *v)
  34 {
  35         seq_printf(m, "%s\n", "this has been live patched");
  36         return 0;
  37 }
  38 
  39 static struct klp_func funcs[] = {
  40         {
  41                 .old_name = "cmdline_proc_show",
  42                 .new_func = livepatch_cmdline_proc_show,
  43         }, { }
  44 };
  45 
  46 static struct klp_object objs[] = {
  47         {
  48                 /* name being NULL means vmlinux */
  49                 .funcs = funcs,
  50         }, { }
  51 };
  52 
  53 static struct klp_patch patch = {
  54         .mod = THIS_MODULE,
  55         .objs = objs,
  56 };
  57 
  58 static int livepatch_init(void)
  59 {
  60         return klp_enable_patch(&patch);
  61 }
  62 
  63 static void livepatch_exit(void)
  64 {
  65 }
  66 
  67 module_init(livepatch_init);
  68 module_exit(livepatch_exit);
  69 MODULE_LICENSE("GPL");
  70 MODULE_INFO(livepatch, "Y");

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