Merged patch 1 and 2 into master. Fixup added: using LTTNG_SYSCALL_ACCEPT_locvar
in the accept4 code too.

Thanks,

Mathieu

----- On Aug 29, 2016, at 4:02 PM, Jeremie Galarneau 
[email protected] wrote:

> Signed-off-by: Jérémie Galarneau <[email protected]>
> ---
> .../x86-64-syscalls-3.10.0-rc7_pointers_override.h | 106 ++++++++-------------
> 1 file changed, 42 insertions(+), 64 deletions(-)
> 
> diff --git
> a/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h
> b/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h
> index 6c59790..9d94aee 100644
> ---
> a/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h
> +++
> b/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h
> @@ -52,48 +52,54 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(connect,
>       TP_code_post()
> )
> 
> +#define LTTNG_SYSCALL_ACCEPT_locvar                  \
> +     __typeof__(upeer_sockaddr->sa_family) sa_family;\
> +     uint16_t sport;                                 \
> +     uint32_t v4addr;                                \
> +     uint16_t v6addr[8];                             \
> +     int v4addr_len, v6addr_len;                     \
> +     int uaddr_len;
> +
> +#define LTTNG_SYSCALL_ACCEPT_code_pre                                        
>                                                 \
> +     sc_inout(                                                               
>                                         \
> +             memset(tp_locvar, 0, sizeof(*tp_locvar));                       
>                                         \
> +             (void) get_user(tp_locvar->uaddr_len, upeer_addrlen);           
>                                         \
> +     )                                                                       
>                                         \
> +     sc_out(                                                                 
>                                         \
> +             if (tp_locvar->uaddr_len < sizeof(struct sockaddr))             
>                                         \
> +                     goto skip_code;                                         
>                                         \
> +             (void) get_user(tp_locvar->sa_family, 
> &upeer_sockaddr->sa_family);                                      \
> +             switch (tp_locvar->sa_family) {                                 
>                                         \
> +             case AF_INET:                                                   
>                                         \
> +                     if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in))  
>                                         \
> +                             goto skip_code;                                 
>                                         \
> +                     (void) get_user(tp_locvar->sport, &((struct sockaddr_in 
> *)
> upeer_sockaddr)->sin_port);           \
> +                     (void) get_user(tp_locvar->v4addr, &((struct 
> sockaddr_in *)
> upeer_sockaddr)->sin_addr.s_addr);    \
> +                     tp_locvar->v4addr_len = 4;                              
>                                         \
> +                     break;                                                  
>                                         \
> +             case AF_INET6:                                                  
>                                         \
> +                     if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) 
>                                         \
> +                             goto skip_code;                                 
>                                         \
> +                     (void) get_user(tp_locvar->sport, &((struct 
> sockaddr_in6 *)
> upeer_sockaddr)->sin6_port);  \
> +                     if (copy_from_user(tp_locvar->v6addr,                   
>                                         \
> +                                     &((struct sockaddr_in6 *) 
> upeer_sockaddr)->sin6_addr.in6_u.u6_addr8,            \
> +                                     sizeof(tp_locvar->v6addr)))             
>                                         \
> +                             memset(tp_locvar->v6addr, 0, 
> sizeof(tp_locvar->v6addr));                                \
> +                     tp_locvar->v6addr_len = 8;                              
>                                         \
> +                     break;                                                  
>                                         \
> +             }                                                               
>                                         \
> +     skip_code:                                                              
>                                         \
> +     )
> +
> #define OVERRIDE_64_accept
> SC_LTTNG_TRACEPOINT_EVENT_CODE(accept,
>       TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, 
> int *
>       upeer_addrlen),
>       TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen),
>       TP_locvar(
> -             __typeof__(upeer_sockaddr->sa_family) sa_family;
> -             uint16_t sport;
> -             uint32_t v4addr;
> -             uint16_t v6addr[8];
> -             int v4addr_len, v6addr_len;
> -             int uaddr_len;
> +             LTTNG_SYSCALL_ACCEPT_locvar
>       ),
>       TP_code_pre(
> -             sc_inout(
> -                     memset(tp_locvar, 0, sizeof(*tp_locvar));
> -                     (void) get_user(tp_locvar->uaddr_len, upeer_addrlen);
> -             )
> -             sc_out(
> -                     if (tp_locvar->uaddr_len < sizeof(struct sockaddr))
> -                             goto skip_code;
> -                     (void) get_user(tp_locvar->sa_family, 
> &upeer_sockaddr->sa_family);
> -                     switch (tp_locvar->sa_family) {
> -                     case AF_INET:
> -                             if (tp_locvar->uaddr_len < sizeof(struct 
> sockaddr_in))
> -                                     goto skip_code;
> -                             (void) get_user(tp_locvar->sport, &((struct 
> sockaddr_in *)
> upeer_sockaddr)->sin_port);
> -                             (void) get_user(tp_locvar->v4addr, &((struct 
> sockaddr_in *)
> upeer_sockaddr)->sin_addr.s_addr);
> -                             tp_locvar->v4addr_len = 4;
> -                             break;
> -                     case AF_INET6:
> -                             if (tp_locvar->uaddr_len < sizeof(struct 
> sockaddr_in6))
> -                                     goto skip_code;
> -                             (void) get_user(tp_locvar->sport, &((struct 
> sockaddr_in6 *)
> upeer_sockaddr)->sin6_port);
> -                             if (copy_from_user(tp_locvar->v6addr,
> -                                             &((struct sockaddr_in6 *) 
> upeer_sockaddr)->sin6_addr.in6_u.u6_addr8,
> -                                             sizeof(tp_locvar->v6addr)))
> -                                     memset(tp_locvar->v6addr, 0, 
> sizeof(tp_locvar->v6addr));
> -                             tp_locvar->v6addr_len = 8;
> -                             break;
> -                     }
> -             skip_code:
> -             )
> +             LTTNG_SYSCALL_ACCEPT_code_pre
>       ),
>       TP_FIELDS(
>               sc_exit(ctf_integer(long, ret, ret))
> @@ -121,35 +127,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4,
>               int uaddr_len;
>       ),
>       TP_code_pre(
> -             sc_inout(
> -                     memset(tp_locvar, 0, sizeof(*tp_locvar));
> -                     (void) get_user(tp_locvar->uaddr_len, upeer_addrlen);
> -             )
> -             sc_out(
> -                     if (tp_locvar->uaddr_len < sizeof(struct sockaddr))
> -                             goto skip_code;
> -                     (void) get_user(tp_locvar->sa_family, 
> &upeer_sockaddr->sa_family);
> -                     switch (tp_locvar->sa_family) {
> -                     case AF_INET:
> -                             if (tp_locvar->uaddr_len < sizeof(struct 
> sockaddr_in))
> -                                     goto skip_code;
> -                             (void) get_user(tp_locvar->sport, &((struct 
> sockaddr_in *)
> upeer_sockaddr)->sin_port);
> -                             (void) get_user(tp_locvar->v4addr, &((struct 
> sockaddr_in *)
> upeer_sockaddr)->sin_addr.s_addr);
> -                             tp_locvar->v4addr_len = 4;
> -                             break;
> -                     case AF_INET6:
> -                             if (tp_locvar->uaddr_len < sizeof(struct 
> sockaddr_in6))
> -                                     goto skip_code;
> -                             (void) get_user(tp_locvar->sport, &((struct 
> sockaddr_in6 *)
> upeer_sockaddr)->sin6_port);
> -                             if (copy_from_user(tp_locvar->v6addr,
> -                                             &((struct sockaddr_in6 *) 
> upeer_sockaddr)->sin6_addr.in6_u.u6_addr8,
> -                                             sizeof(tp_locvar->v6addr)))
> -                                     memset(tp_locvar->v6addr, 0, 
> sizeof(tp_locvar->v6addr));
> -                             tp_locvar->v6addr_len = 8;
> -                             break;
> -                     }
> -             skip_code:
> -             )
> +             LTTNG_SYSCALL_ACCEPT_code_pre
>       ),
>       TP_FIELDS(
>               sc_exit(ctf_integer(long, ret, ret))
> --
> 2.9.3

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
[email protected]
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to