From ee841df4b258a086a95590d4593c1df406e733c5 Mon Sep 17 00:00:00 2001 From: yugart Date: Wed, 30 Mar 2022 10:02:20 +0000 Subject: [PATCH] init --- 0001-support-arm64.patch | 165 +++++++++++++++++++++++++++++++++++++ 0002-fix-build-error.patch | 27 ++++++ 0003-patch-for-5_10.patch | 107 ++++++++++++++++++++++++ TCP_option_address.tar.gz | Bin 0 -> 13790 bytes toa.spec | 108 ++++++++++++++++++++++++ 5 files changed, 407 insertions(+) create mode 100644 0001-support-arm64.patch create mode 100644 0002-fix-build-error.patch create mode 100644 0003-patch-for-5_10.patch create mode 100644 TCP_option_address.tar.gz create mode 100644 toa.spec diff --git a/0001-support-arm64.patch b/0001-support-arm64.patch new file mode 100644 index 0000000..f0dec88 --- /dev/null +++ b/0001-support-arm64.patch @@ -0,0 +1,165 @@ +From 792c1c14d77dc6013ab730fc8d5267ac07864916 Mon Sep 17 00:00:00 2001 +From: Jiao Fenfang +Date: Wed, 26 Jan 2022 14:37:36 +0800 +Subject: [PATCH] support arm64 + +--- + src/toa.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++----- + src/toa.h | 2 ++ + 2 files changed, 87 insertions(+), 8 deletions(-) + +diff --git a/src/toa.c b/src/toa.c +index e02ef24..2942674 100644 +--- a/src/toa.c ++++ b/src/toa.c +@@ -23,6 +23,50 @@ struct toa_stats_entry toa_stats[] = { + + struct toa_stat_mib *ext_stats; + ++#if defined(CONFIG_ARM64) ++/* ++ * ARM64 interface ++ * Lookup the page table entry for a virtual address. Return a pointer ++ * to the entry and the level of the mapping. ++ * ++ * Note: We return pud and pmd either when the entry is marked large ++ * or when the present bit is not set. Otherwise we would return a ++ * pointer to a nonexisting mapping. ++ */ ++static pte_t *lookup_address(unsigned long address, unsigned int *level) ++{ ++ pgd_t *pgdp; ++ pud_t *pudp, pud; ++ pmd_t *pmdp, pmd; ++ pte_t *ptep; ++ unsigned long addr = address; ++ ++ unsigned long init_mm = kallsyms_lookup_name("init_mm"); ++ if (!init_mm) { ++ TOA_INFO("CPU [%u] lookup_address init_mm null\n", smp_processor_id()); ++ return NULL; ++ } ++ ++ /*pgdp = pgd_offset_k(addr);*/ ++ pgdp = pgd_offset((struct mm_struct *)init_mm, addr); ++ if (pgd_none(READ_ONCE(*pgdp))) ++ return NULL; ++ ++ pudp = pud_offset(pgdp, addr); ++ pud = READ_ONCE(*pudp); ++ if (pud_none(pud)) ++ return NULL; ++ ++ pmdp = pmd_offset(pudp, addr); ++ pmd = READ_ONCE(*pmdp); ++ if (pmd_none(pmd)) ++ return NULL; ++ ++ ptep = pte_offset_kernel(pmdp, addr); ++ return ptep; ++} ++#endif ++ + /* + * Funcs for toa hooks + */ +@@ -304,6 +348,7 @@ hook_toa_functions(void) + /* hook tcp_v4_syn_recv_sock for ipv4 */ + struct inet_connection_sock_af_ops *ipv4_specific_p = + (struct inet_connection_sock_af_ops *)&ipv4_specific; ++ + #ifdef CONFIG_IP_VS_TOA_IPV6 + /* hook inet6_getname for ipv6 */ + struct proto_ops *inet6_stream_ops_p = +@@ -316,9 +361,18 @@ hook_toa_functions(void) + pte = lookup_address((unsigned long )inet_stream_ops_p, &level); + if (pte == NULL) + return 1; +- if (pte->pte & ~_PAGE_RW) { +- pte->pte |= _PAGE_RW; +- } ++ ++#if defined(CONFIG_ARM64) ++ *pte = pte_mkwrite(*pte); ++ __sync_icache_dcache(*pte); ++ flush_tlb_all(); ++#else ++ if (pte->pte & ~_PAGE_RW) { ++ pte->pte |= _PAGE_RW; ++ } ++#endif ++ /*TOA_INFO("CPU [%u] hooked before inet_getname <%p> --> <%p>\n", ++ smp_processor_id(), inet_getname, inet_getname_toa);*/ + + inet_stream_ops_p->getname = inet_getname_toa; + TOA_INFO("CPU [%u] hooked inet_getname <%p> --> <%p>\n", +@@ -345,7 +399,14 @@ hook_toa_functions(void) + pte = lookup_address((unsigned long )inet_stream_ops_p, &level); + if (pte == NULL) + return 1; +- pte->pte |= pte->pte &~_PAGE_RW; ++ ++#if defined(CONFIG_ARM64) ++ *pte = pte_wrprotect(*pte); ++ __sync_icache_dcache(*pte); ++ flush_tlb_all(); ++#else ++ pte->pte |= pte->pte &~_PAGE_RW; ++#endif + + return 0; + } +@@ -376,9 +437,18 @@ unhook_toa_functions(void) + pte = lookup_address((unsigned long )inet_stream_ops_p, &level); + if (pte == NULL) + return 1; +- if (pte->pte & ~_PAGE_RW) { +- pte->pte |= _PAGE_RW; +- } ++ ++#if defined(CONFIG_ARM64) ++ *pte = pte_mkwrite(*pte); ++ __sync_icache_dcache(*pte); ++ flush_tlb_all(); ++#else ++ if (pte->pte & ~_PAGE_RW) { ++ pte->pte |= _PAGE_RW; ++ } ++#endif ++ /*TOA_INFO("CPU [%u] unhooked before inet_getname: %p\n", ++ smp_processor_id(), inet_getname);*/ + + inet_stream_ops_p->getname = inet_getname; + TOA_INFO("CPU [%u] unhooked inet_getname\n", +@@ -403,7 +473,14 @@ unhook_toa_functions(void) + pte = lookup_address((unsigned long )inet_stream_ops_p, &level); + if (pte == NULL) + return 1; +- pte->pte |= pte->pte &~_PAGE_RW; ++ ++#if defined(CONFIG_ARM64) ++ *pte = pte_wrprotect(*pte); ++ __sync_icache_dcache(*pte); ++ flush_tlb_all(); ++#else ++ pte->pte |= pte->pte &~_PAGE_RW; ++#endif + + return 0; + } +diff --git a/src/toa.h b/src/toa.h +index b47fac3..a46f82d 100644 +--- a/src/toa.h ++++ b/src/toa.h +@@ -20,6 +20,8 @@ + #include + #include + ++#include ++ + #define TOA_VERSION "1.0.0.0" + + #ifdef TOA_DBG_MSG +-- +2.20.1 + diff --git a/0002-fix-build-error.patch b/0002-fix-build-error.patch new file mode 100644 index 0000000..eca1953 --- /dev/null +++ b/0002-fix-build-error.patch @@ -0,0 +1,27 @@ +diff --git a/src/Makefile b/src/Makefile +index 155146d..7f61dba 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -4,15 +4,17 @@ + + obj-$(CONFIG_TOA) += toa.o + ++kerver=$(shell rpm -q kernel-devel --queryformat=%{VERSION}-%{RELEASE}.%{ARCH}) ++ + default: +- make CONFIG_TOA=m -C /lib/modules/`uname -r`/build M=`pwd` modules ++ make CONFIG_TOA=m -C /lib/modules/${kerver}/build M=`pwd` modules + + debug: +- make CONFIG_TOA=m -C /lib/modules/`uname -r`/build M=`pwd` modules EXTRA_CFLAGS="-DTOA_DBG_MSG" ++ make CONFIG_TOA=m -C /lib/modules/${kerver}/build M=`pwd` modules EXTRA_CFLAGS="-DTOA_DBG_MSG" + clean: + rm -f .*.cmd *.o *.ko *.mod.c modules.order Module.symvers + rm -rf .tmp_versions + install: +- test -d "$(DESTDIR)/lib/modules/`uname -r`/extra/net/toa" \ +- || mkdir -p "$(DESTDIR)/lib/modules/`uname -r`/extra/net/toa" +- cp *.ko "$(DESTDIR)/lib/modules/`uname -r`/extra/net/toa" ++ test -d "$(DESTDIR)/lib/modules/${kerver}/extra/net/toa" \ ++ || mkdir -p "$(DESTDIR)/lib/modules/${kerver}/extra/net/toa" ++ cp *.ko "$(DESTDIR)/lib/modules/${kerver}/extra/net/toa" diff --git a/0003-patch-for-5_10.patch b/0003-patch-for-5_10.patch new file mode 100644 index 0000000..2a31afd --- /dev/null +++ b/0003-patch-for-5_10.patch @@ -0,0 +1,107 @@ +diff --git a/src/toa.c b/src/toa.c +index 2942674..82382f9 100644 +--- a/src/toa.c ++++ b/src/toa.c +@@ -1,3 +1,4 @@ ++#include + #include "toa.h" + + /* +@@ -7,6 +8,9 @@ + + unsigned long sk_data_ready_addr = 0; + ++typedef unsigned long (*kallsyms_lookup_name_fun_t)(const char *name); ++static kallsyms_lookup_name_fun_t kallsyms_lookup_name_fun; ++ + /* + * Statistics of toa in proc /proc/net/toa_stats + */ +@@ -23,6 +27,23 @@ struct toa_stats_entry toa_stats[] = { + + struct toa_stat_mib *ext_stats; + ++static int toa_get_kallsyms_lookup_name_addr(void) ++{ ++ static struct kprobe kp = { ++ .symbol_name = "kallsyms_lookup_name", ++ }; ++ ++ if (register_kprobe(&kp) < 0) ++ return -1; ++ ++ if (!kallsyms_lookup_name_fun) { ++ kallsyms_lookup_name_fun = (kallsyms_lookup_name_fun_t)kp.addr; ++ } ++ unregister_kprobe(&kp); ++ ++ return 0; ++} ++ + #if defined(CONFIG_ARM64) + /* + * ARM64 interface +@@ -41,7 +62,7 @@ static pte_t *lookup_address(unsigned long address, unsigned int *level) + pte_t *ptep; + unsigned long addr = address; + +- unsigned long init_mm = kallsyms_lookup_name("init_mm"); ++ unsigned long init_mm = kallsyms_lookup_name_fun("init_mm"); + if (!init_mm) { + TOA_INFO("CPU [%u] lookup_address init_mm null\n", smp_processor_id()); + return NULL; +@@ -52,7 +73,7 @@ static pte_t *lookup_address(unsigned long address, unsigned int *level) + if (pgd_none(READ_ONCE(*pgdp))) + return NULL; + +- pudp = pud_offset(pgdp, addr); ++ pudp = pud_offset((p4d_t *)pgdp, addr); + pud = READ_ONCE(*pudp); + if (pud_none(pud)) + return NULL; +@@ -522,6 +543,14 @@ static int toa_stats_seq_open(struct inode *inode, struct file *file) + return single_open(file, toa_stats_show, NULL); + } + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0) ++static const struct proc_ops toa_stats_fops = { ++ .proc_open = toa_stats_seq_open, ++ .proc_read = seq_read, ++ .proc_lseek = seq_lseek, ++ .proc_release = single_release, ++}; ++#else + static const struct file_operations toa_stats_fops = { + .owner = THIS_MODULE, + .open = toa_stats_seq_open, +@@ -529,6 +558,7 @@ static const struct file_operations toa_stats_fops = { + .llseek = seq_lseek, + .release = single_release, + }; ++#endif + + /* + * TOA module init and destory +@@ -538,6 +568,13 @@ static const struct file_operations toa_stats_fops = { + static int __init + toa_init(void) + { ++ int ret = -1; ++ ++ ret = toa_get_kallsyms_lookup_name_addr(); ++ if (ret < 0) { ++ return 1; ++ } ++ + /* alloc statistics array for toa */ + ext_stats = alloc_percpu(struct toa_stat_mib); + if (NULL == ext_stats) +@@ -547,7 +584,7 @@ toa_init(void) + /* get the address of function sock_def_readable + * so later we can know whether the sock is for rpc, tux or others + */ +- sk_data_ready_addr = kallsyms_lookup_name("sock_def_readable"); ++ sk_data_ready_addr = kallsyms_lookup_name_fun("sock_def_readable"); + TOA_INFO("CPU [%u] sk_data_ready_addr = " + "kallsyms_lookup_name(sock_def_readable) = %lu\n", + smp_processor_id(), sk_data_ready_addr); diff --git a/TCP_option_address.tar.gz b/TCP_option_address.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ec88ef96a18ca72f119558c1cfe9caeae126b7d4 GIT binary patch literal 13790 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 U&*#tQ&&r?w4>9J-9RTnE0JNG1a{vGU literal 0 HcmV?d00001 diff --git a/toa.spec b/toa.spec new file mode 100644 index 0000000..5413f3c --- /dev/null +++ b/toa.spec @@ -0,0 +1,108 @@ +%global debug_package %{nil} +# macros for finding system files to update at install time (pci.ids, pcitable) +%define find() %(for f in %*; do if [ -e $f ]; then echo $f; break; fi; done) + +Name: TCP_option_address +Summary: Intel(R) Ethernet Adaptive Virtual Function Driver +Version: 1.0.0 +Release: 1 +#Release: 0.%{krelver} +Vendor: Huawei +License: GPL-2.0 +URL: https://github.com/dongzerun/TCP_option_address +Source0: TCP_option_address.tar.gz + +Patch0001: 0001-support-arm64.patch +Patch0002: 0002-fix-build-error.patch +Patch0003: 0003-patch-for-5_10.patch + +Requires: kernel, findutils, gawk, bash + +BuildRequires: kernel-devel hwdata rpm + +%description +The TCP Option Address (TOA) module is a kernel module that obtains the source IPv4 address from the option section of a TCP header. + +%prep +%autosetup -n %{name} -p1 + +%build +make -C src clean +make -C src + +%install +make -C src DESTDIR=%{buildroot} install +# Remove modules files that we do not want to include +find %{buildroot}/lib/modules/ -name 'modules.*' -exec rm -f {} \; +cd %{buildroot} +find lib -name "toa" \ + -fprintf %{_builddir}/%{name}/file.list "/%p\n" + + +%clean +rm -rf %{buildroot} + +%files -f file.list +%defattr(-,root,root) +%doc README.md file.list +%license LICENSE NOTICE + +%post +uname -r | grep BOOT || /sbin/depmod -a > /dev/null 2>&1 || true + +if which dracut >/dev/null 2>&1; then + echo "Updating initramfs with dracut..." + if dracut --force ; then + echo "Successfully updated initramfs." + else + echo "Failed to update initramfs." + echo "You must update your initramfs image for changes to take place." + exit -1 + fi +elif which mkinitrd >/dev/null 2>&1; then + echo "Updating initrd with mkinitrd..." + if mkinitrd; then + echo "Successfully updated initrd." + else + echo "Failed to update initrd." + echo "You must update your initrd image for changes to take place." + exit -1 + fi +else + echo "Unable to determine utility to update initrd image." + echo "You must update your initrd manually for changes to take place." + exit -1 +fi + +%preun + +%postun +uname -r | grep BOOT || /sbin/depmod -a > /dev/null 2>&1 || true + +if which dracut >/dev/null 2>&1; then + echo "Updating initramfs with dracut..." + if dracut --force ; then + echo "Successfully updated initramfs." + else + echo "Failed to update initramfs." + echo "You must update your initramfs image for changes to take place." + exit -1 + fi +elif which mkinitrd >/dev/null 2>&1; then + echo "Updating initrd with mkinitrd..." + if mkinitrd; then + echo "Successfully updated initrd." + else + echo "Failed to update initrd." + echo "You must update your initrd image for changes to take place." + exit -1 + fi +else + echo "Unable to determine utility to update initrd image." + echo "You must update your initrd manually for changes to take place." + exit -1 +fi + +%changelog +* Mon Jan 24 2022 jiaofenfang - 1.0.0-1 +- Package init