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