From 15114ec215f889b71fd1f9ed2012b8deeb33a55c Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Wed, 6 Aug 2014 16:46:13 +0000 Subject: [PATCH] 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. --- net.c | 12 +++++++----- tests/net-fd.test | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/net.c b/net.c index 08341adc..0e6bcce6 100644 --- a/net.c +++ b/net.c @@ -571,7 +571,7 @@ sys_listen(struct tcb *tcp) } 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 @@ do_accept(struct tcb *tcp, int flags_arg) 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 @@ sys_shutdown(struct tcb *tcp) 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 0f6b4e2c..fc0d3cd0 100755 --- a/tests/net-fd.test +++ b/tests/net-fd.test @@ -41,7 +41,7 @@ grep_log() grep_log bind '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0' grep_log listen '\(0, 5\) += 0' grep_log getsockname '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, \[15\]\) += 0' -grep_log accept '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1' +grep_log accept '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1' grep_log connect '\(1, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0' exit 0 -- 2.40.0