1 /* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */
3 #ifndef CREATE_SYSCALL_TABLE
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
),
10 __typeof__(uservaddr
->sa_family
) sa_family
;
14 unsigned int v4addr_len
, v6addr_len
;
18 memset(tp_locvar
, 0, sizeof(*tp_locvar
));
19 if (addrlen
< sizeof(tp_locvar
->sa_family
))
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
) {
25 if (addrlen
< sizeof(struct sockaddr_in
))
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;
36 if (addrlen
< sizeof(struct sockaddr_in6
))
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;
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
))
64 #define LTTNG_SYSCALL_ACCEPT_locvar \
65 __typeof__(upeer_sockaddr->sa_family) sa_family;\
69 int v4addr_len, v6addr_len; \
72 #define LTTNG_SYSCALL_ACCEPT_code_pre \
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)); \
79 if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \
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) { \
85 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \
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; \
96 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \
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; \
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
),
116 LTTNG_SYSCALL_ACCEPT_locvar
119 LTTNG_SYSCALL_ACCEPT_code_pre
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
))
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
),
139 LTTNG_SYSCALL_ACCEPT_locvar
142 LTTNG_SYSCALL_ACCEPT_code_pre
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
))
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))
167 #else /* CREATE_SYSCALL_TABLE */
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)
176 #endif /* CREATE_SYSCALL_TABLE */