Commit | Line | Data |
---|---|---|
cac8f1aa MD |
1 | #ifndef CREATE_SYSCALL_TABLE |
2 | ||
7ca580f8 | 3 | #define OVERRIDE_64_connect |
cb3ef14c | 4 | SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, |
924397cb | 5 | TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * uservaddr, int addrlen), |
7ca580f8 MD |
6 | TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), |
7 | TP_locvar( | |
8 | __typeof__(uservaddr->sa_family) sa_family; | |
9 | uint16_t dport; | |
10 | uint32_t v4addr; | |
11 | uint16_t v6addr[8]; | |
5e6f60b2 | 12 | unsigned int v4addr_len, v6addr_len; |
7ca580f8 | 13 | ), |
265822ae | 14 | TP_code_pre( |
7ca580f8 MD |
15 | sc_in( |
16 | memset(tp_locvar, 0, sizeof(*tp_locvar)); | |
f6083fac | 17 | if (addrlen < sizeof(tp_locvar->sa_family)) |
7ca580f8 | 18 | goto skip_code; |
924397cb MD |
19 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, |
20 | &uservaddr->sa_family, sizeof(tp_locvar->sa_family)); | |
7ca580f8 MD |
21 | switch (tp_locvar->sa_family) { |
22 | case AF_INET: | |
23 | if (addrlen < sizeof(struct sockaddr_in)) | |
24 | goto skip_code; | |
924397cb MD |
25 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport, |
26 | &((struct sockaddr_in __user *) uservaddr)->sin_port, | |
27 | sizeof(tp_locvar->dport)); | |
28 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, | |
29 | &((struct sockaddr_in __user *) uservaddr)->sin_addr.s_addr, | |
30 | sizeof(tp_locvar->v4addr)); | |
7ca580f8 MD |
31 | tp_locvar->v4addr_len = 4; |
32 | break; | |
33 | case AF_INET6: | |
34 | if (addrlen < sizeof(struct sockaddr_in6)) | |
35 | goto skip_code; | |
924397cb MD |
36 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport, |
37 | &((struct sockaddr_in6 __user *) uservaddr)->sin6_port, | |
38 | sizeof(tp_locvar->dport)); | |
39 | if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, | |
40 | &((struct sockaddr_in6 __user *) uservaddr)->sin6_addr.in6_u.u6_addr8, | |
b43aa94e MD |
41 | sizeof(tp_locvar->v6addr))) |
42 | memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); | |
7ca580f8 MD |
43 | tp_locvar->v6addr_len = 8; |
44 | break; | |
45 | } | |
46 | skip_code: | |
47 | ) | |
48 | ), | |
57ede728 MD |
49 | TP_FIELDS( |
50 | sc_exit(ctf_integer(long, ret, ret)) | |
51 | sc_in(ctf_integer(int, fd, fd)) | |
52 | sc_in(ctf_integer_hex(struct sockaddr *, uservaddr, uservaddr)) | |
53 | sc_in(ctf_integer_hex(int, addrlen, addrlen)) | |
d1abf04d | 54 | sc_in(ctf_integer(unsigned short, family, tp_locvar->sa_family)) |
57ede728 | 55 | sc_in(ctf_integer_network(uint16_t, dport, tp_locvar->dport)) |
5e6f60b2 MD |
56 | sc_in(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len)) |
57 | sc_in(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len)) | |
265822ae MD |
58 | ), |
59 | TP_code_post() | |
7ca580f8 MD |
60 | ) |
61 | ||
d549e5c1 JG |
62 | #define LTTNG_SYSCALL_ACCEPT_locvar \ |
63 | __typeof__(upeer_sockaddr->sa_family) sa_family;\ | |
64 | uint16_t sport; \ | |
65 | uint32_t v4addr; \ | |
66 | uint16_t v6addr[8]; \ | |
67 | int v4addr_len, v6addr_len; \ | |
68 | int uaddr_len; | |
69 | ||
70 | #define LTTNG_SYSCALL_ACCEPT_code_pre \ | |
71 | sc_inout( \ | |
72 | memset(tp_locvar, 0, sizeof(*tp_locvar)); \ | |
924397cb MD |
73 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->uaddr_len, \ |
74 | upeer_addrlen, sizeof(tp_locvar->uaddr_len)); \ | |
d549e5c1 JG |
75 | ) \ |
76 | sc_out( \ | |
f6083fac | 77 | if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \ |
d549e5c1 | 78 | goto skip_code; \ |
924397cb MD |
79 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, \ |
80 | &upeer_sockaddr->sa_family, sizeof(tp_locvar->sa_family)); \ | |
d549e5c1 JG |
81 | switch (tp_locvar->sa_family) { \ |
82 | case AF_INET: \ | |
83 | if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \ | |
84 | goto skip_code; \ | |
924397cb MD |
85 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \ |
86 | &((struct sockaddr_in __user *) upeer_sockaddr)->sin_port, \ | |
87 | sizeof(tp_locvar->sport)); \ | |
88 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, \ | |
89 | &((struct sockaddr_in __user *) upeer_sockaddr)->sin_addr.s_addr, \ | |
90 | sizeof(tp_locvar->v4addr)); \ | |
d549e5c1 JG |
91 | tp_locvar->v4addr_len = 4; \ |
92 | break; \ | |
93 | case AF_INET6: \ | |
94 | if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \ | |
95 | goto skip_code; \ | |
924397cb MD |
96 | (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \ |
97 | &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_port, \ | |
98 | sizeof(tp_locvar->sport)); \ | |
99 | if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, \ | |
100 | &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8, \ | |
d549e5c1 JG |
101 | sizeof(tp_locvar->v6addr))) \ |
102 | memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); \ | |
103 | tp_locvar->v6addr_len = 8; \ | |
104 | break; \ | |
105 | } \ | |
106 | skip_code: \ | |
107 | ) | |
108 | ||
7ca580f8 | 109 | #define OVERRIDE_64_accept |
cb3ef14c | 110 | SC_LTTNG_TRACEPOINT_EVENT_CODE(accept, |
924397cb | 111 | TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen), |
7ca580f8 MD |
112 | TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), |
113 | TP_locvar( | |
d549e5c1 | 114 | LTTNG_SYSCALL_ACCEPT_locvar |
7ca580f8 | 115 | ), |
265822ae | 116 | TP_code_pre( |
d549e5c1 | 117 | LTTNG_SYSCALL_ACCEPT_code_pre |
7ca580f8 | 118 | ), |
57ede728 MD |
119 | TP_FIELDS( |
120 | sc_exit(ctf_integer(long, ret, ret)) | |
121 | sc_in(ctf_integer(int, fd, fd)) | |
122 | sc_in(ctf_integer_hex(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) | |
123 | sc_inout(ctf_integer(int, upeer_addrlen, tp_locvar->uaddr_len)) | |
d1abf04d | 124 | sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family)) |
57ede728 | 125 | sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport)) |
b06d8b69 MD |
126 | sc_out(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len)) |
127 | sc_out(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len)) | |
265822ae MD |
128 | ), |
129 | TP_code_post() | |
7ca580f8 MD |
130 | ) |
131 | ||
2365a428 JG |
132 | #define OVERRIDE_64_accept4 |
133 | SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4, | |
924397cb | 134 | TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen, int flags), |
2365a428 JG |
135 | TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), |
136 | TP_locvar( | |
d549e5c1 | 137 | LTTNG_SYSCALL_ACCEPT_locvar |
2365a428 JG |
138 | ), |
139 | TP_code_pre( | |
d549e5c1 | 140 | LTTNG_SYSCALL_ACCEPT_code_pre |
2365a428 JG |
141 | ), |
142 | TP_FIELDS( | |
143 | sc_exit(ctf_integer(long, ret, ret)) | |
144 | sc_in(ctf_integer(int, fd, fd)) | |
145 | sc_in(ctf_integer_hex(struct sockaddr *, upeer_sockaddr, upeer_sockaddr)) | |
146 | sc_inout(ctf_integer(int, upeer_addrlen, tp_locvar->uaddr_len)) | |
147 | sc_in(ctf_integer_hex(int, flags, flags)) | |
d1abf04d | 148 | sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family)) |
2365a428 JG |
149 | sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport)) |
150 | sc_out(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len)) | |
151 | sc_out(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len)) | |
152 | ), | |
153 | TP_code_post() | |
154 | ) | |
155 | ||
5539ecc8 LP |
156 | #define OVERRIDE_64_pipe |
157 | SC_LTTNG_TRACEPOINT_EVENT(pipe, | |
158 | TP_PROTO(sc_exit(long ret,) int * fildes), | |
159 | TP_ARGS(sc_exit(ret,) fildes), | |
160 | TP_FIELDS(sc_exit(ctf_integer(long, ret, ret)) | |
161 | sc_out(ctf_user_array(int, fildes, fildes, 2)) | |
162 | ) | |
163 | ) | |
164 | ||
cac8f1aa MD |
165 | #else /* CREATE_SYSCALL_TABLE */ |
166 | ||
644d6e9c MD |
167 | #define OVERRIDE_TABLE_64_clone |
168 | TRACE_SYSCALL_TABLE(clone, clone, 56, 5) | |
169 | #define OVERRIDE_TABLE_64_execve | |
170 | TRACE_SYSCALL_TABLE(execve, execve, 59, 3) | |
171 | #define OVERRIDE_TABLE_64_getcpu | |
172 | TRACE_SYSCALL_TABLE(getcpu, getcpu, 309, 3) | |
e42e81fd | 173 | |
cac8f1aa | 174 | #endif /* CREATE_SYSCALL_TABLE */ |