1 #ifndef CREATE_SYSCALL_TABLE
3 #define OVERRIDE_64_connect
4 SC_LTTNG_TRACEPOINT_EVENT_CODE(connect
,
5 TP_PROTO(sc_exit(long ret
,) int fd
, struct sockaddr __user
* uservaddr
, int addrlen
),
6 TP_ARGS(sc_exit(ret
,) fd
, uservaddr
, addrlen
),
8 __typeof__(uservaddr
->sa_family
) sa_family
;
12 unsigned int v4addr_len
, v6addr_len
;
16 memset(tp_locvar
, 0, sizeof(*tp_locvar
));
17 if (addrlen
< sizeof(tp_locvar
->sa_family
))
19 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar
->sa_family
,
20 &uservaddr
->sa_family
, sizeof(tp_locvar
->sa_family
));
21 switch (tp_locvar
->sa_family
) {
23 if (addrlen
< sizeof(struct sockaddr_in
))
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
));
31 tp_locvar
->v4addr_len
= 4;
34 if (addrlen
< sizeof(struct sockaddr_in6
))
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
,
41 sizeof(tp_locvar
->v6addr
)))
42 memset(tp_locvar
->v6addr
, 0, sizeof(tp_locvar
->v6addr
));
43 tp_locvar
->v6addr_len
= 8;
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
))
54 sc_in(ctf_integer(unsigned short, family
, tp_locvar
->sa_family
))
55 sc_in(ctf_integer_network(uint16_t, dport
, tp_locvar
->dport
))
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
))
62 #define LTTNG_SYSCALL_ACCEPT_locvar \
63 __typeof__(upeer_sockaddr->sa_family) sa_family;\
67 int v4addr_len, v6addr_len; \
70 #define LTTNG_SYSCALL_ACCEPT_code_pre \
72 memset(tp_locvar, 0, sizeof(*tp_locvar)); \
73 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->uaddr_len, \
74 upeer_addrlen, sizeof(tp_locvar->uaddr_len)); \
77 if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \
79 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, \
80 &upeer_sockaddr->sa_family, sizeof(tp_locvar->sa_family)); \
81 switch (tp_locvar->sa_family) { \
83 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \
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)); \
91 tp_locvar->v4addr_len = 4; \
94 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \
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, \
101 sizeof(tp_locvar->v6addr))) \
102 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); \
103 tp_locvar->v6addr_len = 8; \
109 #define OVERRIDE_64_accept
110 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept
,
111 TP_PROTO(sc_exit(long ret
,) int fd
, struct sockaddr __user
* upeer_sockaddr
, int __user
* upeer_addrlen
),
112 TP_ARGS(sc_exit(ret
,) fd
, upeer_sockaddr
, upeer_addrlen
),
114 LTTNG_SYSCALL_ACCEPT_locvar
117 LTTNG_SYSCALL_ACCEPT_code_pre
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
))
124 sc_out(ctf_integer(unsigned short, family
, tp_locvar
->sa_family
))
125 sc_out(ctf_integer_network(uint16_t, sport
, tp_locvar
->sport
))
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
))
132 #define OVERRIDE_64_accept4
133 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4
,
134 TP_PROTO(sc_exit(long ret
,) int fd
, struct sockaddr __user
* upeer_sockaddr
, int __user
* upeer_addrlen
, int flags
),
135 TP_ARGS(sc_exit(ret
,) fd
, upeer_sockaddr
, upeer_addrlen
, flags
),
137 LTTNG_SYSCALL_ACCEPT_locvar
140 LTTNG_SYSCALL_ACCEPT_code_pre
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
))
148 sc_out(ctf_integer(unsigned short, family
, tp_locvar
->sa_family
))
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
))
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))
165 #else /* CREATE_SYSCALL_TABLE */
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)
174 #endif /* CREATE_SYSCALL_TABLE */