[PATCH v2] Decode paths associated with file descriptors returned by syscalls
Dmitry V. Levin
ldv at altlinux.org
Tue Jun 3 13:52:10 UTC 2014
On Tue, Jun 03, 2014 at 09:02:39AM +0530, zubin.mithra at gmail.com wrote:
> From: Zubin Mithra <zubin.mithra at gmail.com>
>
> * defs.h (RVAL_FD): New macro.
> * defs.h (RVAL_MASK, RVAL_STR, RVAL_NONE): Macro values modified.
> * desc.c (sys_dup): New function.
> * desc.c (sys_delete_module): New function.
> * desc.c (sys_open, sys_dup2, sys_dup3, sys_creat): Modified to return
> RVAL_FD
> * linux/dummy.h (sys_delete_module, sys_dup): Macros removed
> * linux/syscall.h (sys_close, sys_delete_module, sys_dup): New prototype
> * syscall.c (trace_syscall_exiting): Modified to handle RVAL_FD return
> value
>
> Signed-off-by: Zubin Mithra <zubin.mithra at gmail.com>
> ---
> defs.h | 7 ++++---
> desc.c | 15 +++++++++++++--
> file.c | 8 +++++++-
> linux/dummy.h | 2 --
> linux/syscall.h | 2 ++
> syscall.c | 8 ++++++++
> 6 files changed, 34 insertions(+), 8 deletions(-)
>
> diff --git a/defs.h b/defs.h
> index c862de5..99493b3 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -533,10 +533,11 @@ extern const struct xlat whence_codes[];
> # endif
> # define RVAL_LUDECIMAL 007 /* long unsigned decimal format */
> #endif
> -#define RVAL_MASK 007 /* mask for these values */
> +#define RVAL_FD 010 /* file descriptors */
> +#define RVAL_MASK 017 /* mask for these values */
>
> -#define RVAL_STR 010 /* Print `auxstr' field after return val */
> -#define RVAL_NONE 020 /* Print nothing */
> +#define RVAL_STR 020 /* Print `auxstr' field after return val */
> +#define RVAL_NONE 040 /* Print nothing */
>
> #define TRACE_FILE 001 /* Trace file-related syscalls. */
> #define TRACE_IPC 002 /* Trace IPC-related syscalls. */
> diff --git a/desc.c b/desc.c
> index 0c9a817..5bb1b21 100644
> --- a/desc.c
> +++ b/desc.c
> @@ -265,6 +265,15 @@ sys_close(struct tcb *tcp)
> return 0;
> }
>
> +int
> +sys_dup(struct tcb *tcp)
> +{
> + if (entering(tcp)) {
> + printfd(tcp, tcp->u_arg[0]);
> + }
> + return RVAL_FD;
> +}
> +
> static int
> do_dup2(struct tcb *tcp, int flags_arg)
> {
> @@ -283,13 +292,15 @@ do_dup2(struct tcb *tcp, int flags_arg)
> int
> sys_dup2(struct tcb *tcp)
> {
> - return do_dup2(tcp, -1);
> + do_dup2(tcp, -1);
> + return RVAL_FD;
> }
>
> int
> sys_dup3(struct tcb *tcp)
> {
> - return do_dup2(tcp, 2);
> + do_dup2(tcp, 2);
> + return RVAL_FD;
> }
I'd rather change do_dup2 to return RVAL_FD rather than change its users.
>
> #if defined(ALPHA)
> diff --git a/file.c b/file.c
> index c322242..92a5873 100644
> --- a/file.c
> +++ b/file.c
> @@ -309,6 +309,12 @@ decode_open(struct tcb *tcp, int offset)
> int
> sys_open(struct tcb *tcp)
> {
> + decode_open(tcp, 0);
> + return RVAL_FD;
> +}
> +
Same here, lets change decode_open to return RVAL_FD instead.
> +int sys_delete_module(struct tcb *tcp)
> +{
> return decode_open(tcp, 0);
> }
btw, it's not right for sys_delete_module to use decode_open,
but that's a subject for another patch.
--
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20140603/e64c404d/attachment.bin>
More information about the Strace-devel
mailing list