From 5a561ac39cd77ecda3fbdb2bfaafac56b174225c Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Wed, 31 Aug 2016 00:18:29 -0400 Subject: [PATCH] Fix: check for sizeof sa_family to save sa_family in accept and connect MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The check of addrlen >= sizeof(struct sockaddr) is too restrictive and causes sa_family to not be saved in the case of AF_UNIX sockets as the addrlen returned by the syscall may be only sizeof(short). Individual checks per socket family are performed anyhow in the switch case, making this safe. Signed-off-by: Jérémie Galarneau Signed-off-by: Mathieu Desnoyers --- .../headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h | 4 ++-- 1 file changed, 2 insertions(+), 2 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 22c328ac..b262228f 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 @@ -14,7 +14,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, TP_code_pre( sc_in( memset(tp_locvar, 0, sizeof(*tp_locvar)); - if (addrlen < sizeof(struct sockaddr)) + if (addrlen < sizeof(tp_locvar->sa_family)) goto skip_code; (void) get_user(tp_locvar->sa_family, &uservaddr->sa_family); switch (tp_locvar->sa_family) { @@ -66,7 +66,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, (void) get_user(tp_locvar->uaddr_len, upeer_addrlen); \ ) \ sc_out( \ - if (tp_locvar->uaddr_len < sizeof(struct sockaddr)) \ + if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \ goto skip_code; \ (void) get_user(tp_locvar->sa_family, &upeer_sockaddr->sa_family); \ switch (tp_locvar->sa_family) { \ -- 2.34.1