commit fb174610f8a9e5039b5435f903476a2048d85f7c Author: CentOS Sources Date: Wed Nov 3 20:03:19 2021 -0400 import strace-5.13-3.el9 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a2c5d2d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/strace-5.13.tar.xz diff --git a/.strace.metadata b/.strace.metadata new file mode 100644 index 0000000..4c2d4b4 --- /dev/null +++ b/.strace.metadata @@ -0,0 +1 @@ +0f48c474de7d34009d3455f589efe790d24050b5 SOURCES/strace-5.13.tar.xz diff --git a/SOURCES/0141-tests-change-sockopt-timestamp-test-to-use-syscall-_.patch b/SOURCES/0141-tests-change-sockopt-timestamp-test-to-use-syscall-_.patch new file mode 100644 index 0000000..394c0e4 --- /dev/null +++ b/SOURCES/0141-tests-change-sockopt-timestamp-test-to-use-syscall-_.patch @@ -0,0 +1,378 @@ +From 9aada05f4c7f95220a5b16416f530419db6b4dff Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Fri, 23 Jul 2021 08:00:00 +0000 +Subject: [PATCH] tests: change sockopt-timestamp test to use + syscall(__NR_recvmsg) + +Since the glibc recvmsg wrapper became unsuitable for our needs, +invoke __NR_recvmsg syscall directly. + +* tests/sockopt-timestamp.c: Include "scno.h" and , +conditionalize on __NR_recvmsg. +(TEST_OLD_SCM_TIMESTAMPS): Remove. +(k_recvmsg): New function. +(test_sockopt): Use it instead of recvmsg. +--- + tests/sockopt-timestamp.c | 72 ++++++++++++++++++++++------------------------- + 1 file changed, 34 insertions(+), 38 deletions(-) + +diff --git a/tests/sockopt-timestamp.c b/tests/sockopt-timestamp.c +index 56627bb..ed73ca1 100644 +--- a/tests/sockopt-timestamp.c ++++ b/tests/sockopt-timestamp.c +@@ -9,44 +9,45 @@ + */ + + #include "tests.h" +-#include +-#include +-#include +-#include +- +-#if defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL \ +- || defined HAVE_STRUCT___KERNEL_TIMESPEC +-# include +-#endif ++#include "scno.h" + +-#include "kernel_timeval.h" +-#include "kernel_old_timespec.h" ++#ifdef __NR_recvmsg + +-#define XLAT_MACROS_ONLY +-# include "xlat/sock_options.h" +-#undef XLAT_MACROS_ONLY ++# include ++# include ++# include ++# include ++# include + +-#undef TEST_OLD_SCM_TIMESTAMPS ++# if defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL \ ++ || defined HAVE_STRUCT___KERNEL_TIMESPEC ++# include ++# endif + +-/* +- * Sadly, starting with commit +- * glibc-2.33.9000-707-g13c51549e2077f2f3bf84e8fd0b46d8b0c615912, on every +- * 32-bit architecture where 32-bit time_t support is enabled, +- * glibc mangles old scm timestamps. +- */ +-#if GLIBC_PREREQ_GE(2, 33) && defined __TIMESIZE && __TIMESIZE != 64 +-# define TEST_OLD_SCM_TIMESTAMPS 0 +-#endif ++# include "kernel_timeval.h" ++# include "kernel_old_timespec.h" + +-#ifndef TEST_OLD_SCM_TIMESTAMPS +-# define TEST_OLD_SCM_TIMESTAMPS 1 +-#endif ++# define XLAT_MACROS_ONLY ++# include "xlat/sock_options.h" ++# undef XLAT_MACROS_ONLY + +-#if TEST_OLD_SCM_TIMESTAMPS \ +- || defined HAVE_STRUCT___KERNEL_TIMESPEC \ +- || defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL ++static const char *errstr; ++ ++static long ++k_recvmsg(const unsigned int fd, const void *const ptr, const unsigned int flags) ++{ ++ const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL; ++ const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL; ++ const kernel_ulong_t arg1 = fill | fd; ++ const kernel_ulong_t arg2 = (uintptr_t) ptr; ++ const kernel_ulong_t arg3 = fill | flags; ++ const long rc = syscall(__NR_recvmsg, arg1, arg2, arg3, bad, bad, bad); ++ if (rc && errno == ENOSYS) ++ perror_msg_and_skip("recvmsg"); ++ errstr = sprintrc(rc); ++ return rc; ++} + +-# if TEST_OLD_SCM_TIMESTAMPS + static void + print_timestamp_old(const struct cmsghdr *c) + { +@@ -84,7 +85,6 @@ print_timestampns_old(const struct cmsghdr *c) + printf("{tv_sec=%lld, tv_nsec=%lld}", + (long long) ts.tv_sec, (long long) ts.tv_nsec); + } +-# endif /* TEST_OLD_SCM_TIMESTAMPS */ + + # ifdef HAVE_STRUCT___KERNEL_SOCK_TIMEVAL + static void +@@ -162,7 +162,7 @@ test_sockopt(int so_val, const char *str, void (*fun)(const struct cmsghdr *)) + .msg_controllen = sizeof(control) + }; + +- if (recvmsg(sv[0], &mh, 0) != (int) size) ++ if (k_recvmsg(sv[0], &mh, 0) != (int) size) + perror_msg_and_fail("recvmsg"); + if (close(sv[0])) + perror_msg_and_fail("close recv"); +@@ -210,10 +210,8 @@ main(void) + const char *str; + void (*fun)(const struct cmsghdr *); + } tests[] = { +-# if TEST_OLD_SCM_TIMESTAMPS + { SO_TIMESTAMP_OLD, "SO_TIMESTAMP_OLD", print_timestamp_old }, + { SO_TIMESTAMPNS_OLD, "SO_TIMESTAMPNS_OLD", print_timestampns_old }, +-# endif + # ifdef HAVE_STRUCT___KERNEL_SOCK_TIMEVAL + { SO_TIMESTAMP_NEW, "SO_TIMESTAMP_NEW", print_timestamp_new }, + # endif +@@ -235,8 +233,6 @@ main(void) + + #else + +-SKIP_MAIN_UNDEFINED("TEST_OLD_SCM_TIMESTAMPS" +- " || HAVE_STRUCT___KERNEL_TIMESPEC" +- " || HAVE_STRUCT___KERNEL_SOCK_TIMEVAL") ++SKIP_MAIN_UNDEFINED("__NR_recvmsg") + + #endif +diff --git a/tests-m32/sockopt-timestamp.c b/tests-m32/sockopt-timestamp.c +index 56627bb..ed73ca1 100644 +--- a/tests-m32/sockopt-timestamp.c ++++ b/tests-m32/sockopt-timestamp.c +@@ -9,44 +9,45 @@ + */ + + #include "tests.h" +-#include +-#include +-#include +-#include +- +-#if defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL \ +- || defined HAVE_STRUCT___KERNEL_TIMESPEC +-# include +-#endif ++#include "scno.h" + +-#include "kernel_timeval.h" +-#include "kernel_old_timespec.h" ++#ifdef __NR_recvmsg + +-#define XLAT_MACROS_ONLY +-# include "xlat/sock_options.h" +-#undef XLAT_MACROS_ONLY ++# include ++# include ++# include ++# include ++# include + +-#undef TEST_OLD_SCM_TIMESTAMPS ++# if defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL \ ++ || defined HAVE_STRUCT___KERNEL_TIMESPEC ++# include ++# endif + +-/* +- * Sadly, starting with commit +- * glibc-2.33.9000-707-g13c51549e2077f2f3bf84e8fd0b46d8b0c615912, on every +- * 32-bit architecture where 32-bit time_t support is enabled, +- * glibc mangles old scm timestamps. +- */ +-#if GLIBC_PREREQ_GE(2, 33) && defined __TIMESIZE && __TIMESIZE != 64 +-# define TEST_OLD_SCM_TIMESTAMPS 0 +-#endif ++# include "kernel_timeval.h" ++# include "kernel_old_timespec.h" + +-#ifndef TEST_OLD_SCM_TIMESTAMPS +-# define TEST_OLD_SCM_TIMESTAMPS 1 +-#endif ++# define XLAT_MACROS_ONLY ++# include "xlat/sock_options.h" ++# undef XLAT_MACROS_ONLY + +-#if TEST_OLD_SCM_TIMESTAMPS \ +- || defined HAVE_STRUCT___KERNEL_TIMESPEC \ +- || defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL ++static const char *errstr; ++ ++static long ++k_recvmsg(const unsigned int fd, const void *const ptr, const unsigned int flags) ++{ ++ const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL; ++ const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL; ++ const kernel_ulong_t arg1 = fill | fd; ++ const kernel_ulong_t arg2 = (uintptr_t) ptr; ++ const kernel_ulong_t arg3 = fill | flags; ++ const long rc = syscall(__NR_recvmsg, arg1, arg2, arg3, bad, bad, bad); ++ if (rc && errno == ENOSYS) ++ perror_msg_and_skip("recvmsg"); ++ errstr = sprintrc(rc); ++ return rc; ++} + +-# if TEST_OLD_SCM_TIMESTAMPS + static void + print_timestamp_old(const struct cmsghdr *c) + { +@@ -84,7 +85,6 @@ print_timestampns_old(const struct cmsghdr *c) + printf("{tv_sec=%lld, tv_nsec=%lld}", + (long long) ts.tv_sec, (long long) ts.tv_nsec); + } +-# endif /* TEST_OLD_SCM_TIMESTAMPS */ + + # ifdef HAVE_STRUCT___KERNEL_SOCK_TIMEVAL + static void +@@ -162,7 +162,7 @@ test_sockopt(int so_val, const char *str, void (*fun)(const struct cmsghdr *)) + .msg_controllen = sizeof(control) + }; + +- if (recvmsg(sv[0], &mh, 0) != (int) size) ++ if (k_recvmsg(sv[0], &mh, 0) != (int) size) + perror_msg_and_fail("recvmsg"); + if (close(sv[0])) + perror_msg_and_fail("close recv"); +@@ -210,10 +210,8 @@ main(void) + const char *str; + void (*fun)(const struct cmsghdr *); + } tests[] = { +-# if TEST_OLD_SCM_TIMESTAMPS + { SO_TIMESTAMP_OLD, "SO_TIMESTAMP_OLD", print_timestamp_old }, + { SO_TIMESTAMPNS_OLD, "SO_TIMESTAMPNS_OLD", print_timestampns_old }, +-# endif + # ifdef HAVE_STRUCT___KERNEL_SOCK_TIMEVAL + { SO_TIMESTAMP_NEW, "SO_TIMESTAMP_NEW", print_timestamp_new }, + # endif +@@ -235,8 +233,6 @@ main(void) + + #else + +-SKIP_MAIN_UNDEFINED("TEST_OLD_SCM_TIMESTAMPS" +- " || HAVE_STRUCT___KERNEL_TIMESPEC" +- " || HAVE_STRUCT___KERNEL_SOCK_TIMEVAL") ++SKIP_MAIN_UNDEFINED("__NR_recvmsg") + + #endif +diff --git a/tests-mx32/sockopt-timestamp.c b/tests-mx32/sockopt-timestamp.c +index 56627bb..ed73ca1 100644 +--- a/tests-mx32/sockopt-timestamp.c ++++ b/tests-mx32/sockopt-timestamp.c +@@ -9,44 +9,45 @@ + */ + + #include "tests.h" +-#include +-#include +-#include +-#include +- +-#if defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL \ +- || defined HAVE_STRUCT___KERNEL_TIMESPEC +-# include +-#endif ++#include "scno.h" + +-#include "kernel_timeval.h" +-#include "kernel_old_timespec.h" ++#ifdef __NR_recvmsg + +-#define XLAT_MACROS_ONLY +-# include "xlat/sock_options.h" +-#undef XLAT_MACROS_ONLY ++# include ++# include ++# include ++# include ++# include + +-#undef TEST_OLD_SCM_TIMESTAMPS ++# if defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL \ ++ || defined HAVE_STRUCT___KERNEL_TIMESPEC ++# include ++# endif + +-/* +- * Sadly, starting with commit +- * glibc-2.33.9000-707-g13c51549e2077f2f3bf84e8fd0b46d8b0c615912, on every +- * 32-bit architecture where 32-bit time_t support is enabled, +- * glibc mangles old scm timestamps. +- */ +-#if GLIBC_PREREQ_GE(2, 33) && defined __TIMESIZE && __TIMESIZE != 64 +-# define TEST_OLD_SCM_TIMESTAMPS 0 +-#endif ++# include "kernel_timeval.h" ++# include "kernel_old_timespec.h" + +-#ifndef TEST_OLD_SCM_TIMESTAMPS +-# define TEST_OLD_SCM_TIMESTAMPS 1 +-#endif ++# define XLAT_MACROS_ONLY ++# include "xlat/sock_options.h" ++# undef XLAT_MACROS_ONLY + +-#if TEST_OLD_SCM_TIMESTAMPS \ +- || defined HAVE_STRUCT___KERNEL_TIMESPEC \ +- || defined HAVE_STRUCT___KERNEL_SOCK_TIMEVAL ++static const char *errstr; ++ ++static long ++k_recvmsg(const unsigned int fd, const void *const ptr, const unsigned int flags) ++{ ++ const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL; ++ const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL; ++ const kernel_ulong_t arg1 = fill | fd; ++ const kernel_ulong_t arg2 = (uintptr_t) ptr; ++ const kernel_ulong_t arg3 = fill | flags; ++ const long rc = syscall(__NR_recvmsg, arg1, arg2, arg3, bad, bad, bad); ++ if (rc && errno == ENOSYS) ++ perror_msg_and_skip("recvmsg"); ++ errstr = sprintrc(rc); ++ return rc; ++} + +-# if TEST_OLD_SCM_TIMESTAMPS + static void + print_timestamp_old(const struct cmsghdr *c) + { +@@ -84,7 +85,6 @@ print_timestampns_old(const struct cmsghdr *c) + printf("{tv_sec=%lld, tv_nsec=%lld}", + (long long) ts.tv_sec, (long long) ts.tv_nsec); + } +-# endif /* TEST_OLD_SCM_TIMESTAMPS */ + + # ifdef HAVE_STRUCT___KERNEL_SOCK_TIMEVAL + static void +@@ -162,7 +162,7 @@ test_sockopt(int so_val, const char *str, void (*fun)(const struct cmsghdr *)) + .msg_controllen = sizeof(control) + }; + +- if (recvmsg(sv[0], &mh, 0) != (int) size) ++ if (k_recvmsg(sv[0], &mh, 0) != (int) size) + perror_msg_and_fail("recvmsg"); + if (close(sv[0])) + perror_msg_and_fail("close recv"); +@@ -210,10 +210,8 @@ main(void) + const char *str; + void (*fun)(const struct cmsghdr *); + } tests[] = { +-# if TEST_OLD_SCM_TIMESTAMPS + { SO_TIMESTAMP_OLD, "SO_TIMESTAMP_OLD", print_timestamp_old }, + { SO_TIMESTAMPNS_OLD, "SO_TIMESTAMPNS_OLD", print_timestampns_old }, +-# endif + # ifdef HAVE_STRUCT___KERNEL_SOCK_TIMEVAL + { SO_TIMESTAMP_NEW, "SO_TIMESTAMP_NEW", print_timestamp_new }, + # endif +@@ -235,8 +233,6 @@ main(void) + + #else + +-SKIP_MAIN_UNDEFINED("TEST_OLD_SCM_TIMESTAMPS" +- " || HAVE_STRUCT___KERNEL_TIMESPEC" +- " || HAVE_STRUCT___KERNEL_SOCK_TIMEVAL") ++SKIP_MAIN_UNDEFINED("__NR_recvmsg") + + #endif +-- +2.1.4 + diff --git a/SOURCES/0150-filter_qualify-free-allocated-data-on-the-error-path.patch b/SOURCES/0150-filter_qualify-free-allocated-data-on-the-error-path.patch new file mode 100644 index 0000000..7043b2f --- /dev/null +++ b/SOURCES/0150-filter_qualify-free-allocated-data-on-the-error-path.patch @@ -0,0 +1,77 @@ +From a034f8a50cbe15d250457ed2eefbf9db059f724f Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Wed, 18 Aug 2021 21:48:38 +0200 +Subject: [PATCH 147/150] filter_qualify: free allocated data on the error path + exit of parse_poke_token + +While not terribly required due to the fact that issues with option +parsing lead to program termination, these changes avoid leaking data +allocated in the function's scope and not stored elsewhere, which might +come handy if it ever be used dynamically during the runtime. + +This also has been reported as resource leaks by covscan, and these +changes should calm it. + +* src/filter_qualify.c (parse_poke_token): Go to err label instead of +returning right away; free poke->data, poke, and str_tokenized before +returning false. + +References: https://bugzilla.redhat.com/show_bug.cgi?id=1995509 +--- + src/filter_qualify.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/src/filter_qualify.c b/src/filter_qualify.c +index df05496..a1a6471 100644 +--- a/src/filter_qualify.c ++++ b/src/filter_qualify.c +@@ -169,34 +169,40 @@ parse_poke_token(const char *input, struct inject_opts *fopts, bool isenter) + poke->is_enter = isenter; + + if ((val = STR_STRIP_PREFIX(token, "@arg")) == token) +- return false; ++ goto err; + if ((val[0] >= '1') && (val[0] <= '7')) { + poke->arg_no = val[0] - '0'; + } else { +- return false; ++ goto err; + } + if (val[1] != '=') +- return false; ++ goto err; + val += 2; + + data_len = strlen(val); + if ((data_len == 0) || (data_len % 2) || (data_len > 2048)) +- return false; ++ goto err; + data_len /= 2; + poke->data_len = data_len; + poke->data = xmalloc(data_len); + + for (size_t i = 0; i < data_len; i++) + if (sscanf(&val[2 * i], "%2hhx", &poke->data[i]) != 1) +- return false; ++ goto err; + + if (poke_add(fopts->data.poke_idx, poke)) +- return false; ++ goto err; + } + free(str_tokenized); + + fopts->data.flags |= flag; + return true; ++ ++err: ++ free(poke->data); ++ free(poke); ++ free(str_tokenized); ++ return false; + } + + static bool +-- +2.1.4 + diff --git a/SOURCES/0151-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch b/SOURCES/0151-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch new file mode 100644 index 0000000..6ee45fb --- /dev/null +++ b/SOURCES/0151-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch @@ -0,0 +1,70 @@ +From 3f3dd44f1964c54b55e8c84343579bd7c1924df5 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Wed, 18 Aug 2021 21:49:12 +0200 +Subject: [PATCH 148/150] macros: expand BIT macros, add MASK macros; add + *_SAFE macros + +These macros might make reading a code that often converts between powers +of 2 and values/masks a bit easier; moreover, the *_SAFE versions should +help in cases where the shift values are expected to be equal to the type +bit width (which lead to UB otherwise). + +Switching from BIT to BIT32 should also clarify bitness, which may be somewhat +murky at times (cf. printxval, printflags, and printxvals). + +* src/macros.h [!BIT] (BIT): Rename to... +[!BIT32] (BIT32): ...this. +[!BIT64] (BIT64): New macro. +[!MASK32] (MASK32): Likewise. +[!MASK64] (MASK64): Likewise. +(BIT32_SAFE, BIT64_SAFE, MASK32_SAFE, MASK64_SAFE): New macros. +(FLAG): Use BIT32. +--- + src/macros.h | 30 +++++++++++++++++++++++++++--- + 1 file changed, 27 insertions(+), 3 deletions(-) + +diff --git a/src/macros.h b/src/macros.h +index 467f5d0..2d7a83d 100644 +--- a/src/macros.h ++++ b/src/macros.h +@@ -78,10 +78,34 @@ is_filled(const char *ptr, char fill, size_t size) + # define IS_ARRAY_ZERO(arr_) \ + is_filled((const char *) (arr_), 0, sizeof(arr_) + MUST_BE_ARRAY(arr_)) + +-# ifndef BIT +-# define BIT(x_) (1U << (x_)) ++# ifndef BIT32 ++# define BIT32(x_) (1U << (x_)) + # endif + +-# define FLAG(name_) name_ = BIT(name_##_BIT) ++# ifndef BIT64 ++# define BIT64(x_) (1ULL << (x_)) ++# endif ++ ++# ifndef MASK32 ++# define MASK32(x_) (BIT32(x_) - 1U) ++# endif ++ ++# ifndef MASK64 ++# define MASK64(x_) (BIT64(x_) - 1ULL) ++# endif ++ ++/* ++ * "Safe" versions that avoid UB for values that are >= type bit size ++ * (the usually expected behaviour of the bit shift in that case is zero, ++ * but at least powerpc is notorious for returning the input value when shift ++ * by 64 bits is performed). ++ */ ++ ++# define BIT32_SAFE(x_) ((x_) < 32 ? BIT32(x_) : 0) ++# define BIT64_SAFE(x_) ((x_) < 64 ? BIT64(x_) : 0) ++# define MASK32_SAFE(x_) (BIT32_SAFE(x_) - 1U) ++# define MASK64_SAFE(x_) (BIT64_SAFE(x_) - 1ULL) ++ ++# define FLAG(name_) name_ = BIT32(name_##_BIT) + + #endif /* !STRACE_MACROS_H */ +-- +2.1.4 + diff --git a/SOURCES/0152-trie-use-BIT-and-MASK-macros.patch b/SOURCES/0152-trie-use-BIT-and-MASK-macros.patch new file mode 100644 index 0000000..91c6fe3 --- /dev/null +++ b/SOURCES/0152-trie-use-BIT-and-MASK-macros.patch @@ -0,0 +1,151 @@ +From 8ef5456338a947944cc03b95c22c837af5884ddc Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Wed, 18 Aug 2021 21:51:22 +0200 +Subject: [PATCH 149/150] trie: use BIT* and MASK* macros + +This makes reading the code a bit easier. It also solves some issues +where there is a hypothertical possibility of having bit shifts of size +64, by virtue of using the *_SAFE macros (that should silence some +reported "left shifting by more than 63 bits has undefined behavior" +covscan issues). + +* src/trie.c (trie_create): Use BIT32, MASK64. +(trie_create_data_block): Use BIT32, change iterator variable type +to size_t. +(trie_get_node): Use BIT64, MASK64. +(trie_data_block_calc_pos): Use BIT32, MASK64, MASK64_SAFE. +(trie_iterate_keys_node): Use BIT64, MASK64, MASK64_SAFE. +(trie_free_node): Use BIT64. +--- + src/trie.c | 34 +++++++++++++++++----------------- + 1 file changed, 17 insertions(+), 17 deletions(-) + +diff --git a/src/trie.c b/src/trie.c +index 586ff25..0a231e4 100644 +--- a/src/trie.c ++++ b/src/trie.c +@@ -15,6 +15,7 @@ + #include + + #include "trie.h" ++#include "macros.h" + #include "xmalloc.h" + + static const uint8_t ptr_sz_lg = (sizeof(void *) == 8 ? 6 : 5); +@@ -87,7 +88,7 @@ trie_create(uint8_t key_size, uint8_t item_size_lg, uint8_t node_key_bits, + / t->node_key_bits; + + if (item_size_lg != 6) +- t->empty_value &= (((uint64_t) 1 << (1 << t->item_size_lg)) - 1); ++ t->empty_value &= MASK64(BIT32(t->item_size_lg)); + + return t; + } +@@ -96,8 +97,8 @@ static void * + trie_create_data_block(struct trie *t) + { + uint64_t fill_value = t->empty_value; +- for (int i = 1; i < 1 << (6 - t->item_size_lg); i++) { +- fill_value <<= (1 << t->item_size_lg); ++ for (size_t i = 1; i < BIT32(6 - t->item_size_lg); i++) { ++ fill_value <<= BIT32(t->item_size_lg); + fill_value |= t->empty_value; + } + +@@ -105,7 +106,7 @@ trie_create_data_block(struct trie *t) + if (sz < 6) + sz = 6; + +- size_t count = 1 << (sz - 6); ++ size_t count = BIT32(sz - 6); + uint64_t *data_block = xcalloc(count, 8); + + for (size_t i = 0; i < count; i++) +@@ -119,7 +120,7 @@ trie_get_node(struct trie *t, uint64_t key, bool auto_create) + { + void **cur_node = &(t->data); + +- if (t->key_size < 64 && key > (uint64_t) 1 << t->key_size) ++ if (t->key_size < 64 && key > MASK64(t->key_size)) + return NULL; + + for (uint8_t cur_depth = 0; cur_depth <= t->max_depth; cur_depth++) { +@@ -133,13 +134,13 @@ trie_get_node(struct trie *t, uint64_t key, bool auto_create) + if (cur_depth == t->max_depth) + *cur_node = trie_create_data_block(t); + else +- *cur_node = xcalloc(1 << sz, 1); ++ *cur_node = xcalloc(BIT64(sz), 1); + } + + if (cur_depth == t->max_depth) + break; + +- size_t pos = (key >> offs) & ((1 << (sz - ptr_sz_lg)) - 1); ++ size_t pos = (key >> offs) & MASK64(sz - ptr_sz_lg); + cur_node = (((void **) (*cur_node)) + pos); + } + +@@ -152,7 +153,7 @@ trie_data_block_calc_pos(struct trie *t, uint64_t key, + { + uint64_t key_mask; + +- key_mask = (1 << t->data_block_key_bits) - 1; ++ key_mask = MASK64(t->data_block_key_bits); + *pos = (key & key_mask) >> (6 - t->item_size_lg); + + if (t->item_size_lg == 6) { +@@ -161,10 +162,10 @@ trie_data_block_calc_pos(struct trie *t, uint64_t key, + return; + } + +- key_mask = (1 << (6 - t->item_size_lg)) - 1; +- *offs = (key & key_mask) * (1 << t->item_size_lg); ++ key_mask = MASK64(6 - t->item_size_lg); ++ *offs = (key & key_mask) << t->item_size_lg; + +- *mask = (((uint64_t) 1 << (1 << t->item_size_lg)) - 1) << *offs; ++ *mask = MASK64_SAFE(BIT32(t->item_size_lg)) << *offs; + } + + bool +@@ -211,7 +212,7 @@ trie_iterate_keys_node(struct trie *t, + return 0; + + if (t->key_size < 64) { +- uint64_t key_max = ((uint64_t) 1 << t->key_size) - 1; ++ uint64_t key_max = MASK64(t->key_size); + if (end > key_max) + end = key_max; + } +@@ -228,15 +229,14 @@ trie_iterate_keys_node(struct trie *t, + t->key_size : + trie_get_node_bit_offs(t, depth - 1); + +- uint64_t first_key_in_node = start & +- (uint64_t) -1 << parent_node_bit_off; ++ uint64_t first_key_in_node = start & ~MASK64_SAFE(parent_node_bit_off); + + uint8_t node_bit_off = trie_get_node_bit_offs(t, depth); + uint8_t node_key_bits = parent_node_bit_off - node_bit_off; +- uint64_t mask = ((uint64_t) 1 << (node_key_bits)) - 1; ++ uint64_t mask = MASK64_SAFE(node_key_bits); + uint64_t start_index = (start >> node_bit_off) & mask; + uint64_t end_index = (end >> node_bit_off) & mask; +- uint64_t child_key_count = (uint64_t) 1 << node_bit_off; ++ uint64_t child_key_count = BIT64(node_bit_off); + + uint64_t count = 0; + +@@ -274,7 +274,7 @@ trie_free_node(struct trie *t, void *node, uint8_t depth) + if (depth >= t->max_depth) + goto free_node; + +- size_t sz = 1 << (trie_get_node_size(t, depth) - ptr_sz_lg); ++ size_t sz = BIT64(trie_get_node_size(t, depth) - ptr_sz_lg); + for (size_t i = 0; i < sz; i++) + trie_free_node(t, ((void **) node)[i], depth + 1); + +-- +2.1.4 + diff --git a/SOURCES/0153-tee-rewrite-num_params-access-in-tee_fetch_buf_data.patch b/SOURCES/0153-tee-rewrite-num_params-access-in-tee_fetch_buf_data.patch new file mode 100644 index 0000000..56aa8a1 --- /dev/null +++ b/SOURCES/0153-tee-rewrite-num_params-access-in-tee_fetch_buf_data.patch @@ -0,0 +1,52 @@ +From 3a68f90c2a5a208b475cc2014f85ae04541ec5b6 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Fri, 20 Aug 2021 21:31:01 +0200 +Subject: [PATCH 150/150] tee: rewrite num_params access in tee_fetch_buf_data + +Pointer to num_params field of the fetched structure is passed in a +separate function argument which provokes covscan complaints about +uninitialised accesses and also tingles my aliasing rules senses. +Rewrite to access it via the arg_struct argument which is fetched +earlier in the function flow. + +* src/tee.c (TEE_FETCH_BUF_DATA): Change &arg_.num_params +to offsetof(typeof(arg_), num_params). +(tee_fetch_buf_data): Accept offset of the num_params field instead +of pointer to it; reconstruct the num_params pointer using it. +--- + src/tee.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/tee.c b/src/tee.c +index f9eda52..d7e9b15 100644 +--- a/src/tee.c ++++ b/src/tee.c +@@ -33,7 +33,7 @@ struct tee_ioctl_shm_register_fd_data { + + #define TEE_FETCH_BUF_DATA(buf_, arg_, params_) \ + tee_fetch_buf_data(tcp, arg, &buf_, sizeof(arg_), \ +- &arg_, &arg_.num_params, \ ++ &arg_, offsetof(typeof(arg_), num_params), \ + params_) + + /* session id is printed as 0x%x in libteec */ +@@ -56,7 +56,7 @@ tee_fetch_buf_data(struct tcb *const tcp, + struct tee_ioctl_buf_data *buf, + size_t arg_size, + void *arg_struct, +- unsigned *num_params, ++ size_t num_params_offs, + uint64_t *params) + { + if (umove_or_printaddr(tcp, arg, buf)) +@@ -69,6 +69,7 @@ tee_fetch_buf_data(struct tcb *const tcp, + tee_print_buf(buf); + return RVAL_IOCTL_DECODED; + } ++ uint32_t *num_params = (uint32_t *) (arg_struct + num_params_offs); + if (entering(tcp) && + (arg_size + TEE_IOCTL_PARAM_SIZE(*num_params) != buf->buf_len)) { + /* +-- +2.1.4 + diff --git a/SOURCES/0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch b/SOURCES/0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch new file mode 100644 index 0000000..8e019c1 --- /dev/null +++ b/SOURCES/0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch @@ -0,0 +1,171 @@ +From 719ccf8f4bf4263b02c686f16f579fd6119bb52c Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Mon, 23 Aug 2021 18:24:39 +0200 +Subject: [PATCH] tests: call setsockopt directly in sockopt-timestamp + +While commit v5.13-10-g0211fdc "tests: change sockopt-timestamp test to +use syscall(__NR_recvmsg)" has fixed issues with glibc-induced mangling +on newer kernels, the combination of an older kernel and new glibc still +causes issues, as glibc silently falls back to SO_TIMESTAMP{,NS}_OLD, as +implemented in glibc-2.34~294 "linux: Add fallback for 64-bit time_t +SO_TIMESTAMP{NS}". Avoid that by calling setsockopt directly as well. + +* tests/sockopt-timestamp.c (SC_setsockopt): New macro constant. +(k_setsockopt): New function. +(test_sockopt): Call k_setsockopt instead of setsockopt. + +Complements: v5.13-10-g0211fdc "tests: change sockopt-timestamp test to use syscall(__NR_recvmsg)" +--- + tests/sockopt-timestamp.c | 31 ++++++++++++++++++++++++++++++- + 1 file changed, 30 insertions(+), 1 deletion(-) + +diff --git a/tests/sockopt-timestamp.c b/tests/sockopt-timestamp.c +index 34c4d89..4bd96fd 100644 +--- a/tests/sockopt-timestamp.c ++++ b/tests/sockopt-timestamp.c +@@ -48,6 +48,30 @@ k_recvmsg(const unsigned int fd, const void *const ptr, const unsigned int flags + return rc; + } + ++#define SC_setsockopt 14 ++static long ++k_setsockopt(const unsigned int fd, const unsigned int level, ++ const unsigned int optname, const void *const optval, ++ const unsigned int len) ++{ ++ const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL; ++#ifdef __NR_setsockopt ++ const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL; ++#endif ++ ++ return syscall( ++#ifdef __NR_setsockopt ++ __NR_setsockopt, ++#else /* socketcall */ ++ __NR_socketcall, SC_setsockopt, ++#endif ++ fill | fd , fill | level, fill | optname, optval, fill | len ++#ifdef __NR_setsockopt ++ , bad ++#endif ++ ); ++} ++ + static void + print_timestamp_old(const struct cmsghdr *c) + { +@@ -139,7 +163,12 @@ test_sockopt(int so_val, const char *str, void (*fun)(const struct cmsghdr *)) + perror_msg_and_skip(data); + + const int opt_1 = 1; +- if (setsockopt(sv[0], SOL_SOCKET, so_val, &opt_1, sizeof(opt_1))) { ++ /* ++ * glibc-2.34~294 adds fallsback for SO_TIMESTAMP{,NS}_NEW that calls ++ * SO_TIMESTAMP{,NS}_OLD, so we have to call the setsockopt directly ++ * in order to avoid unexpected recvmsg msg types. ++ */ ++ if (k_setsockopt(sv[0], SOL_SOCKET, so_val, &opt_1, sizeof(opt_1))) { + perror(str); + return 0; + } +diff --git a/tests-m32/sockopt-timestamp.c b/tests-m32/sockopt-timestamp.c +index 34c4d89..4bd96fd 100644 +--- a/tests-m32/sockopt-timestamp.c ++++ b/tests-m32/sockopt-timestamp.c +@@ -48,6 +48,30 @@ k_recvmsg(const unsigned int fd, const void *const ptr, const unsigned int flags + return rc; + } + ++#define SC_setsockopt 14 ++static long ++k_setsockopt(const unsigned int fd, const unsigned int level, ++ const unsigned int optname, const void *const optval, ++ const unsigned int len) ++{ ++ const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL; ++#ifdef __NR_setsockopt ++ const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL; ++#endif ++ ++ return syscall( ++#ifdef __NR_setsockopt ++ __NR_setsockopt, ++#else /* socketcall */ ++ __NR_socketcall, SC_setsockopt, ++#endif ++ fill | fd , fill | level, fill | optname, optval, fill | len ++#ifdef __NR_setsockopt ++ , bad ++#endif ++ ); ++} ++ + static void + print_timestamp_old(const struct cmsghdr *c) + { +@@ -139,7 +163,12 @@ test_sockopt(int so_val, const char *str, void (*fun)(const struct cmsghdr *)) + perror_msg_and_skip(data); + + const int opt_1 = 1; +- if (setsockopt(sv[0], SOL_SOCKET, so_val, &opt_1, sizeof(opt_1))) { ++ /* ++ * glibc-2.34~294 adds fallsback for SO_TIMESTAMP{,NS}_NEW that calls ++ * SO_TIMESTAMP{,NS}_OLD, so we have to call the setsockopt directly ++ * in order to avoid unexpected recvmsg msg types. ++ */ ++ if (k_setsockopt(sv[0], SOL_SOCKET, so_val, &opt_1, sizeof(opt_1))) { + perror(str); + return 0; + } +diff --git a/tests-mx32/sockopt-timestamp.c b/tests-mx32/sockopt-timestamp.c +index 34c4d89..4bd96fd 100644 +--- a/tests-mx32/sockopt-timestamp.c ++++ b/tests-mx32/sockopt-timestamp.c +@@ -48,6 +48,30 @@ k_recvmsg(const unsigned int fd, const void *const ptr, const unsigned int flags + return rc; + } + ++#define SC_setsockopt 14 ++static long ++k_setsockopt(const unsigned int fd, const unsigned int level, ++ const unsigned int optname, const void *const optval, ++ const unsigned int len) ++{ ++ const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL; ++#ifdef __NR_setsockopt ++ const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL; ++#endif ++ ++ return syscall( ++#ifdef __NR_setsockopt ++ __NR_setsockopt, ++#else /* socketcall */ ++ __NR_socketcall, SC_setsockopt, ++#endif ++ fill | fd , fill | level, fill | optname, optval, fill | len ++#ifdef __NR_setsockopt ++ , bad ++#endif ++ ); ++} ++ + static void + print_timestamp_old(const struct cmsghdr *c) + { +@@ -139,7 +163,12 @@ test_sockopt(int so_val, const char *str, void (*fun)(const struct cmsghdr *)) + perror_msg_and_skip(data); + + const int opt_1 = 1; +- if (setsockopt(sv[0], SOL_SOCKET, so_val, &opt_1, sizeof(opt_1))) { ++ /* ++ * glibc-2.34~294 adds fallsback for SO_TIMESTAMP{,NS}_NEW that calls ++ * SO_TIMESTAMP{,NS}_OLD, so we have to call the setsockopt directly ++ * in order to avoid unexpected recvmsg msg types. ++ */ ++ if (k_setsockopt(sv[0], SOL_SOCKET, so_val, &opt_1, sizeof(opt_1))) { + perror(str); + return 0; + } +-- +2.1.4 + diff --git a/SPECS/strace.spec b/SPECS/strace.spec new file mode 100644 index 0000000..d73f7b3 --- /dev/null +++ b/SPECS/strace.spec @@ -0,0 +1,695 @@ +Summary: Tracks and displays system calls associated with a running process +Name: strace +Version: 5.13 +Release: 3%{?dist} +# The test suite is GPLv2+, all the rest is LGPLv2.1+. +License: LGPL-2.1+ and GPL-2.0+ +# Some distros require Group tag to be present, +# some require Group tag to be absent, +# some do not care about Group tag at all, +# and we have to cater for all of them. +%if 0%{?fedora} < 28 && 0%{?centos} < 8 && 0%{?rhel} < 8 && 0%{?suse_version} < 1500 +Group: Development%{?suse_version:/Tools}/Debuggers +%endif +URL: https://strace.io +%if 0%{?fedora} >= 12 || 0%{?centos} >= 6 || 0%{?rhel} >= 6 || 0%{?suse_version} >= 1200 +Source: https://strace.io/files/%{version}/strace-%{version}.tar.xz +BuildRequires: xz +%else +Source: strace-%{version}.tar.gz +%endif +BuildRequires: gcc gzip make + +# Install Bluetooth headers for AF_BLUETOOTH sockets decoding. +%if 0%{?fedora} >= 18 || 0%{?centos} >= 6 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1200 +BuildRequires: pkgconfig(bluez) +%endif + +# Install elfutils-devel or libdw-devel to enable strace -k option. +# Install binutils-devel to enable symbol demangling. +%if 0%{?fedora} >= 20 || 0%{?centos} >= 6 || 0%{?rhel} >= 6 +%define buildrequires_stacktrace BuildRequires: elfutils-devel binutils-devel +%define buildrequires_selinux BuildRequires: libselinux-devel +%endif +%if 0%{?suse_version} >= 1100 +%define buildrequires_stacktrace BuildRequires: libdw-devel binutils-devel +%define buildrequires_selinux BuildRequires: libselinux-devel +%endif +%{?buildrequires_stacktrace} +%{?buildrequires_selinux} + +# OBS compatibility +%{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release} +%define maybe_use_defattr %{?suse_version:%%defattr(-,root,root)} + +# v5.13-10-g0211fdc "tests: change sockopt-timestamp test to use syscall(__NR_recvmsg)" +Patch141: 0141-tests-change-sockopt-timestamp-test-to-use-syscall-_.patch +# v5.13-55-g6b2191f "filter_qualify: free allocated data on the error path exit of parse_poke_token" +Patch150: 0150-filter_qualify-free-allocated-data-on-the-error-path.patch +# v5.13-56-g80dc60c "macros: expand BIT macros, add MASK macros; add *_SAFE macros" +Patch151: 0151-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch +# v5.13-58-g94ae5c2 "trie: use BIT* and MASK* macros" +Patch152: 0152-trie-use-BIT-and-MASK-macros.patch +# v5.13-65-g41b753e "tee: rewrite num_params access in tee_fetch_buf_data" +Patch153: 0153-tee-rewrite-num_params-access-in-tee_fetch_buf_data.patch +Patch154: 0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch + +# Fallback definitions for make_build/make_install macros +%{?!__make: %global __make %_bindir/make} +%{?!__install: %global __install %_bindir/install} +%{?!make_build: %global make_build %__make %{?_smp_mflags}} +%{?!make_install: %global make_install %__make install DESTDIR="%{?buildroot}" INSTALL="%__install -p"} + +%description +The strace program intercepts and records the system calls called and +received by a running process. Strace can print a record of each +system call, its arguments and its return value. Strace is useful for +diagnosing problems and debugging, as well as for instructional +purposes. + +Install strace if you need a tool to track the system calls made and +received by a process. + +%prep +%setup -q + +%patch141 -p1 +%patch150 -p1 +%patch151 -p1 +%patch152 -p1 +%patch153 -p1 +%patch154 -p1 + +echo -n %version-%release > .tarball-version +echo -n 2021 > .year +echo -n 2021-07-20 > doc/.strace.1.in.date + +%build +echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION' +uname -a |head -1 +libc="$(ldd /bin/sh |sed -n 's|^[^/]*\(/[^ ]*/libc\.so[^ ]*\).*|\1|p' |head -1)" +$libc |head -1 +file -L /bin/sh +gcc --version |head -1 +ld --version |head -1 +kver="$(printf '%%s\n%%s\n' '#include ' 'LINUX_VERSION_CODE' | gcc -E -P -)" +printf 'kernel-headers %%s.%%s.%%s\n' $(($kver/65536)) $(($kver/256%%256)) $(($kver%%256)) +echo 'END OF BUILD ENVIRONMENT INFORMATION' + +CFLAGS="$RPM_OPT_FLAGS $LDFLAGS" +# Removing explicit -m64 as it breaks mpers +[ "x${CFLAGS#*-m64}" = "x${CFLAGS}" ] || CFLAGS=$(echo "$CFLAGS" | sed 's/-m64//g') +export CFLAGS + +CPPFLAGS="-isystem %{_includedir} %{optflags}" +# Removing explicit -m64 as it breaks mpers +[ "x${CPPFLAGS#*-m64}" = "x${CPPFLAGS}" ] || CPPFLAGS=$(echo "$CPPFLAGS" | sed 's/-m64//g') +export CPPFLAGS + +CFLAGS_FOR_BUILD="$RPM_OPT_FLAGS"; export CFLAGS_FOR_BUILD +%configure --enable-mpers=check +%make_build + +%install +%make_install + +# some say uncompressed changelog files are too big +for f in ChangeLog ChangeLog-CVS; do + gzip -9n < "$f" > "$f".gz & +done +wait + +%check +%{buildroot}%{_bindir}/strace -V +%make_build -k check VERBOSE=1 +echo 'BEGIN OF TEST SUITE INFORMATION' +tail -n 99999 -- tests*/test-suite.log tests*/ksysent.gen.log +find tests* -type f -name '*.log' -print0 | + xargs -r0 grep -H '^KERNEL BUG:' -- ||: +echo 'END OF TEST SUITE INFORMATION' + +%files +%maybe_use_defattr +%doc CREDITS ChangeLog.gz ChangeLog-CVS.gz COPYING NEWS README +%{_bindir}/strace +%{_bindir}/strace-log-merge +%{_mandir}/man1/* + +%changelog +* Mon Aug 23 2021 Eugene Syromiatnikov - 5.13-3 +- Address some issues reported by covscan (#1996691). +- Replace 0141-tests-disable-sockopt-timestamp-on-new-glibc-with-__.patch + with upstream v5.13-10-g0211fdc "tests: change sockopt-timestamp test + to use syscall(__NR_recvmsg)" + and 0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch. +- Undo forceful injection of -m64 into CFLAGS/CPPFLAGS to avoid breaking + mpers and its tests (#1996676). + +* Tue Aug 10 2021 Mohan Boddu - 5.13-2 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Tue Jul 20 2021 Eugene Syromiatnikov - 5.13-1 +- Rebase to v5.13 (#1925722, #1925967, #1928305, #1973048). + +* Fri Apr 16 2021 Mohan Boddu - 5.10-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Mon Dec 14 2020 Dmitry V. Levin - 5.10-1 +- v5.9 -> v5.10. + +* Thu Sep 24 2020 Dmitry V. Levin - 5.9-1 +- v5.8 -> v5.9. + +* Thu Aug 06 2020 Dmitry V. Levin - 5.8-1 +- v5.7 -> v5.8. + +* Mon Jun 01 2020 Dmitry V. Levin - 5.7-1 +- v5.6 -> v5.7. + +* Tue Apr 07 2020 Dmitry V. Levin - 5.6-1 +- v5.5 -> v5.6. + +* Thu Feb 06 2020 Dmitry V. Levin - 5.5-1 +- v5.4 -> v5.5. + +* Thu Nov 28 2019 Dmitry V. Levin - 5.4-1 +- v5.3 -> v5.4. + +* Wed Sep 25 2019 Dmitry V. Levin - 5.3-1 +- v5.2 -> v5.3. + +* Fri Jul 12 2019 Dmitry V. Levin - 5.2-1 +- v5.1 -> v5.2. + +* Wed May 22 2019 Dmitry V. Levin - 5.1-1 +- v5.0 -> v5.1. + +* Tue Mar 19 2019 Dmitry V. Levin - 5.0-1 +- v4.26 -> v5.0 (resolves: #478419, #526740, #851457, #1609318, + #1610774, #1662936, #1676045). + +* Wed Dec 26 2018 Dmitry V. Levin - 4.26-1 +- v4.25 -> v4.26. + +* Tue Oct 30 2018 Dmitry V. Levin - 4.25-1 +- v4.24 -> v4.25. + +* Tue Aug 14 2018 Dmitry V. Levin - 4.24-1 +- v4.23 -> v4.24. + +* Thu Jun 14 2018 Dmitry V. Levin - 4.23-1 +- v4.22 -> v4.23. +- Enabled libdw backend for -k option (#1568647). + +* Thu Apr 05 2018 Dmitry V. Levin - 4.22-1 +- v4.21 -> v4.22. + +* Tue Feb 13 2018 Dmitry V. Levin - 4.21-1 +- v4.20 -> v4.21. + +* Mon Nov 13 2017 Dmitry V. Levin - 4.20-1 +- v4.19 -> v4.20. + +* Tue Sep 05 2017 Dmitry V. Levin - 4.19-1 +- v4.18 -> v4.19. + +* Wed Jul 05 2017 Dmitry V. Levin - 4.18-1 +- v4.17 -> v4.18. + +* Wed May 24 2017 Dmitry V. Levin - 4.17-1 +- v4.16 -> v4.17. + +* Tue Feb 14 2017 Dmitry V. Levin - 4.16-1 +- v4.15 -> v4.16. + +* Wed Dec 14 2016 Dmitry V. Levin - 4.15-1 +- v4.14-100-g622af42 -> v4.15. + +* Wed Nov 16 2016 Dmitry V. Levin - 4.14.0.100.622a-1 +- v4.14 -> v4.14-100-g622af42: + + implemented syscall fault injection. + +* Tue Oct 04 2016 Dmitry V. Levin - 4.14-1 +- v4.13 -> v4.14: + + added printing of the mode argument of open and openat syscalls + when O_TMPFILE flag is set (#1377846). + +* Tue Jul 26 2016 Dmitry V. Levin - 4.13-1 +- v4.12 -> v4.13. + +* Tue May 31 2016 Dmitry V. Levin - 4.12-1 +- v4.11-163-g972018f -> v4.12. + +* Fri Feb 05 2016 Fedora Release Engineering - 4.11.0.163.9720-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jan 15 2016 Dmitry V. Levin - 4.11.0.163.9720-1 +- New upstream snapshot v4.11-163-g972018f: + + fixed decoding of syscalls unknown to the kernel on s390/s390x (#1298294). + +* Wed Dec 23 2015 Dmitry V. Levin - 4.11-2 +- Enabled experimental -k option on x86_64 (#1170296). + +* Mon Dec 21 2015 Dmitry V. Levin - 4.11-1 +- New upstream release: + + print nanoseconds along with seconds in stat family syscalls (#1251176). + +* Fri Jun 19 2015 Fedora Release Engineering - 4.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon May 11 2015 Marcin Juszkiewicz - 4.10-2 +- Backport set of upstream patches to get it buildable on AArch64 + +* Fri Mar 06 2015 Dmitry V. Levin - 4.10-1 +- New upstream release: + + enhanced ioctl decoding (#902788). + +* Mon Nov 03 2014 Lubomir Rintel - 4.9-3 +- Regenerate ioctl entries with proper kernel headers + +* Mon Aug 18 2014 Fedora Release Engineering - 4.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 15 2014 Dmitry V. Levin - 4.9-1 +- New upstream release: + + fixed build when and conflict (#993384); + + updated CLOCK_* constants (#1088455); + + enabled ppc64le support (#1122323); + + fixed attach to a process on ppc64le (#1129569). + +* Fri Jul 25 2014 Dan HorĂ¡k - 4.8-5 +- update for ppc64 + +* Sun Jun 08 2014 Fedora Release Engineering - 4.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Fri Dec 6 2013 Peter Robinson 4.8-3 +- Fix FTBFS + +* Sun Aug 04 2013 Fedora Release Engineering - 4.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jun 03 2013 Dmitry V. Levin - 4.8-1 +- New upstream release: + + fixed ERESTARTNOINTR leaking to userspace on ancient kernels (#659382); + + fixed decoding of *xattr syscalls (#885233); + + fixed handling of files with 64-bit inode numbers by 32-bit strace (#912790); + + added aarch64 support (#969858). + +* Fri Feb 15 2013 Fedora Release Engineering - 4.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Jul 21 2012 Fedora Release Engineering - 4.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed May 02 2012 Dmitry V. Levin 4.7-1 +- New upstream release. + + implemented proper handling of real SIGTRAPs (#162774). + +* Sat Jan 14 2012 Fedora Release Engineering - 4.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Mar 14 2011 Dmitry V. Levin - 4.6-1 +- New upstream release. + + fixed a corner case in waitpid handling (#663547). + +* Wed Feb 09 2011 Fedora Release Engineering - 4.5.20-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Apr 13 2010 Roland McGrath - 4.5.20-1 +- New upstream release, work mostly by Andreas Schwab and Dmitry V. Levin. + + fixed potential stack buffer overflow in select decoder (#556678); + + fixed FTBFS (#539044). + +* Wed Oct 21 2009 Roland McGrath - 4.5.19-1 +- New upstream release, work mostly by Dmitry V. Levin + + exit/kill strace with traced process exitcode/signal (#105371); + + fixed build on ARM EABI (#507576); + + fixed display of 32-bit argv array on 64-bit architectures (#519480); + + fixed display of 32-bit fcntl(F_SETLK) on 64-bit architectures (#471169); + + fixed several bugs in strings decoder, including potential heap + memory corruption (#470529, #478324, #511035). + +* Thu Aug 28 2008 Roland McGrath - 4.5.18-1 +- build fix for newer kernel headers (#457291) +- fix CLONE_VFORK handling (#455078) +- Support new Linux/PPC system call subpage_prot and PROT_SAO flag. +- In sigaction system call, display sa_flags value along with SIG_DFL/SIG_IGN. + +* Mon Jul 21 2008 Roland McGrath - 4.5.17-1 +- handle O_CLOEXEC, MSG_CMSG_CLOEXEC (#365781) +- fix biarch stat64 decoding (#222275) +- fix spurious "..." in printing of environment strings (#358241) +- improve prctl decoding (#364401) +- fix hang wait on exited child with exited child (#354261) +- fix biarch fork/vfork (-f) tracing (#447475) +- fix biarch printing of negative argument kill (#430585) +- fix biarch decoding of error return values (#447587) +- fix -f tracing of CLONE_VFORK (#455078) +- fix ia64 register clobberation in -f tracing (#453438) +- print SO_NODEFER, SA_RESETHAND instead of SA_NOMASK, SA_ONESHOT (#455821) +- fix futex argument decoding (#448628, #448629) + +* Fri Aug 3 2007 Roland McGrath - 4.5.16-1 +- fix multithread issues (#240962, #240961, #247907) +- fix spurious SIGSTOP on early interrupt (#240986) +- fix utime for biarch (#247185) +- fix -u error message (#247170) +- better futex syscall printing (##241467) +- fix argv/envp printing with small -s settings, and for biarch +- new syscalls: getcpu, eventfd, timerfd, signalfd, epoll_pwait, + move_pages, utimensat + +* Tue Jan 16 2007 Roland McGrath - 4.5.15-1 +- biarch fixes (#179740, #192193, #171626, #173050, #218433, #218043) +- fix -ff -o behavior (#204950, #218435, #193808, #219423) +- better quotactl printing (#118696) +- *at, inotify*, pselect6, ppoll and unshare syscalls (#178633, #191275) +- glibc-2.5 build fixes (#209856) +- memory corruption fixes (#200621 +- fix race in child setup under -f (#180293) +- show ipc key values in hex (#198179, #192182) +- disallow -c with -ff (#187847) +- Resolves: RHBZ #179740, RHBZ #192193, RHBZ #204950, RHBZ #218435 +- Resolves: RHBZ #193808, RHBZ #219423, RHBZ #171626, RHBZ #173050 +- Resolves: RHBZ #218433, RHBZ #218043, RHBZ #118696, RHBZ #178633 +- Resolves: RHBZ #191275, RHBZ #209856, RHBZ #200621, RHBZ #180293 +- Resolves: RHBZ #198179, RHBZ #198182, RHBZ #187847 + +* Mon Nov 20 2006 Jakub Jelinek - 4.5.14-4 +- Fix ia64 syscall decoding (#206768) +- Fix build with glibc-2.4.90-33 and up on all arches but ia64 +- Fix build against 2.6.18+ headers + +* Tue Aug 22 2006 Roland McGrath - 4.5.14-3 +- Fix bogus decoding of syscalls >= 300 (#201462, #202620). + +* Fri Jul 14 2006 Jesse Keating - 4.5.14-2 +- rebuild + +* Fri Feb 10 2006 Jesse Keating - 4.5.14-1.2 +- bump again for long double bug on ppc{,64} + +* Tue Feb 07 2006 Jesse Keating - 4.5.14-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Jan 16 2006 Roland McGrath - 4.5.14-1 +- Fix biarch decoding of socket syscalls (#174354). +- Fix biarch -e support (#173986). +- Accept numeric syscalls in -e (#174798). +- Fix ipc syscall decoding (#164755). +- Improve msgrcv printing (#164757). +- Man page updates (#165375). +- Improve mount syscall printing (#165377). +- Correct printing of restarting syscalls (#165469). + +* Wed Aug 3 2005 Roland McGrath - 4.5.13-1 +- Fix setsockopt decoding on 64-bit (#162449). +- Fix typos in socket option name strings (#161578). +- Display more IPV6 socket options by name (#162450). +- Don't display inappropriate syscalls for -e trace=file (#159340). +- New selector type -e trace=desc for file-descriptor using calls (#159400). +- Fix 32-bit old_mmap syscall decoding on x86-64 (#162467, #164215). +- Fix errors detaching from multithreaded process on interrupt (#161919). +- Note 4.5.12 fix for crash handling bad signal numbers (#162739). + +* Wed Jun 8 2005 Roland McGrath - 4.5.12-1 +- Fix known syscall recognition for IA32 processes on x86-64 (#158934). +- Fix bad output for ptrace on x86-64 (#159787). +- Fix potential buffer overruns (#151570, #159196). +- Make some diagnostics more consistent (#159308). +- Update PowerPC system calls. +- Better printing for Linux aio system calls. +- Don't truncate statfs64 fields to 32 bits in output (#158243). +- Cosmetic code cleanups (#159688). + +* Tue Mar 22 2005 Roland McGrath - 4.5.11-1 +- Build tweaks. +- Note 4.5.10 select fix (#151570). + +* Mon Mar 14 2005 Roland McGrath - 4.5.10-1 +- Fix select handling on nonstandard fd_set sizes. +- Don't print errors for null file name pointers. +- Fix initial execve output with -i (#143365). + +* Fri Feb 4 2005 Roland McGrath - 4.5.9-2 +- update ia64 syscall list (#146245) +- fix x86_64 syscall argument extraction for 32-bit processes (#146093) +- fix -e signal=NAME parsing (#143362) +- fix x86_64 exit_group syscall handling +- improve socket ioctl printing (#138223) +- code cleanups (#143369, #143370) +- improve mount flags printing (#141932) +- support symbolic printing of x86_64 arch_prctl parameters (#142667) +- fix potential crash in getxattr printing + +* Tue Oct 19 2004 Roland McGrath - 4.5.8-1 +- fix multithreaded exit handling (#132150, #135254) +- fix ioctl name matching (#129808) +- print RTC_* ioctl structure contents (#58606) +- grok epoll_* syscalls (#134463) +- grok new RLIMIT_* values (#133594) +- print struct cmsghdr contents for sendmsg (#131689) +- fix clock_* and timer_* argument output (#131420) + +* Tue Aug 31 2004 Roland McGrath - 4.5.7-2 +- new upstream version, misc fixes and updates (#128091, #129166, #128391, #129378, #130965, #131177) + +* Mon Jul 12 2004 Roland McGrath 4.5.6-1 +- new upstream version, updates ioctl lists (#127398), fixes quotactl (#127393), more ioctl decoding (#126917) + +* Sun Jun 27 2004 Roland McGrath 4.5.5-1 +- new upstream version, fixes x86-64 biarch support (#126547) + +* Tue Jun 15 2004 Elliot Lee 4.5.4-2 +- rebuilt + +* Thu Jun 3 2004 Roland McGrath 4.5.4-0.FC1 +- rebuilt for FC1 update + +* Thu Jun 3 2004 Roland McGrath 4.5.4-1 +- new upstream version, more ioctls (#122257), minor fixes + +* Fri Apr 16 2004 Roland McGrath 4.5.3-1 +- new upstream version, mq_* calls (#120701), -p vs NPTL (#120462), more fixes (#118694, #120541, #118685) + +* Tue Mar 02 2004 Elliot Lee 4.5.2-1.1 +- rebuilt + +* Mon Mar 1 2004 Roland McGrath 4.5.2-1 +- new upstream version, sched_* calls (#116990), show core flag (#112117) + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Thu Nov 13 2003 Roland McGrath 4.5.1-1 +- new upstream version, more fixes (#108012, #105366, #105359, #105358) + +* Tue Sep 30 2003 Roland McGrath 4.5-3 +- revert bogus s390 fix + +* Thu Sep 25 2003 Roland McGrath 4.5-1.2.1AS +- rebuilt for 2.1AS erratum + +* Wed Sep 24 2003 Roland McGrath 4.5-2 +- rebuilt + +* Wed Sep 24 2003 Roland McGrath 4.5-1 +- new upstream version, more fixes (#101499, #104365) + +* Thu Jul 17 2003 Roland McGrath 4.4.99-2 +- rebuilt + +* Thu Jul 17 2003 Roland McGrath 4.4.99-1 +- new upstream version, groks more new system calls, PF_INET6 sockets + +* Tue Jun 10 2003 Roland McGrath 4.4.98-1 +- new upstream version, more fixes (#90754, #91085) + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Sun Mar 30 2003 Roland McGrath 4.4.96-1 +- new upstream version, handles yet more 2.5 syscalls, x86_64 & ia64 fixes + +* Mon Feb 24 2003 Elliot Lee 4.4.95-2 +- rebuilt + +* Mon Feb 24 2003 Roland McGrath 4.4.95-1 +- new upstream version, fixed getresuid/getresgid (#84959) + +* Wed Feb 19 2003 Roland McGrath 4.4.94-1 +- new upstream version, new option -E to set environment variables (#82392) + +* Wed Jan 22 2003 Tim Powers 4.4.93-2 +- rebuilt + +* Tue Jan 21 2003 Roland McGrath 4.4.93-1 +- new upstream version, fixes ppc and s390 bugs, adds missing ptrace requests + +* Fri Jan 10 2003 Roland McGrath 4.4.91-1 +- new upstream version, fixes -f on x86-64 + +* Fri Jan 10 2003 Roland McGrath 4.4.90-1 +- new upstream version, fixes all known bugs modulo ia64 and s390 issues + +* Fri Jan 03 2003 Florian La Roche 4.4-11 +- add further s390 patch from IBM + +* Wed Nov 27 2002 Tim Powers 4.4-10 +- remove unpackaged files from the buildroot + +* Mon Oct 07 2002 Phil Knirsch 4.4-9.1 +- Added latest s390(x) patch. + +* Fri Sep 06 2002 Karsten Hopp 4.4-9 +- preliminary x86_64 support with an ugly patch to help + debugging. Needs cleanup! + +* Mon Sep 2 2002 Jakub Jelinek 4.4-8 +- newer version of the clone fixing patch (Roland McGrath) +- aio syscalls for i386/ia64/ppc (Ben LaHaise) + +* Wed Aug 28 2002 Jakub Jelinek 4.4-7 +- fix strace -f (Roland McGrath, #68994) +- handle ?et_thread_area, SA_RESTORER (Ulrich Drepper) + +* Fri Jun 21 2002 Jakub Jelinek 4.4-6 +- handle futexes, *xattr, sendfile64, etc. (Ulrich Drepper) +- handle modify_ldt (#66894) + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Tue Apr 16 2002 Jakub Jelinek 4.4-4 +- fix for the last patch by Jeff Law (#62591) + +* Mon Mar 4 2002 Preston Brown 4.4-3 +- integrate patch from Jeff Law to eliminate hang tracing threads + +* Sat Feb 23 2002 Florian La Roche +- minor update from debian tar-ball + +* Wed Jan 02 2002 Florian La Roche +- update to 4.4 + +* Sun Jul 22 2001 Florian La Roche +- disable s390 patches, they are already included + +* Wed Jul 18 2001 Preston Brown 4.3-1 +- new upstream version. Seems to have integrated most new syscalls +- tracing threaded programs is now functional. + +* Mon Jun 11 2001 Than Ngo +- port s390 patches from IBM + +* Wed May 16 2001 Nalin Dahyabhai +- modify new syscall patch to allocate enough heap space in setgroups32() + +* Wed Feb 14 2001 Jakub Jelinek +- #include in addition to + +* Fri Jan 26 2001 Karsten Hopp +- clean up conflicting patches. This happened only + when building on S390 + +* Fri Jan 19 2001 Bill Nottingham +- update to CVS, reintegrate ia64 support + +* Fri Dec 8 2000 Bernhard Rosenkraenzer +- Get S/390 support into the normal package + +* Sat Nov 18 2000 Florian La Roche +- added S/390 patch from IBM, adapting it to not conflict with + IA64 patch + +* Sat Aug 19 2000 Jakub Jelinek +- doh, actually apply the 2.4 syscalls patch +- make it compile with 2.4.0-test7-pre4+ headers, add + getdents64 and fcntl64 + +* Thu Aug 3 2000 Jakub Jelinek +- add a bunch of new 2.4 syscalls (#14036) + +* Wed Jul 12 2000 Prospector +- automatic rebuild +- excludearch ia64 + +* Fri Jun 2 2000 Matt Wilson +- use buildinstall for FHS + +* Wed May 24 2000 Jakub Jelinek +- make things compile on sparc +- fix sigreturn on sparc + +* Fri Mar 31 2000 Bill Nottingham +- fix stat64 misdef (#10485) + +* Tue Mar 21 2000 Michael K. Johnson +- added ia64 patch + +* Thu Feb 03 2000 Cristian Gafton +- man pages are compressed +- version 4.2 (why are we keeping all these patches around?) + +* Sat Nov 27 1999 Jeff Johnson +- update to 4.1 (with sparc socketcall patch). + +* Fri Nov 12 1999 Jakub Jelinek +- fix socketcall on sparc. + +* Thu Sep 02 1999 Cristian Gafton +- fix KERN_SECURELVL compile problem + +* Tue Aug 31 1999 Cristian Gafton +- added alpha patch from HJLu to fix the osf_sigprocmask interpretation + +* Sat Jun 12 1999 Jeff Johnson +- update to 3.99.1. + +* Wed Jun 2 1999 Jeff Johnson +- add (the other :-) jj's sparc patch. + +* Wed May 26 1999 Jeff Johnson +- upgrade to 3.99 in order to +- add new 2.2.x open flags (#2955). +- add new 2.2.x syscalls (#2866). +- strace 3.1 patches carried along for now. + +* Sun May 16 1999 Jeff Johnson +- don't rely on (broken!) rpm %%patch (#2735) + +* Tue Apr 06 1999 Preston Brown +- strip binary + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 16) + +* Tue Feb 9 1999 Jeff Johnson +- vfork est arrive! + +* Tue Feb 9 1999 Christopher Blizzard +- Add patch to follow clone() syscalls, too. + +* Sun Jan 17 1999 Jeff Johnson +- patch to build alpha/sparc with glibc 2.1. + +* Thu Dec 03 1998 Cristian Gafton +- patch to build on ARM + +* Wed Sep 30 1998 Jeff Johnson +- fix typo (printf, not tprintf). + +* Sat Sep 19 1998 Jeff Johnson +- fix compile problem on sparc. + +* Tue Aug 18 1998 Cristian Gafton +- buildroot + +* Mon Jul 20 1998 Cristian Gafton +- added the umoven patch from James Youngman +- fixed build problems on newer glibc releases + +* Mon Jun 08 1998 Prospector System +- translations modified for de, fr, tr