-
Notifications
You must be signed in to change notification settings - Fork 309
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test/integration/rhel-9.3: integration testing for rhel-9.3
Signed-off-by: Ryan Sullivan <[email protected]>
- Loading branch information
Showing
16 changed files
with
641 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
#!/bin/bash | ||
|
||
grep "kpatch: 5" /proc/meminfo |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
diff -Nupr src.orig/fs/proc/meminfo.c src/fs/proc/meminfo.c | ||
<<<<<<< HEAD | ||
--- src.orig/fs/proc/meminfo.c 2023-07-14 10:41:06.284435188 -0400 | ||
+++ src/fs/proc/meminfo.c 2023-07-14 10:41:07.271433247 -0400 | ||
======= | ||
--- src.orig/fs/proc/meminfo.c 2023-05-17 13:18:35.265720606 -0400 | ||
+++ src/fs/proc/meminfo.c 2023-05-17 13:18:36.087719488 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -29,6 +29,8 @@ static void show_val_kb(struct seq_file | ||
seq_write(m, " kB\n", 4); | ||
} | ||
|
||
+static int foo = 5; | ||
+ | ||
static int meminfo_proc_show(struct seq_file *m, void *v) | ||
{ | ||
struct sysinfo i; | ||
@@ -154,6 +156,7 @@ static int meminfo_proc_show(struct seq_ | ||
show_val_kb(m, "CmaFree: ", | ||
global_zone_page_state(NR_FREE_CMA_PAGES)); | ||
#endif | ||
+ seq_printf(m, "kpatch: %d\n", foo); | ||
|
||
hugetlb_report_meminfo(m); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
diff -Nupr src.orig/net/ipv6/netfilter.c src/net/ipv6/netfilter.c | ||
<<<<<<< HEAD | ||
--- src.orig/net/ipv6/netfilter.c 2023-07-14 10:41:06.614434539 -0400 | ||
+++ src/net/ipv6/netfilter.c 2023-07-14 10:41:15.328417401 -0400 | ||
======= | ||
--- src.orig/net/ipv6/netfilter.c 2023-05-17 13:18:35.543720228 -0400 | ||
+++ src/net/ipv6/netfilter.c 2023-05-17 13:18:43.405709522 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -96,6 +96,8 @@ static int nf_ip6_reroute(struct sk_buff | ||
return 0; | ||
} | ||
|
||
+#include "kpatch-macros.h" | ||
+ | ||
int __nf_ip6_route(struct net *net, struct dst_entry **dst, | ||
struct flowi *fl, bool strict) | ||
{ | ||
@@ -109,6 +111,9 @@ int __nf_ip6_route(struct net *net, stru | ||
struct dst_entry *result; | ||
int err; | ||
|
||
+ if (!jiffies) | ||
+ printk("kpatch nf_ip6_route foo\n"); | ||
+ | ||
result = ip6_route_output(net, sk, &fl->u.ip6); | ||
err = result->error; | ||
if (err) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
diff -Nupr src.orig/drivers/input/joydev.c src/drivers/input/joydev.c | ||
<<<<<<< HEAD | ||
--- src.orig/drivers/input/joydev.c 2023-07-14 10:41:05.666436404 -0400 | ||
+++ src/drivers/input/joydev.c 2023-07-14 10:41:18.589410987 -0400 | ||
======= | ||
--- src.orig/drivers/input/joydev.c 2023-05-17 13:18:34.737721326 -0400 | ||
+++ src/drivers/input/joydev.c 2023-05-17 13:18:48.247702929 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -1096,3 +1096,47 @@ static void __exit joydev_exit(void) | ||
|
||
module_init(joydev_init); | ||
module_exit(joydev_exit); | ||
+ | ||
+#include <linux/module.h> | ||
+#include "kpatch-macros.h" | ||
+ | ||
+static const char *const module_state[] = { | ||
+ [MODULE_STATE_LIVE] = "[MODULE_STATE_LIVE] Normal state", | ||
+ [MODULE_STATE_COMING] = "[MODULE_STATE_COMING] Full formed, running module_init", | ||
+ [MODULE_STATE_GOING] = "[MODULE_STATE_GOING] Going away", | ||
+ [MODULE_STATE_UNFORMED] = "[MODULE_STATE_UNFORMED] Still setting it up", | ||
+}; | ||
+ | ||
+static void callback_info(const char *callback, patch_object *obj) | ||
+{ | ||
+ if (obj->mod) | ||
+ pr_info("%s: %s -> %s\n", callback, obj->mod->name, | ||
+ module_state[obj->mod->state]); | ||
+ else | ||
+ pr_info("%s: vmlinux\n", callback); | ||
+} | ||
+ | ||
+static int pre_patch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+ return 0; /* return -ENODEV; */ | ||
+} | ||
+KPATCH_PRE_PATCH_CALLBACK(pre_patch_callback); | ||
+ | ||
+static void post_patch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_POST_PATCH_CALLBACK(post_patch_callback); | ||
+ | ||
+static void pre_unpatch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_PRE_UNPATCH_CALLBACK(pre_unpatch_callback); | ||
+ | ||
+static void post_unpatch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_POST_UNPATCH_CALLBACK(post_unpatch_callback); | ||
diff -Nupr src.orig/drivers/input/misc/pcspkr.c src/drivers/input/misc/pcspkr.c | ||
<<<<<<< HEAD | ||
--- src.orig/drivers/input/misc/pcspkr.c 2023-07-14 10:41:05.671436394 -0400 | ||
+++ src/drivers/input/misc/pcspkr.c 2023-07-14 10:41:18.590410985 -0400 | ||
======= | ||
--- src.orig/drivers/input/misc/pcspkr.c 2023-05-17 13:18:34.741721320 -0400 | ||
+++ src/drivers/input/misc/pcspkr.c 2023-05-17 13:18:48.247702929 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -134,3 +134,46 @@ static struct platform_driver pcspkr_pla | ||
}; | ||
module_platform_driver(pcspkr_platform_driver); | ||
|
||
+#include <linux/module.h> | ||
+#include "kpatch-macros.h" | ||
+ | ||
+static const char *const module_state[] = { | ||
+ [MODULE_STATE_LIVE] = "[MODULE_STATE_LIVE] Normal state", | ||
+ [MODULE_STATE_COMING] = "[MODULE_STATE_COMING] Full formed, running module_init", | ||
+ [MODULE_STATE_GOING] = "[MODULE_STATE_GOING] Going away", | ||
+ [MODULE_STATE_UNFORMED] = "[MODULE_STATE_UNFORMED] Still setting it up", | ||
+}; | ||
+ | ||
+static void callback_info(const char *callback, patch_object *obj) | ||
+{ | ||
+ if (obj->mod) | ||
+ pr_info("%s: %s -> %s\n", callback, obj->mod->name, | ||
+ module_state[obj->mod->state]); | ||
+ else | ||
+ pr_info("%s: vmlinux\n", callback); | ||
+} | ||
+ | ||
+static int pre_patch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+ return 0; | ||
+} | ||
+KPATCH_PRE_PATCH_CALLBACK(pre_patch_callback); | ||
+ | ||
+static void post_patch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_POST_PATCH_CALLBACK(post_patch_callback); | ||
+ | ||
+static void pre_unpatch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_PRE_UNPATCH_CALLBACK(pre_unpatch_callback); | ||
+ | ||
+static void post_unpatch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_POST_UNPATCH_CALLBACK(post_unpatch_callback); | ||
diff -Nupr src.orig/fs/aio.c src/fs/aio.c | ||
<<<<<<< HEAD | ||
--- src.orig/fs/aio.c 2023-07-14 10:41:06.243435269 -0400 | ||
+++ src/fs/aio.c 2023-07-14 10:41:18.591410983 -0400 | ||
======= | ||
--- src.orig/fs/aio.c 2023-05-17 13:18:35.229720656 -0400 | ||
+++ src/fs/aio.c 2023-05-17 13:18:48.247702929 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -50,6 +50,50 @@ | ||
|
||
#define KIOCB_KEY 0 | ||
|
||
+#include <linux/module.h> | ||
+#include "kpatch-macros.h" | ||
+ | ||
+static const char *const module_state[] = { | ||
+ [MODULE_STATE_LIVE] = "[MODULE_STATE_LIVE] Normal state", | ||
+ [MODULE_STATE_COMING] = "[MODULE_STATE_COMING] Full formed, running module_init", | ||
+ [MODULE_STATE_GOING] = "[MODULE_STATE_GOING] Going away", | ||
+ [MODULE_STATE_UNFORMED] = "[MODULE_STATE_UNFORMED] Still setting it up", | ||
+}; | ||
+ | ||
+static void callback_info(const char *callback, patch_object *obj) | ||
+{ | ||
+ if (obj->mod) | ||
+ pr_info("%s: %s -> %s\n", callback, obj->mod->name, | ||
+ module_state[obj->mod->state]); | ||
+ else | ||
+ pr_info("%s: vmlinux\n", callback); | ||
+} | ||
+ | ||
+static int pre_patch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+ return 0; | ||
+} | ||
+KPATCH_PRE_PATCH_CALLBACK(pre_patch_callback); | ||
+ | ||
+static void post_patch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_POST_PATCH_CALLBACK(post_patch_callback); | ||
+ | ||
+static void pre_unpatch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_PRE_UNPATCH_CALLBACK(pre_unpatch_callback); | ||
+ | ||
+static void post_unpatch_callback(patch_object *obj) | ||
+{ | ||
+ callback_info(__func__, obj); | ||
+} | ||
+KPATCH_POST_UNPATCH_CALLBACK(post_unpatch_callback); | ||
+ | ||
#define AIO_RING_MAGIC 0xa10a10a1 | ||
#define AIO_RING_COMPAT_FEATURES 1 | ||
#define AIO_RING_INCOMPAT_FEATURES 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#!/bin/bash | ||
|
||
set -o errexit | ||
|
||
sudo modprobe nfsd | ||
sleep 5 | ||
grep -q kpatch /proc/fs/nfs/exports | ||
|
||
# TODO: This will trigger a printk on newer kernels which have the .klp.arch | ||
# removal. Don't actually do the grep until running on a newer kernel. | ||
echo "file fs/nfsd/export.c +p" > /sys/kernel/debug/dynamic_debug/control | ||
cat /proc/fs/nfs/exports > /dev/null | ||
# dmesg | grep -q "kpatch: pr_debug" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
kpatch module integration test | ||
|
||
This tests several things related to the patching of modules: | ||
|
||
- 'kpatch_string' tests the referencing of a symbol which is outside the | ||
.o, but inside the patch module. | ||
|
||
- alternatives patching (.altinstructions) | ||
|
||
- paravirt patching (.parainstructions) | ||
|
||
- jump labels (5.8+ kernels only) -- including dynamic printk | ||
|
||
Signed-off-by: Josh Poimboeuf <[email protected]> | ||
|
||
diff -Nupr src.orig/fs/nfsd/export.c src/fs/nfsd/export.c | ||
<<<<<<< HEAD | ||
--- src.orig/fs/nfsd/export.c 2023-07-14 10:41:06.272435212 -0400 | ||
+++ src/fs/nfsd/export.c 2023-07-14 10:41:21.273405708 -0400 | ||
@@ -1299,6 +1299,10 @@ static void exp_flags(struct seq_file *m | ||
======= | ||
--- src.orig/fs/nfsd/export.c 2023-05-17 13:18:35.255720621 -0400 | ||
+++ src/fs/nfsd/export.c 2023-05-17 13:18:54.878693899 -0400 | ||
@@ -1300,6 +1300,10 @@ static void exp_flags(struct seq_file *m | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
} | ||
} | ||
|
||
+#include <linux/version.h> | ||
+extern char *kpatch_string(void); | ||
+ | ||
+__attribute__((optimize("-fno-optimize-sibling-calls"))) | ||
static int e_show(struct seq_file *m, void *p) | ||
{ | ||
struct cache_head *cp = p; | ||
<<<<<<< HEAD | ||
@@ -1306,12 +1310,36 @@ static int e_show(struct seq_file *m, vo | ||
======= | ||
@@ -1307,12 +1311,36 @@ static int e_show(struct seq_file *m, vo | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
struct cache_detail *cd = m->private; | ||
bool export_stats = is_export_stats_file(m); | ||
|
||
+#ifdef CONFIG_X86_64 | ||
+ alternative("ud2", "call single_task_running", X86_FEATURE_ALWAYS); | ||
+ alternative("call single_task_running", "ud2", X86_FEATURE_IA64); | ||
+ | ||
+ slow_down_io(); /* paravirt call */ | ||
+#endif | ||
+ | ||
+ pr_debug("kpatch: pr_debug() test\n"); | ||
+ | ||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0) | ||
+{ | ||
+ static DEFINE_STATIC_KEY_TRUE(kpatch_key); | ||
+ | ||
+ if (static_branch_unlikely(&memcg_kmem_enabled_key)) | ||
+ printk("kpatch: memcg_kmem_enabled_key\n"); | ||
+ | ||
+ BUG_ON(!static_branch_likely(&kpatch_key)); | ||
+ static_branch_disable(&kpatch_key); | ||
+ BUG_ON(static_branch_likely(&kpatch_key)); | ||
+ static_branch_enable(&kpatch_key); | ||
+} | ||
+#endif | ||
+ | ||
if (p == SEQ_START_TOKEN) { | ||
seq_puts(m, "# Version 1.1\n"); | ||
if (export_stats) | ||
seq_puts(m, "# Path Client Start-time\n#\tStats\n"); | ||
else | ||
seq_puts(m, "# Path Client(Flags) # IPs\n"); | ||
+ seq_puts(m, kpatch_string()); | ||
return 0; | ||
} | ||
|
||
diff -Nupr src.orig/net/netlink/af_netlink.c src/net/netlink/af_netlink.c | ||
<<<<<<< HEAD | ||
--- src.orig/net/netlink/af_netlink.c 2023-07-14 10:41:06.629434510 -0400 | ||
+++ src/net/netlink/af_netlink.c 2023-07-14 10:41:21.273405708 -0400 | ||
======= | ||
--- src.orig/net/netlink/af_netlink.c 2023-05-17 13:18:35.556720211 -0400 | ||
+++ src/net/netlink/af_netlink.c 2023-05-17 13:18:54.878693899 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -2942,4 +2942,9 @@ panic: | ||
panic("netlink_init: Cannot allocate nl_table\n"); | ||
} | ||
|
||
+char *kpatch_string(void) | ||
+{ | ||
+ return "# kpatch\n"; | ||
+} | ||
+ | ||
core_initcall(netlink_proto_init); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/bin/bash | ||
|
||
SCRIPTDIR="$(readlink -f $(dirname $(type -p $0)))" | ||
|
||
declare -a blacklist=(meminfo-string-LOADED.test) | ||
|
||
source ${SCRIPTDIR}/../common/multiple.template |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
diff -Nupr src.orig/drivers/tty/n_tty.c src/drivers/tty/n_tty.c | ||
<<<<<<< HEAD | ||
--- src.orig/drivers/tty/n_tty.c 2023-07-14 10:41:06.178435397 -0400 | ||
+++ src/drivers/tty/n_tty.c 2023-07-14 10:41:23.942400459 -0400 | ||
======= | ||
--- src.orig/drivers/tty/n_tty.c 2023-05-17 13:18:35.175720729 -0400 | ||
+++ src/drivers/tty/n_tty.c 2023-05-17 13:18:58.489688981 -0400 | ||
>>>>>>> 31ab7d3 (test/integration/rhel-9.3: add kernel-5.14.0-312.el9 tests) | ||
@@ -2253,7 +2253,7 @@ more_to_be_read: | ||
* lock themselves) | ||
*/ | ||
|
||
-static ssize_t n_tty_write(struct tty_struct *tty, struct file *file, | ||
+static ssize_t noinline kpatch_n_tty_write(struct tty_struct *tty, struct file *file, | ||
const unsigned char *buf, size_t nr) | ||
{ | ||
const unsigned char *b = buf; | ||
@@ -2340,6 +2340,12 @@ break_out: | ||
return (b - buf) ? b - buf : retval; | ||
} | ||
|
||
+static ssize_t __attribute__((optimize("-fno-optimize-sibling-calls"))) n_tty_write(struct tty_struct *tty, struct file *file, | ||
+ const unsigned char *buf, size_t nr) | ||
+{ | ||
+ return kpatch_n_tty_write(tty, file, buf, nr); | ||
+} | ||
+ | ||
/** | ||
* n_tty_poll - poll method for N_TTY | ||
* @tty: terminal device |
Oops, something went wrong.