Decode file descriptors returned by accept and accept4 syscalls
* net.c (do_accept): Rename to do_sockname.
(sys_accept, sys_accept4): Update callers, return RVAL_FD.
(sys_getsockname, sys_getpeername): Call do_sockname directly.
* tests/net-fd.test: Update.
diff --git a/net.c b/net.c
index 08341ad..0e6bcce 100644
--- a/net.c
+++ b/net.c
@@ -571,7 +571,7 @@
}
static int
-do_accept(struct tcb *tcp, int flags_arg)
+do_sockname(struct tcb *tcp, int flags_arg)
{
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
@@ -602,13 +602,15 @@
int
sys_accept(struct tcb *tcp)
{
- return do_accept(tcp, -1);
+ do_sockname(tcp, -1);
+ return RVAL_FD;
}
int
sys_accept4(struct tcb *tcp)
{
- return do_accept(tcp, 3);
+ do_sockname(tcp, 3);
+ return RVAL_FD;
}
int
@@ -827,13 +829,13 @@
int
sys_getsockname(struct tcb *tcp)
{
- return sys_accept(tcp);
+ return do_sockname(tcp, -1);
}
int
sys_getpeername(struct tcb *tcp)
{
- return sys_accept(tcp);
+ return do_sockname(tcp, -1);
}
static int
diff --git a/tests/net-fd.test b/tests/net-fd.test
index 0f6b4e2..fc0d3cd 100755
--- a/tests/net-fd.test
+++ b/tests/net-fd.test
@@ -41,7 +41,7 @@
grep_log bind '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0'
grep_log listen '\(0<socket:\[[0-9]+\]>, 5\) += 0'
grep_log getsockname '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, \[15\]\) += 0'
-grep_log accept '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1'
+grep_log accept '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1<socket:\[[0-9]+\]>'
grep_log connect '\(1<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0'
exit 0