diff options
author | Dmitry V. Levin <ldv@strace.io> | 2021-11-27 08:01:00 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2021-11-27 08:01:00 +0000 |
commit | 8d83c8270ba05878b389b1c646b3d2187d40ad4c (patch) | |
tree | 58897c48c87c2153e23ce87cc5aac998a80bdce8 | |
parent | d00ccc6bbda8bcf5fc7987e048e3e271ffc1a484 (diff) | |
download | strace-8d83c8270ba05878b389b1c646b3d2187d40ad4c.tar.gz |
Do not decode fd path unless --decode-fds=path is specified
Before this change, --decode-fds with any argument would result to the
file path corresponding to the file descriptor being printed even when
the descriptor type does not match the type specified by the
--decode-fds argument. After this change, the file path corresponding
to the file descriptor will be printed only when --decode-fds argument
is not specified or contains "path".
* src/util.c (print_quoted_string_in_angle_brackets): New function.
(printfd_pid): Use it to print the file path when DECODE_FD_PATH is set.
* tests/dev--decode-fds-all.c: New file.
* tests/dev--decode-fds-none.c: Likewise.
* tests/net--decode-fds-all-netlink.c: Likewise.
* tests/pidfd_open--decode-fd-all.c: Likewise.
* tests/pidfd_open--decode-fd-none.c: Likewise.
* tests/dev--decode-fds-socket.c: Include "dev--decode-fds-none.c"
instead of "dev-yy.c".
(PRINT_DEVNUM): Remove.
* tests/dev-yy.c: Add PRINT_PATH support.
* tests/net--decode-fds-dev-netlink.c: Include
"net--decode-fds-none-netlink.c" instead of net-yy-netlink.c.
(PRINT_SOCK): Remove.
* tests/pidfd_open--decode-fd-socket.c: Include
"pidfd_open--decode-fd-none.c" instead of "pidfd_open-y.c".
* tests/.gitignore: Add dev--decode-fds-all, dev--decode-fds-none,
net--decode-fds-all-netlink, pidfd_open--decode-fd-all, and
pidfd_open--decode-fd-none.
* tests/pure_executables.list: Likewise.
* tests/gen_tests.in (dev--decode-fds-all, dev--decode-fds-none,
net--decode-fds-all-netlink, pidfd_open--decode-fd-all,
pidfd_open--decode-fd-none): New tests.
(dev--decode-fds-socket): Update argument for -a option.
(net--decode-fds-dev-netlink): Add -a option.
Reported-by: Renaud Métrich <rmetrich@redhat.com>
Fixes: v5.6~168 "strace: add a long option alias for -y"
-rw-r--r-- | src/util.c | 15 | ||||
-rw-r--r-- | tests/.gitignore | 5 | ||||
-rw-r--r-- | tests/dev--decode-fds-all.c | 1 | ||||
-rw-r--r-- | tests/dev--decode-fds-none.c | 2 | ||||
-rw-r--r-- | tests/dev--decode-fds-socket.c | 3 | ||||
-rw-r--r-- | tests/dev-yy.c | 27 | ||||
-rw-r--r-- | tests/gen_tests.in | 9 | ||||
-rw-r--r-- | tests/net--decode-fds-all-netlink.c | 1 | ||||
-rw-r--r-- | tests/net--decode-fds-dev-netlink.c | 3 | ||||
-rw-r--r-- | tests/pidfd_open--decode-fd-all.c | 1 | ||||
-rw-r--r-- | tests/pidfd_open--decode-fd-none.c | 1 | ||||
-rw-r--r-- | tests/pidfd_open--decode-fd-socket.c | 2 | ||||
-rwxr-xr-x | tests/pure_executables.list | 5 |
13 files changed, 58 insertions, 17 deletions
diff --git a/src/util.c b/src/util.c index 7be816262..302496d36 100644 --- a/src/util.c +++ b/src/util.c @@ -724,6 +724,15 @@ printpidfd(pid_t pid_of_fd, int fd, const char *path) return true; } +static void +print_quoted_string_in_angle_brackets(const char *str) +{ + tprints("<"); + print_quoted_string_ex(str, strlen(str), + QUOTE_OMIT_LEADING_TRAILING_QUOTES, "<>"); + tprints(">"); +} + void printfd_pid(struct tcb *tcp, pid_t pid, int fd) { @@ -741,10 +750,8 @@ printfd_pid(struct tcb *tcp, pid_t pid, int fd) if (is_number_in_set(DECODE_FD_PIDFD, decode_fd_set) && printpidfd(pid, fd, path)) goto printed; - tprints("<"); - print_quoted_string_ex(path, strlen(path), - QUOTE_OMIT_LEADING_TRAILING_QUOTES, "<>"); - tprints(">"); + if (is_number_in_set(DECODE_FD_PATH, decode_fd_set)) + print_quoted_string_in_angle_brackets(path); printed: ; } diff --git a/tests/.gitignore b/tests/.gitignore index f3ec97d42..28d0f54b8 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -74,7 +74,9 @@ count-f creat delay delete_module +dev--decode-fds-all dev--decode-fds-dev +dev--decode-fds-none dev--decode-fds-path dev--decode-fds-socket dev-yy @@ -495,6 +497,7 @@ msg_control-v msg_name munlockall nanosleep +net--decode-fds-all-netlink net--decode-fds-dev-netlink net--decode-fds-none-netlink net--decode-fds-path-netlink @@ -642,6 +645,8 @@ pidfd_getfd pidfd_getfd-y pidfd_getfd-yy pidfd_open +pidfd_open--decode-fd-all +pidfd_open--decode-fd-none pidfd_open--decode-fd-path pidfd_open--decode-fd-pidfd pidfd_open--decode-fd-socket diff --git a/tests/dev--decode-fds-all.c b/tests/dev--decode-fds-all.c new file mode 100644 index 000000000..f159f1ed2 --- /dev/null +++ b/tests/dev--decode-fds-all.c @@ -0,0 +1 @@ +#include "dev--decode-fds-dev.c" diff --git a/tests/dev--decode-fds-none.c b/tests/dev--decode-fds-none.c new file mode 100644 index 000000000..62c1716b4 --- /dev/null +++ b/tests/dev--decode-fds-none.c @@ -0,0 +1,2 @@ +#define PRINT_PATH 0 +#include "dev-yy.c" diff --git a/tests/dev--decode-fds-socket.c b/tests/dev--decode-fds-socket.c index 2a5fa1297..c25da7a11 100644 --- a/tests/dev--decode-fds-socket.c +++ b/tests/dev--decode-fds-socket.c @@ -1,2 +1 @@ -#define PRINT_DEVNUM 0 -#include "dev-yy.c" +#include "dev--decode-fds-none.c" diff --git a/tests/dev-yy.c b/tests/dev-yy.c index f149496db..4cf90587f 100644 --- a/tests/dev-yy.c +++ b/tests/dev-yy.c @@ -18,14 +18,24 @@ #include <sys/sysmacros.h> +#ifndef PRINT_PATH +# define PRINT_PATH 1 +#endif + #ifndef PRINT_DEVNUM -# define PRINT_DEVNUM 1 +# if PRINT_PATH +# define PRINT_DEVNUM 1 +# else +# define PRINT_DEVNUM 0 +# endif #endif #if PRINT_DEVNUM # define DEV_FMT "<%s<%s %u:%u>>" -#else +#elif PRINT_PATH # define DEV_FMT "<%s>" +#else +# define DEV_FMT "" #endif #if defined __NR_openat && defined O_PATH @@ -58,14 +68,16 @@ main(void) printf("openat(AT_FDCWD, \"%s\", O_RDONLY|O_PATH) = %s", checks[i].path, sprintrc(fd)); +# if PRINT_PATH if (fd >= 0) printf(DEV_FMT, checks[i].path -# if PRINT_DEVNUM +# if PRINT_DEVNUM , checks[i].blk ? "block" : "char", checks[i].major, checks[i].minor -# endif +# endif ); +# endif puts(""); if (fd < 0) { @@ -79,10 +91,13 @@ main(void) int rc = fsync(fd); printf("fsync(%ld" DEV_FMT ") = %s\n", - fd, checks[i].path, -# if PRINT_DEVNUM + fd, +# if PRINT_PATH + checks[i].path, +# if PRINT_DEVNUM checks[i].blk ? "block" : "char", checks[i].major, checks[i].minor, +# endif # endif sprintrc(rc)); diff --git a/tests/gen_tests.in b/tests/gen_tests.in index 2abb69879..b2f565388 100644 --- a/tests/gen_tests.in +++ b/tests/gen_tests.in @@ -60,9 +60,11 @@ close_range -a21 7>>/dev/full copy_file_range creat -a20 delete_module -a23 +dev--decode-fds-all -a30 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" -e decode-fds=all dev--decode-fds-dev -a30 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" -e decode-fds=dev +dev--decode-fds-none -a9 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" --decode-fds=none dev--decode-fds-path -a19 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" -e decode-fds=path -dev--decode-fds-socket -a19 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" --decode-fds=socket +dev--decode-fds-socket -a9 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" --decode-fds=socket dev-yy -a30 -e trace=openat,fsync -P "/dev/full" -P "/dev/zero" -P "/dev/sda" -yy dup -a7 9>>/dev/full dup-P -a7 --trace=dup -P /dev/full 9>>/dev/full @@ -480,7 +482,8 @@ msg_control-v -v -a21 -e trace=sendmsg msg_name -a20 -e trace=recvmsg munlockall -a13 nanosleep -a20 -net--decode-fds-dev-netlink +net-yy-netlink.test --decode-fds=dev +net--decode-fds-all-netlink +net-yy-netlink.test --decode-fds=all +net--decode-fds-dev-netlink +net-yy-netlink.test --decode-fds=dev -a9 net--decode-fds-none-netlink +net-yy-netlink.test --decode-fds=none -a9 net--decode-fds-path-netlink +net-yy-netlink.test --decode-fds=path net--decode-fds-socket-netlink +net-yy-netlink.test --decode-fds=socket @@ -617,6 +620,8 @@ pidfd_getfd -a18 -Xverbose -e signal=none </dev/full pidfd_getfd-y --trace=pidfd_getfd -a18 -e signal=none -y </dev/full pidfd_getfd-yy --trace=pidfd_getfd -a18 -e signal=none -yy </dev/full pidfd_open -a17 +pidfd_open--decode-fd-all -a17 -e decode-fd=all -e trace=pidfd_open +pidfd_open--decode-fd-none -a17 -e decode-fd=none -e trace=pidfd_open pidfd_open--decode-fd-path -a17 -e decode-fd=path -e trace=pidfd_open pidfd_open--decode-fd-pidfd -a17 -e decode-fd=pidfd -e trace=pidfd_open pidfd_open--decode-fd-socket -a17 -e decode-fd=socket -e trace=pidfd_open diff --git a/tests/net--decode-fds-all-netlink.c b/tests/net--decode-fds-all-netlink.c new file mode 100644 index 000000000..ba2f93f93 --- /dev/null +++ b/tests/net--decode-fds-all-netlink.c @@ -0,0 +1 @@ +#include "net--decode-fds-socket-netlink.c" diff --git a/tests/net--decode-fds-dev-netlink.c b/tests/net--decode-fds-dev-netlink.c index a84f91b5e..b3c41962e 100644 --- a/tests/net--decode-fds-dev-netlink.c +++ b/tests/net--decode-fds-dev-netlink.c @@ -1,2 +1 @@ -#define PRINT_SOCK 1 -#include "net-yy-netlink.c" +#include "net--decode-fds-none-netlink.c" diff --git a/tests/pidfd_open--decode-fd-all.c b/tests/pidfd_open--decode-fd-all.c new file mode 100644 index 000000000..aa366e54d --- /dev/null +++ b/tests/pidfd_open--decode-fd-all.c @@ -0,0 +1 @@ +#include "pidfd_open--decode-fd-pidfd.c" diff --git a/tests/pidfd_open--decode-fd-none.c b/tests/pidfd_open--decode-fd-none.c new file mode 100644 index 000000000..ae1e83266 --- /dev/null +++ b/tests/pidfd_open--decode-fd-none.c @@ -0,0 +1 @@ +#include "pidfd_open.c" diff --git a/tests/pidfd_open--decode-fd-socket.c b/tests/pidfd_open--decode-fd-socket.c index a35883441..566e87aef 100644 --- a/tests/pidfd_open--decode-fd-socket.c +++ b/tests/pidfd_open--decode-fd-socket.c @@ -1 +1 @@ -#include "pidfd_open-y.c" +#include "pidfd_open--decode-fd-none.c" diff --git a/tests/pure_executables.list b/tests/pure_executables.list index aacde78c1..05d95a208 100755 --- a/tests/pure_executables.list +++ b/tests/pure_executables.list @@ -38,7 +38,9 @@ clone3-Xverbose copy_file_range creat delete_module +dev--decode-fds-all dev--decode-fds-dev +dev--decode-fds-none dev--decode-fds-path dev--decode-fds-socket dev-yy @@ -342,6 +344,7 @@ msg_control msg_name munlockall nanosleep +net--decode-fds-all-netlink net--decode-fds-dev-netlink net--decode-fds-none-netlink net--decode-fds-path-netlink @@ -473,6 +476,8 @@ pidfd_getfd pidfd_getfd-y pidfd_getfd-yy pidfd_open +pidfd_open--decode-fd-all +pidfd_open--decode-fd-none pidfd_open--decode-fd-path pidfd_open--decode-fd-pidfd pidfd_open--decode-fd-socket |