summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@strace.io>2021-11-27 08:01:00 +0000
committerDmitry V. Levin <ldv@strace.io>2021-11-27 08:01:00 +0000
commit8d83c8270ba05878b389b1c646b3d2187d40ad4c (patch)
tree58897c48c87c2153e23ce87cc5aac998a80bdce8
parentd00ccc6bbda8bcf5fc7987e048e3e271ffc1a484 (diff)
downloadstrace-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.c15
-rw-r--r--tests/.gitignore5
-rw-r--r--tests/dev--decode-fds-all.c1
-rw-r--r--tests/dev--decode-fds-none.c2
-rw-r--r--tests/dev--decode-fds-socket.c3
-rw-r--r--tests/dev-yy.c27
-rw-r--r--tests/gen_tests.in9
-rw-r--r--tests/net--decode-fds-all-netlink.c1
-rw-r--r--tests/net--decode-fds-dev-netlink.c3
-rw-r--r--tests/pidfd_open--decode-fd-all.c1
-rw-r--r--tests/pidfd_open--decode-fd-none.c1
-rw-r--r--tests/pidfd_open--decode-fd-socket.c2
-rwxr-xr-xtests/pure_executables.list5
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