Cleanup: Move instrumentation/ headers to include/instrumentation/
[lttng-modules.git] / include / instrumentation / syscalls / headers / x86-64-syscalls_pointers_override.h
1 /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) */
2
3 #ifndef CREATE_SYSCALL_TABLE
4
5 #define OVERRIDE_64_connect
6 SC_LTTNG_TRACEPOINT_EVENT_CODE(connect,
7 TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * uservaddr, int addrlen),
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];
14 unsigned int v4addr_len, v6addr_len;
15 ),
16 TP_code_pre(
17 sc_in(
18 memset(tp_locvar, 0, sizeof(*tp_locvar));
19 if (addrlen < sizeof(tp_locvar->sa_family))
20 goto skip_code;
21 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family,
22 &uservaddr->sa_family, sizeof(tp_locvar->sa_family));
23 switch (tp_locvar->sa_family) {
24 case AF_INET:
25 if (addrlen < sizeof(struct sockaddr_in))
26 goto skip_code;
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));
33 tp_locvar->v4addr_len = 4;
34 break;
35 case AF_INET6:
36 if (addrlen < sizeof(struct sockaddr_in6))
37 goto skip_code;
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,
43 sizeof(tp_locvar->v6addr)))
44 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr));
45 tp_locvar->v6addr_len = 8;
46 break;
47 }
48 skip_code:
49 )
50 ),
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))
56 sc_in(ctf_integer(unsigned short, family, tp_locvar->sa_family))
57 sc_in(ctf_integer_network(uint16_t, dport, tp_locvar->dport))
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))
60 ),
61 TP_code_post()
62 )
63
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)); \
75 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->uaddr_len, \
76 upeer_addrlen, sizeof(tp_locvar->uaddr_len)); \
77 ) \
78 sc_out( \
79 if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \
80 goto skip_code; \
81 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, \
82 &upeer_sockaddr->sa_family, sizeof(tp_locvar->sa_family)); \
83 switch (tp_locvar->sa_family) { \
84 case AF_INET: \
85 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \
86 goto skip_code; \
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)); \
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; \
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, \
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
111 #define OVERRIDE_64_accept
112 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept,
113 TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen),
114 TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen),
115 TP_locvar(
116 LTTNG_SYSCALL_ACCEPT_locvar
117 ),
118 TP_code_pre(
119 LTTNG_SYSCALL_ACCEPT_code_pre
120 ),
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))
126 sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family))
127 sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport))
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))
130 ),
131 TP_code_post()
132 )
133
134 #define OVERRIDE_64_accept4
135 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4,
136 TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen, int flags),
137 TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags),
138 TP_locvar(
139 LTTNG_SYSCALL_ACCEPT_locvar
140 ),
141 TP_code_pre(
142 LTTNG_SYSCALL_ACCEPT_code_pre
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))
150 sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family))
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
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
167 #else /* CREATE_SYSCALL_TABLE */
168
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)
175
176 #endif /* CREATE_SYSCALL_TABLE */
This page took 0.034686 seconds and 4 git commands to generate.