Huawei / TCP_option_address

A kernel module to obtain source IP address in the TCP option section.
GNU General Public License v2.0
183 stars 61 forks source link

兼容 4.17 以上内核 #3

Closed dongzerun closed 1 year ago

dongzerun commented 5 years ago

4.17.0 以上内核的 inet_getname 与 inet6_getname 参数个数及返回值均发生变化,增加条件编绎来适配

spielkind commented 3 years ago

@geanv any chance to get this merged?

Also even with this patch applied TOA is currently not compiling with kernel 5.11:

make CONFIG_TOA=m  -C /lib/modules/`uname -r`/build M=`pwd` modules
make[1]: Entering directory '/usr/lib/modules/5.11.11-arch1-1/build'
  CC [M]  /home/user/TCP_option_address/src/toa.o
/home/user/TCP_option_address/src/toa.c: In function ‘toa_init’:
/home/user/TCP_option_address/src/toa.c:468:49: error: passing argument 4 of ‘proc_create’ from incompatible pointer type [-Werror=incompatible-pointer-types]
  468 |  proc_create("toa_stats", 0, init_net.proc_net, &toa_stats_fops);
      |                                                 ^~~~~~~~~~~~~~~
      |                                                 |
      |                                                 const struct file_operations *
In file included from /home/user/TCP_option_address/src/toa.h:18,
                 from /home/user/TCP_option_address/src/toa.c:1:
./include/linux/proc_fs.h:109:122: note: expected ‘const struct proc_ops *’ but argument is of type ‘const struct file_operations *’
  109 | struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct proc_ops *proc_ops);
      |                                                                                                   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:279: /home/user/TCP_option_address/src/toa.o] Error 1
make[1]: *** [Makefile:1809: /home/user/TCP_option_address/src] Error 2
make[1]: Leaving directory '/usr/lib/modules/5.11.11-arch1-1/build'
make: *** [Makefile:8: default] Error 2
402test commented 3 years ago

Linux version 4.19.90-23.8.v2101.ky10.aarch64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 17 17:07:38 CST 2021 上面是系统内核,使用 <兼容 4.17> 的还是有点问题

make CONFIG_TOA=m -C /lib/modules/uname -r/build M=pwd modules make[1]: 进入目录“/usr/src/kernels/4.19.90-23.8.v2101.ky10.aarch64” CC [M] /root/hcw/TCP_option_address-master/src/toa.o /root/hcw/TCP_option_address-master/src/toa.c: 在函数‘hook_toa_functions’中: /root/hcw/TCP_option_address-master/src/toa.c:316:8: 错误:implicit declaration of function ‘lookup_address’; did you mean ‘lookup_bdev’? [-Werror=implicit-function-declaration] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^~~~~~ lookup_bdev /root/hcw/TCP_option_address-master/src/toa.c:316:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ /root/hcw/TCP_option_address-master/src/toa.c:319:18: 错误:‘_PAGE_RW’ undeclared (first use in this function); did you mean ‘PAGE_S2’? if (pte->pte & ~_PAGE_RW) { ^~~~ PAGE_S2 /root/hcw/TCP_option_address-master/src/toa.c:319:18: 附注:每个未声明的标识符在其出现的函数内只报告一次 /root/hcw/TCP_option_address-master/src/toa.c:345:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ /root/hcw/TCP_option_address-master/src/toa.c: 在函数‘unhook_toa_functions’中: /root/hcw/TCP_option_address-master/src/toa.c:376:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ /root/hcw/TCP_option_address-master/src/toa.c:379:18: 错误:‘_PAGE_RW’ undeclared (first use in this function); did you mean ‘PAGE_S2’? if (pte->pte & ~_PAGE_RW) { ^~~~ PAGE_S2 /root/hcw/TCP_option_address-master/src/toa.c:403:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ cc1:有些警告被当作是错误 make[2]: ** [scripts/Makefile.build:310:/root/hcw/TCP_option_address-master/src/toa.o] 错误 1 make[1]: [Makefile:1541:module/root/hcw/TCP_option_address-master/src] 错误 2 make[1]: 离开目录“/usr/src/kernels/4.19.90-23.8.v2101.ky10.aarch64” make: * [Makefile:8:default] 错误 2

rysinal commented 3 years ago

Linux version 4.19.90-23.8.v2101.ky10.aarch64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 17 17:07:38 CST 2021 上面是系统内核,使用 <兼容 4.17> 的还是有点问题

make CONFIG_TOA=m -C /lib/modules/uname -r/build M=pwd modules make[1]: 进入目录“/usr/src/kernels/4.19.90-23.8.v2101.ky10.aarch64” CC [M] /root/hcw/TCP_option_address-master/src/toa.o /root/hcw/TCP_option_address-master/src/toa.c: 在函数‘hook_toa_functions’中: /root/hcw/TCP_option_address-master/src/toa.c:316:8: 错误:implicit declaration of function ‘lookup_address’; did you mean ‘lookup_bdev’? [-Werror=implicit-function-declaration] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^~~~~~ lookup_bdev /root/hcw/TCP_option_address-master/src/toa.c:316:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ /root/hcw/TCP_option_address-master/src/toa.c:319:18: 错误:‘_PAGE_RW’ undeclared (first use in this function); did you mean ‘PAGE_S2’? if (pte->pte & ~_PAGE_RW) { ^~~~ PAGE_S2 /root/hcw/TCP_option_address-master/src/toa.c:319:18: 附注:每个未声明的标识符在其出现的函数内只报告一次 /root/hcw/TCP_option_address-master/src/toa.c:345:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ /root/hcw/TCP_option_address-master/src/toa.c: 在函数‘unhook_toa_functions’中: /root/hcw/TCP_option_address-master/src/toa.c:376:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ /root/hcw/TCP_option_address-master/src/toa.c:379:18: 错误:‘_PAGE_RW’ undeclared (first use in this function); did you mean ‘PAGE_S2’? if (pte->pte & ~_PAGE_RW) { ^~~~ PAGE_S2 /root/hcw/TCP_option_address-master/src/toa.c:403:6: 警告:赋值时将整数赋给指针,未作类型转换 [-Wint-conversion] pte = lookup_address((unsigned long )inet_stream_ops_p, &level); ^ cc1:有些警告被当作是错误 make[2]: ** [scripts/Makefile.build:310:/root/hcw/TCP_option_address-master/src/toa.o] 错误 1 make[1]: [Makefile:1541:module/root/hcw/TCP_option_address-master/src] 错误 2 make[1]: 离开目录“/usr/src/kernels/4.19.90-23.8.v2101.ky10.aarch64” make: * [Makefile:8:default] 错误 2

你好,请问大佬后面怎么解决的呢

spielkind commented 3 years ago

error: passing argument 4 of ‘proc_create’ from incompatible pointer type [-Werror=incompatible-pointer-types] can be fixed with using proc_ops instead of file_operations https://stackoverflow.com/questions/64931555/how-to-fix-error-passing-argument-4-of-proc-create-from-incompatible-pointer

Anyway since kernel 5.7 kallsyms_lookup_name is not longer exported and the module won't compile.