summaryrefslogtreecommitdiff
path: root/kvm.c
Commit message (Collapse)AuthorAgeFilesLines
* Move source files into src subdirectoryDmitry V. Levin2021-02-031-428/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/Makefile.am: New file. * src/.gitignore: Likewise. * scno.am: Move into src subdirectory. * scno.head: Likewise. * strace-graph: Likewise. * strace-log-merge: Likewise. * linux/: Likewise. * types/: Likewise. * xlat/: Likewise. * *.awk: Likewise. * *.c: Likewise. * *.h: Likewise. * *.sh: Likewise. * .gitignore: Update. * Makefile.am: Update. * bootstrap: Update. * configure.ac: Update. * debian/rules: Update. * debian/strace-udeb.install: Update. * debian/strace.examples: Update. * debian/strace.install: Update. * debian/strace64.install: Update. * m4/gen_bpf_attr_m4.sh: Update. * m4/mpers.m4: Update. * tests/Makefile.am: Update. * tests/init.sh: Update. * tests/legacy_syscall_info.test: Update. * tests/strace-log-merge-error.test: Update. * tests/strace-log-merge-suffix.test: Update.
* treewide: move #include "print_fields.h" to defs.hDmitry V. Levin2021-02-011-1/+0
| | | | | | As print_fields.h is going to be used by virtually every parser, include print_fields.h from defs.h, and stop including it in all other files except tests.
* treewide: replace tprints(", name=")Dmitry V. Levin2021-01-291-1/+2
| | | | | | ... with tprint_struct_next() followed by tprints_field_name("name"). This applies to all users of print_fields.h macros except tests.
* treewide: replace tprints("...") with tprint_more_data_follows()Dmitry V. Levin2021-01-291-1/+1
| | | | This applies to all users of print_fields.h macros except tests.
* treewide: replace tprints("}") with tprint_struct_end()Dmitry V. Levin2021-01-291-3/+3
| | | | This applies to all users of print_fields.h macros except tests.
* print_fields.h: remove prefix argument from all remaining PRINT_FIELD_* macrosDmitry V. Levin2021-01-291-3/+6
| | | | | | | | | | * print_fields.h (PRINT_FIELD_UID, PRINT_FIELD_LEN): Remove. (PRINT_FIELD_D, PRINT_FIELD_U, PRINT_FIELD_ID, PRINT_FIELD_TGID): Remove the first argument, all callers updated. * net.c (MAYBE_PRINT_FIELD_LEN): New macro, use it instead of PRINT_FIELD_LEN. * tests/nlattr_smc_diag_msg.c (PRINT_FIELD_SMC_DIAG_CURSOR): Remove the first argument, all callers updated.
* print_fields.h: remove prefix argument from PRINT_FIELD_X macroDmitry V. Levin2021-01-291-8/+16
| | | | | * print_fields.h (PRINT_FIELD_X): Remove the first argument, all callers updated.
* print_fields.h: remove prefix argument from PRINT_FIELD_FLAGS macroDmitry V. Levin2021-01-291-4/+4
| | | | | * print_fields.h (PRINT_FIELD_FLAGS): Remove the first argument, all callers updated.
* Add xlat description structureEugene Syromyatnikov2019-07-241-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rename struct xlat to struct xlat_data and make struct xlat an xlat descriptor that contains various information about xlat. So far it's the type and the number of items. As a result, xlookup/printxval now have enough information for handling xlat depending on its type, so *index/*_search API is not needed any longer. * xlat.h (struct xlat_data): Rename from struct xlat. (struct xlat): New type definition. * xlat.c (xlat_search, printxval_sized, printxval_searchn_ex, xlat_idx, printxval_indexn_ex, printxval_dispatch_ex): Remove. (xlookup): Handle xlat_data based on xlat type. (xlat_search_eq_or_less, xlookup_le): New functions. (sprintflags_ex, printflags_ex): Update. * xlat/gen.sh (gen_header): Add handling for #sorted, generate new struct xlat descriptor. * defs.h (arp_hardware_types_size, ethernet_protocols_size, inet_protocols_size, evdev_abs_size, xlat_search, xlat_idx, printxval_searchn_ex, printxval_searchn, printxval_search, printxval_search_ex, printxval_indexn_ex, printxval_indexn, printxval_index, printxval_index_ex, printxval_dispatch_ex, printxval_dispatch): Remove. (enum xlat_style_private_flag_bits): Remove PAF_INDEX_XLAT_SORTED_BIT and PAF_INDEX_XLAT_VALUE_INDEXED_BIT. (enum xlat_style_private_flag): Remove PAF_INDEX_XLAT_SORTED and PAF_INDEX_XLAT_VALUE_INDEXED. (print_array_ex): Remove index_xlat_size argument. (xlookup_le): New declaration. (printxval_ex): New macro. * dyxlat.c (struct dyxlat): Remove used field (use xlat.size instead), embed struct xlat, add pointer to struct xlat_data. (MARK_END): Remove. (dyxlat_alloc, dyxlat_free, dyxlat_get, dyxlat_add_pair): Update in accordance with the structure changes. * evdev.c (evdev_abs_size): Remove. (keycode_ioctl): Use printxval instead of printxval_index. (decode_bitset): Remove. (decode_bitset_): Rename to decode_bitset, remove decode_nr_size and xt arguments, call printxval instead of printxval_dispatch. (bit_ioctl, evdev_read_ioctl): Do not pass xlat type to decode_bitset. * fsconfig.c (SYS_FUNC(fsconfig)): Use printxval instead of printxval_index. * print_fields.h (PRINT_FIELD_XVAL_SORTED_SIZED, PRINT_FIELD_XVAL_INDEX): Remove. * nlattr.h (struct decode_nla_xlat_opts): Remove xlat_size and xt fields. * nlattr.c (decode_nla_meminfo): Do not pass PAF_INDEX_XLAT_VALUE_INDEXED flag and netlink_sk_meminfo_indices size in a print_array_ex call. (decode_nla_xval): Call printxval_ex instead of printxval_dispatch_ex. (decode_nla_ether_proto, decode_nla_ip_proto): Do not pass xlat_size and xt fields in opts. (decode_nla_flags): Remove XT_INDEXED unsupported warning. * process.c (struct_user_offsets_data): Rename from struct_user_offsets, change type to struct xlat_data[]. (struct_user_offsets): New xlat description. (print_user_offset_addr): Rewrite using xlookup_le. * util.c (print_array_ex): Remove index_xlat_size argument, simply call printxval_ex for index printing. * aio.c (tprint_lio_opcode): Use printxval_ex instead of printxval_indexn_ex. * bpf.c: Use printxval instead of printxval_index; use PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_INDEX. * bpf_filter.c (print_bpf_filter_code): Use printxval instead of printxval_index. * ioctl.c (evdev_decode_number): Use printxval instead of printxval_indexn. * kvm.c (kvm_ioctl_decode_check_extension): Use printxval64 instead of printxval_index. (kvm_ioctl_run_attach_auxstr): Use xlookup instead of xlat_idx. * net.c: Use printxval instead of printxval_search/printxval_index, use printxval_ex instead of printxval_searchn_ex. * netlink.c (get_fd_nl_family): Rewrite using xlat descriptor structure. * netlink_packet_diag.c (decode_packet_diag_msg): Use PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_SORTED_SIZED. * netlink_smc_diag.c (decode_smc_diag_shutdown): Remove ARRSZ_PAIR wrapper. (decode_smc_diag_fallback): Use printxval_ex instead of printxval_search_ex. (decode_smc_diag_msg): Use PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_INDEX. * print_statfs.c (print_statfs_type): Use printxval instead of printxval_search. * ptrace_syscall_info.c (print_ptrace_syscall_info): Use PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_INDEX. * rtnl_link.c (decode_ifla_inet6_flags, decode_ifla_inet6_agm): Likewise. (decode_nla_tun_type, decode_ifla_xdp_attached): Remove xlat_size, xt fields. (decode_ifla_inet_conf, decode_ifla_inet6_conf, decode_ifla_inet6_stats, decode_ifla_inet6_icmp6_stats): Remove PAF_INDEX_XLAT_VALUE_INDEXED flag and ARRSZ_PAIR wrapper in print_array_ex calls. (decode_ifinfomsg): Use PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_SORTED_SIZED. * rtnl_route.c (decode_nla_rt_proto): Use printxval instead of printxval_search. * sock.c (print_ifreq): Use PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_SORTED_SIZED. * sockaddr.c (print_sockaddr_data_ll, print_sockaddr_data_bt, print_sockaddr): Use printxval instead of printxval_search and printxval_index. * time.c (getitimer, osf_getitimer, setitimer, osf_setitimer, printclockname): Use printxval instead of printxval_index. (do_adjtimex): Use xlookup instead of xlat_idx. * tests/btrfs.c: Update xlat handling, use struct xlat_data instead of struct xlat for XLAT() arrays. * tests/ioctl_block.c: Likewise. * tests/ioctl_rtc.c: Likewise. * tests/printflags.c: Likewise. * tests/printxval.c: Likewise. * tests/prlimit64.c: Likewise. * tests/setrlimit.c: Likewise. * tests/socketcall.c: Likewise. * tests/xgetrlimit.c: Likewise. * tests/xstatfsx.c: Likewise. * xlat/af_packet_versions.in: Add #value_indexed. * xlat/arp_hardware_types.in: Add #sorted. * xlat/ax25_protocols.in: Likewise. * xlat/bluetooth_l2_cid.in: Likewise. * xlat/bluetooth_l2_psm.in: Likewise. * xlat/ethernet_protocols.in: Likewise. * xlat/evdev_ff_types.in: Likewise. * xlat/fsmagic.in: Likewise. * xlat/hw_breakpoint_type.in: Likewise. * xlat/iffflags.in: Likewise. * xlat/inet6_if_flags.in: Likewise. * xlat/inet_protocols.in: Likewise. * xlat/msgctl_flags.in: Likewise. * xlat/perf_hw_cache_id.in: Likewise. * xlat/perf_hw_cache_op_id.in: Likewise. * xlat/perf_hw_cache_op_result_id.in: Likewise. * xlat/perf_hw_id.in: Likewise. * xlat/perf_sw_ids.in: Likewise. * xlat/perf_type_id.in: Likewise. * xlat/routing_protocols.in: Likewise. * xlat/semctl_flags.in: Likewise. * xlat/shmctl_flags.in: Likewise. * xlat/smc_decl_codes.in: Likewise. * xlat/sock_ax25_options.in: Likewise. * xlat/sock_bluetooth_options.in: Likewise. * xlat/sock_dccp_options.in: Likewise. * xlat/sock_tipc_options.in: Likewise. * xlat/socketlayers.in: Likewise. * xlat/v4l2_control_classes.in: Likewise. * xlat/v4l2_pix_fmts.in: Likewise. * xlat/v4l2_sdr_fmts.in: Likewise. Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
* kvm: avoid bogus vcpu_info assignment in vcpu_registerEugene Syromyatnikov2019-07-081-4/+3
| | | | | | | | | Also reformat code a bit to make nesting a bit clearer. Reported by Clang. * kvm.c (vcpu_register): Do not assign vcpu_alloc result to vcpu_info as this value is not used afterwards in the function.
* Use xzalloc(sz) instead of xcalloc(1, sz)Eugene Syromyatnikov2019-05-221-1/+1
| | | | | | | | * bpf.c (BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)): Use xzalloc instead of xcalloc of one-item-sized array. * kvm.c (vcpu_alloc): Likewise. * perf.c (fetch_perf_event_attr): Likewise. * syscall.c (ptrace_get_scno): Likewise.
* Update copyright headersDmitry V. Levin2019-03-181-1/+1
| | | | | Headers updated automatically using maint/update_copyright_years.sh script.
* Fix whitespace issuesDmitry V. Levin2019-02-101-1/+1
| | | | | | | | * Makefile.am (strace_SOURCES, EXTRA_DIST): Replace SPACE symbol followed by TAB symbol with TAB symbol. * kvm.c (is_map_for_file): Likewise. * tests/gen_tests.in (ioctl_ptp, printsignal-Xverbose): Likewise. * xlat/skf_ad.in: Likewise.
* Fix preprocessor indentationDmitry V. Levin2018-12-301-1/+1
| | | | | | | | | Indent the C preprocessor directives to reflect their nesting using the following script: $ cppi -l $(git grep -El '^[[:space:]]*#[[:space:]]*(if|ifdef|ifndef|elif|else|endif|define|pragma)[[:space:]]' |grep -v '\.sh$') |while read f; do cppi < "$f" > "$f".cppi; mv "$f".cppi "$f" done
* Change the license of strace to LGPL-2.1-or-laterDmitry V. Levin2018-12-101-21/+1
| | | | | | | | strace is now provided under the terms of the GNU Lesser General Public License version 2.1 or later, see COPYING for more details. strace test suite is now provided under the terms of the GNU General Public License version 2 or later, see tests/COPYING for more details.
* kvm: decode the argument of KVM_CHECK_EXTENSIONPierre Marsais2018-08-191-0/+13
| | | | | | | | | | | | | | | | | xlat/kvm_cap.in has been generated using the following command line: grep '#define\s\+KVM_CAP' $linux/include/uapi/linux/kvm.h | sed -E -e 's/^#define\s+([^ \t]+)\s*([0-9]+).*$/printf "%-40s%s\n" \1 \2/e' \ -e 's/ {8}/\t/g; s/ +/\t/g' * xlat/kvm_cap.in: New file. * kvm.c: Include "xlat/kvm_cap.h". (kvm_ioctl_decode_check_extension): New function. (kvm_ioctl): Use it. * tests/ioctl_kvm_run_common.c (main): Check decoding of KVM_CHECK_EXTENSION command. Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr>
* Update copyright headersDmitry V. Levin2018-08-121-0/+1
| | | | | Headers updated automatically using maint/update_copyright_years.sh script.
* kvm: attach the exit reason of vcpu as auxstr to KVM_RUN outputMasatake YAMATO2018-07-071-1/+220
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In KVM, a virtual machine implementation like Qemu can access a vcpu via ioctl. KVM_RUN is an ioctl command to enter vcpu. The command returns control for various reasons: needs of device emulation or consuming time slices are the typical ones. The vmi takes a different action for the reason. We, strace users, want to know the reason to understand kvm. This change prints the reason as auxstr if "-e kvm=vcpu" option is given, and if strace runs on Linux 4.16.0 or higher, which includes commit e46b469278a59781f9b25ff608af84892963821b, "kvm: embed vcpu id to dentry of vcpu anon inode." The way to get the reason is a bit complicated because the ioctl does not return it to the userspace directly. Instead, the vmi and kvm communicate via an area of the process virtual memory where the fd of vcpu is mmap'ed. strace must peek the area to know the reason. The change does three things: (1) recording the area for the given vcpu when the target calls VCPU_CREATE to vcpu_info_list per tcb data field, (2) verifying the data recorded in vcpu_info_list before doing (3), and (3) decoding the exit reason field of the area. The change is complicated because there is a case that strace does not have a chance to do (1) if -p option is used. In this case, vcpu_info data created in the step (2). The area has more fields than "exit reason", dumping them may be implemented in the future. * defs.h (struct tcb) [HAVE_LINUX_KVM_H]: Add vcpu_info_list field. [HAVE_LINUX_KVM_H]: (kvm_run_structure_decoder_init, kvm_vcpu_info_free): New declarations. * strace.c (usage): Add "kvm" as a new expression for -e option. (droptcb): Call kvm_vcpu_info_free. * filter_qualify.c (qualify_kvm): New function calling kvm_run_structure_decoder_init to enable for attaching the exit reason to auxstr. (qual_options): Add "kvm" as an entry. * xlat/kvm_exit_reason.in: New file. * kvm.c: Include xmalloc.h and mmap_cache.h. (dump_kvm_run_structure): New static variable. (kvm_run_structure_decoder_init): New function. (vcpu_info): New struct definition representing the 3-tuple: vcpu file descriptor, id of the vcpu, and mmap'ed entry. (vcpu_find, vcpu_alloc, vcpu_register, vcpu_getinfo, kvm_vcpu_info_free): New functions to access tcb's vcpu_info_list field and vcpu_info data type. (is_map_for_file, map_len): New helper functions. (kvm_ioclt_run_attach_auxstr, kvm_ioctl_decode_run): New functions decoding vcpu exit reason and attaching the decoded data to auxstr field of tcb. (kvm_ioctl_create_vcpu): Call vcpu_register to make an entry mapping a file descriptor and the vcpu id associated with the fd. (kvm_ioctl): Call kvm_ioctl_decode_run. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
* kvm: decode the argument of KVM_SET_CPUID2 and KVM_GET_*_CPUID ioctl commandsPierre Marsais2018-07-071-0/+66
| | | | | | | | | | | | | * configure.ac (AC_CHECK_TYPES): Add struct kvm_cpuid2. * xlat/kvm_cpuid_flags.in: New file. * kvm.c [HAVE_STRUCT_KVM_CPUID2]: Include "xlat/kvm_cpuid_flags.h". [HAVE_STRUCT_KVM_CPUID2] (print_kvm_cpuid_entry, kvm_ioctl_decode_cpuid2): New functions. (kvm_ioctl) [HAVE_STRUCT_KVM_CPUID2]: Use kvm_ioctl_decode_cpuid2. * NEWS: Mention this improvement. Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr> Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
* kvm: decode the argument of KVM_{SET, GET}_SREGS ioctl commandMasatake YAMATO2017-12-041-0/+24
| | | | | | | | | | | | | * configure.ac (AC_CHECK_TYPES): Add struct kvm_sregs. * kvm.c [HAVE_STRUCT_KVM_SREGS] (kvm_ioctl_decode_sregs): New function. (kvm_ioctl) [HAVE_STRUCT_KVM_SREGS] <KVM_SET_SREGS, KVM_GET_SREGS>: Use it. * linux/arch_kvm.c (arch_print_kvm_sregs): New function. * linux/x86_64/arch_kvm.c (PRINT_FIELD_KVM_SREGS_STRUCT): New macro. (kvm_ioctl_decode_regs_dtable, kvm_ioctl_decode_regs_segment, arch_print_kvm_sregs): New functions. Signed-off-by: Masatake YAMATO <yamato@redhat.com>
* kvm: decode the argument of KVM_{SET, GET}_REGS ioctl commandMasatake YAMATO2017-12-041-0/+25
| | | | | | | | | | | | | | * configure.ac (AC_CHECK_TYPES): Add struct kvm_regs. * linux/arck_kvm.c: New file. * linux/x86_64/arch_kvm.c: Likewise. * linux/i386/arch_kvm.c: Likewise. * linux/x32/arch_kvm.c: Likewise. * Makefile.am (EXTRA_DIST): Add them. * kvm.c: Include "arch_kvm.c". [HAVE_STRUCT_KVM_REGS] (kvm_ioctl_decode_regs): New function. (kvm_ioctl) [HAVE_STRUCT_KVM_REGS] <KVM_SET_REGS, KVM_GET_REGS>: Use it. Signed-off-by: Masatake YAMATO <yamato@redhat.com>
* kvm: decode the argument of KVM_SET_USER_MEMORY_REGION ioctl commandMasatake YAMATO2017-12-041-0/+30
| | | | | | | | | | | | * configure.ac (AC_CHECK_TYPES): Add struct kvm_userspace_memory_region. * xlat/kvm_mem_flags.in: New file. * kvm.c: Include print_fields.h. [HAVE_STRUCT_KVM_USERSPACE_MEMORY_REGION]: Include xlat/kvm_mem_flags.h, (kvm_ioctl_set_user_memory_region): New function. (kvm_ioctl) [HAVE_STRUCT_KVM_USERSPACE_MEMORY_REGION] <KVM_SET_USER_MEMORY_REGION>: Use it. Signed-off-by: Masatake YAMATO <yamato@redhat.com>
* kvm: decode the argument of KVM_CREATE_VCPU ioctl commandMasatake YAMATO2017-12-011-0/+11
| | | | | | | * kvm.c (kvm_ioctl_create_vcpu): New function. (kvm_ioctl) <KVM_CREATE_VCPU>: Use it. Signed-off-by: Masatake YAMATO <yamato@redhat.com>
* kvm: handle KVM_CREATE_VM ioctl commandMasatake YAMATO2017-12-011-0/+2
| | | | | | * kvm.c (kvm_ioctl): Handle KVM_CREATE_VM command. Signed-off-by: Masatake YAMATO <yamato@redhat.com>
* kvm: handle KVM_RUN, KVM_GET_VCPU_MMAP_SIZE, and KVM_GET_API_VERSION ioctl ↵Masatake YAMATO2017-12-011-0/+3
| | | | | | | | | commands * kvm.c (kvm_ioctl): Handle KVM_RUN, KVM_GET_VCPU_MMAP_SIZE, and KVM_GET_API_VERSION commands. Signed-off-by: Masatake YAMATO <yamato@redhat.com>
* ioctl: add a stub for decoding kvm related ioctlsMasatake YAMATO2017-12-011-0/+45
* kvm.c: New file. * Makefile.am (strace_SOURCES): Add it. * configure.ac (AC_CHECK_HEADERS): Add linux/kvm.h. * defs.h (kvm_ioctl): New prototype. * ioctl.c (ioctl_decode) HAVE_LINUX_KVM_H]: Use kvm_ioctl. Signed-off-by: Masatake YAMATO <yamato@redhat.com>