-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathutils.c
40 lines (31 loc) · 845 Bytes
/
utils.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* utils.c
* Copyright (C) 2016 [email protected]
* 2016-02-14
*/
#include <linux/module.h>
#include <linux/syscalls.h>
#include "ca.h"
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0)
#define sys_close ksys_close
#endif
unsigned long **find_sys_call_table(void) {
unsigned long ptr;
unsigned long *p;
IP_VS_CA_DBG("Found the sys_call_table!!!\n");
for (ptr = (unsigned long)sys_close;
ptr < (unsigned long)&loops_per_jiffy;
ptr += sizeof(void *)) {
p = (unsigned long *)ptr;
if (p[__NR_close] == (unsigned long)sys_close) {
IP_VS_CA_DBG("Found the sys_call_table!!! __NR_close[%d] sys_close[%lx]\n"
" __NR_getpeername[%d] sct[__NR_getpeername][0x%lx]\n",
__NR_close,
(unsigned long)sys_close,
__NR_getpeername,
p[__NR_getpeername]);
return (unsigned long **)p;
}
}
return NULL;
}