Commit Graph

17 Commits

Author SHA1 Message Date
d45d71be06 Imply RVAL_DECODED when RVAL_IOCTL_PARSED is returned on entering
Also, rename RVAL_IOCTL_PARSED to RVAL_IOCTL_DECODED as the latter
is a more suitable name.

* defs.h (RVAL_IOCTL_PARSED): Rename to RVAL_IOCTL_DECODED.
* ioctl.c (ioctl_decode): Update comment.
(SYS_FUNC(ioctl)): Replace RVAL_IOCTL_PARSED with RVAL_IOCTL_DECODED,
add convertation of RVAL_IOCTL_DECODED to RVAL_DECODED.
* block.c (block_ioctl): Replace RVAL_DECODED | RVAL_IOCTL_PARSED
with RVAL_IOCTL_DECODED on entering.  Replace RVAL_IOCTL_PARSED
with RVAL_IOCTL_DECODED on exiting.
* btrfs.c (btrfs_ioctl): Likewise.
* evdev.c: Likewise.
* file_ioctl.c: Likewise.
* fs_x_ioctl.c: Likewise.
* hdio.c: Likewise.
* loop.c: Likewise.
* mtd.c: Likewise.
* nsfs.c: Likewise.
* print_sg_req_info.c: Likewise.
* ptp.c: Likewise.
* rtc.c: Likewise.
* scsi.c: Likewise.
* sg_io_v3.c: Likewise.
* sg_io_v4.c: Likewise.
* sock.c: Likewise.
* term.c: Likewise.
* ubi.c: Likewise.
* userfaultfd.c: Likewise.
* dm.c (dm_known_ioctl): Return RVAL_IOCTL_DECODED on exiting and 0
on entering.  Replace RVAL_IOCTL_PARSED with RVAL_IOCTL_DECODED
on exiting.
* v4l2.c: Likewise.

Co-authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
2017-08-28 00:39:15 +00:00
Eugene Syromyatnikov
3ca301fff8 Replace return 1 ioctl sub-decoder hack with proper flag
* defs.h (RVAL_IOCTL_PARSED): Introduce new flag for ioctl sub-decoders
* to signalise that they have successfully printed argument.
* ioctl.c (SYS_FUNC(ioctl)): Check for RVAL_IOCTL_PARSED flag, remove
un-set it before returning the value.
* block.c: Use RVAL_IOCTL_PARSED instead of 1.
* btrfs.c: Likewise.
* dm.c: Likewise.
* evdev.c: Likewise.
* file_ioctl.c: Likewise.
* fs_x_ioctl.c: Likewise.
* hdio.c: Likewise.
* loop.c: Likewise.
* mtd.c: Likewise.
* nsfs.c: Likewise.
* print_sg_req_info.c: Likewise.
* ptp.c: Likewise.
* rtc.c: Likewise.
* scsi.c: Likewise.
* sg_io_v3.c: Likewise.
* sg_io_v4.c: Likewise.
* sock.c: Likewise.
* term.c: Likewise.
* ubi.c: Likewise.
* userfaultfd.c: Likewise.
* v4l2.c: Likewise.
2017-08-28 02:33:20 +02:00
Eugene Syromyatnikov
abc0ad0442 Do not return RVAL_DECODED on exiting path of ioctl decoders
* print_sg_req_info.c (decode_sg_req_info): Return 1 instead of
RVAL_DECODED | 1 on exiting path.
* scsi.c (decode_sg_scsi_id): Likewise.
* sg_io_v3.c (decode_response): Likewise.
* sg_io_v4.c (decode_response): Likewise.
2017-08-28 02:33:20 +02:00
Eugene Syromyatnikov
3de6f8fe8a Return 0 instead of 1 on entering path of ioctl decoders
As returning 1 (without RVAL_DECODED) on entering makes no sense.

* block.c (block_ioctl) <case BLKTRACESETUP>: Replace return 1 with
return 0 on entering path.
* ptp.c (ptp_ioctl) <case PTP_SYS_OFFSET>: Likewise.
* sg_io_v3.c (decode_request): Likewise.
* sg_io_v4.c (decode_request): Likewise.
* sock.c (decode)ifconf, sock_ioctl) <case SIOCGIFMAP>: Likewise.
* ubi.c (ubi_ioctl) <case UBI_IOCMKVOL, case UBI_IOCATT>: Likewise.
* v4l2.c (print_v4l2_ext_controls): Likewise.

Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
2017-08-28 02:33:20 +02:00
eb4467d09b sg_io_v4: use PRINT_FIELD_* macros
* sg_io_v4.c: Include "print_fields.h".
(PRINT_FIELD_SG_IO_BUFFER): New macro.
(decode_request, decode_response): Use it, PRINT_FIELD_D, PRINT_FIELD_U,
PRINT_FIELD_X, PRINT_FIELD_FLAGS, and PRINT_FIELD_XVAL.
2017-07-14 03:59:13 +00:00
ced31982a4 sg_io_v4: print din_resid and dout_resid fields as signed integers
* sg_io_v4.c (decode_response): Print din_resid and dout_resid fields
using %d format.
2017-01-10 00:05:17 +00:00
215b7bb38d sg_io: cleanup printing of sg_io buffers
Turn print_sg_io_buffer into a universal sg_io buffer printer.

* sg_io_v3.c (print_sg_io_buffer): Add iovec_count argument.
Call tprint_iov_upto when iovec_count is non-zero.
(decode_request, decode_response): Do not call tprint_iov_upto directly,
use print_sg_io_buffer instead.
* sg_io_v4.c: Likewise.
2017-01-10 00:05:17 +00:00
84ecd63651 sg_io: decode structures on exiting syscall in case of syserror
The SCSI driver, starting with kernel commit v2.6.25-rc1~1230^2~78,
translates its "struct request.errors" to ioctl errors after
filling in all the output members of the SG_IO header structure.

As there is no easy way to tell SCSI layer errors from other syscall
errors, decode the structure on exiting syscall in case of syserror,
too.

* scsi.c (scsi_ioctl): Do not call set_tcb_priv_ulong, use
get_tcb_priv_data instead of get_tcb_priv_ulong, call decode_sg_io
unconditionally.
* sg_io_v3.c (decode_request): Save a copy of struct_sg_io_hdr using
set_tcb_priv_data.
(decode_response): Restore it using get_tcb_priv_data.  Print its i/o
fields when umove call fails.  Pass IOV_DECODE_STR to tprint_iov_upto
unconditionally.
* sg_io_v4.c (decode_request): Save a copy of struct sg_io_v4 using
set_tcb_priv_data.
(decode_response): Restore it using get_tcb_priv_data.  Print its i/o
fields when umove call fails.  Pass IOV_DECODE_STR to tprint_iov_upto
unconditionally.
2017-01-10 00:05:17 +00:00
f18b0ae42c sg_io: reorder printing of fields to follow structure order
* sg_io_v4.c (decode_request): Print timeout, flags, and usr_ptr fields
after dout_xferp field.
2017-01-08 16:55:48 +00:00
1538b9dff3 sg_io: print names of array fields and corresponding length fields
* sg_io_v3.c (decode_request): Print names of cmd_len, cmdp,
and dxferp fields.
(decode_response): Print names of dxferp, sb_len_wr, and sbp fields.
* sg_io_v4.c (decode_request): Print names of request_len, request,
dout_xfer_len, and dout_xferp fields.
(decode_response): Print names of response_len, response,
and din_xferp fields.
2017-01-08 16:00:01 +00:00
90bcf10061 sg_io_v4: print status fields in a hexadecimal form
The tradition is to print scsi status codes in a hexadecimal form.

* sg_io_v4.c (decode_response): Print driver_status, transport_status,
and device_status fields using %#x format specifier instead of %u.
2017-01-08 15:51:59 +00:00
11defb56a4 sg_io_v4: print request_tag and generated_tag fields in hex
The tradition is to print scsi tags in a hexadecimal form.

* sg_io_v4.c (decode_request): Print request_tag field
using ("%#" PRI__x64) format string.
(decode_response): Print generated_tag field using ("%#" PRI__x64)
format string.
2017-01-08 15:51:58 +00:00
653b9a6f95 sg_io_v4: print usr_ptr field in a hexadecimal form
As the nature of this field is pointer-like, print it
in a hexadecimal form.

* sg_io_v4.c (decode_request): Print usr_ptr field
using ("%#" PRI__x64) format string.
2017-01-08 15:36:42 +00:00
fb39d06748 sg_io_v4: do not print spare_in and spare_out fields
As the kernel does not touch these fields, there is no use
to print them.

* sg_io_v4.c (decode_request): Do not print spare_in field.
(decode_response): Do not print spare_out field.
2017-01-08 15:33:30 +00:00
0503b69486 sg_io: decode struct sg_io_hdr.info and struct sg_io_v4.info
Print struct sg_io_hdr.info and struct sg_io_v4.info using printflags.

* xlat/sg_io_info.in: New file.
* defs.h (sg_io_info): New xlat prototype.
* sg_io_v3.c: Include "xlat/sg_io_info.h".
(decode_response): Print struct_sg_io_hdr.info using printflags.
* sg_io_v4.c: (decode_response): Print struct sg_io_v4.info
using printflags.
2017-01-08 03:30:23 +00:00
0f774151a4 sg_io: decode struct sg_io_hdr.flags and struct sg_io_v4.flags
Print struct sg_io_hdr.flags and struct sg_io_v4.flags using printflags.

* xlat/sg_io_flags.in: New file.
* sg_io_v3.c: Include "xlat/sg_io_flags.h".
(decode_request): Print struct_sg_io_hdr.flags using printflags.
* xlat/bsg_flags.in: New file.
* sg_io_v4.c: Include "xlat/bsg_flags.h".
(decode_request): Print struct sg_io_v4.flags using printflags.
2017-01-08 03:30:02 +00:00
768d7cb78f Split scsi.c
Move decoders of SG_IO v3 and v4 APIs into separate files,
compile generic SG_IO decoder unconditionally.

* sg_io_v3.c: New file.
* sg_io_v4.c: Likewise.
* Makefile.am (strace_SOURCES): Add them.
* defs.h (decode_sg_io_v3, decode_sg_io_v4): New prototypes.
* ioctl.c (ioctl_decode): Remove [HAVE_SCSI_SG_H] condition.
* scsi.c: (print_sg_io_res): Remove.
(print_sg_io_req): Rename to decode_sg_io, replace print_sg_io_v3_req
with decode_sg_io_v3, replace print_sg_io_v4_req with decode_sg_io_v4,
compile uncoditionally.
(scsi_ioctl): Replace print_sg_io_req and print_sg_io_res
with decode_sg_io, compile uncoditionally.
Move [HAVE_SCSI_SG_H] code to sg_io_v3.c.
Move [HAVE_LINUX_BSG_H] code to sg_io_v4.c.
2017-01-08 00:01:03 +00:00