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

livepatch-sample.c (1370B)


      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>
     33static 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
     39static struct klp_func funcs[] = {
     40	{
     41		.old_name = "cmdline_proc_show",
     42		.new_func = livepatch_cmdline_proc_show,
     43	}, { }
     44};
     45
     46static struct klp_object objs[] = {
     47	{
     48		/* name being NULL means vmlinux */
     49		.funcs = funcs,
     50	}, { }
     51};
     52
     53static struct klp_patch patch = {
     54	.mod = THIS_MODULE,
     55	.objs = objs,
     56};
     57
     58static int livepatch_init(void)
     59{
     60	return klp_enable_patch(&patch);
     61}
     62
     63static void livepatch_exit(void)
     64{
     65}
     66
     67module_init(livepatch_init);
     68module_exit(livepatch_exit);
     69MODULE_LICENSE("GPL");
     70MODULE_INFO(livepatch, "Y");