A.7. strace 的更改

Red Hat Developer Toolset 11.0 带有 strace 5.13

自以前的 Red Hat Developer Toolset 发行版本以来,添加了或修改了以下功能:

行为更改

  • 修改后的 % 进程 类包含与进程生命周期(计算、执行和终止)关联的系统调用:

    • 新调用: killtkilltgkillpidfd_send_signalrt_sigqueueinfo
    • 删除了调用: arch_prctlunshare

改进

  • 新的 -n (--syscall-number)选项打印系统调用号。
  • 新的 --secontext[=full] 选项会显示 SELinux 上下文。
  • 系统将实施 poke 注入,并添加了两个新选项:-- inject=SET:poke_enter=--inject=SET:poke_exit=
  • 在 IBM POWER 构架中,添加了系统调用向量(SCV)ABI 支持。
  • libdw- 为非原生分配启用基于堆栈的追踪。
  • netlink 数据以更结构化的方式打印。
  • 以下系统调用的解码已实现: close_rangeepoll_pwait2faccessat2landlock_add_rulelandlock_create_rulesetlandlock_restrict_selfmount_setattrprocess_madvise
  • 对以下系统调用的解码已被改进: io_uring_setupmembarrierperf_event_openpidfd_open
  • 实现了 GPIO_*TEE_* ioctl 命令的解码。
  • 以下 ioctl 命令的解码已实现: fs_IOC_FS[gs]etXATTR, fs_IOC_[gs]etFLAGS, fs_IOC32_[gs]etFLAGS, lOOP_CONFIGURE, sIOCADDMULTI,sIOCDMULTI, SIOCGIFENCAP,SIOCOUTQNSD,SIOCSIFENCAP,SIOCSIFHWBROADCAST,UBI_IOCRPEB 和 UBI_IOCSPEBV4L2BUF_TYPE_META_CAPTURE, V4L2_BUF_TYPE_META_OUTPUTVIDIOC_QUERY_EXT_CTRL.
  • 实施了 NT_PRSTATUSNT_FPREGSET regsets,并实现了 Pabrt_GETREGSETPabrt_SETREGSET ptrace 请求。
  • 以下 ptrace 请求的 regs 参数已被实施: PDIB_GETREGSPDIB_GETREGS64、PSYS _SETREGSPDIB_SETREGS64、 PSYS_GETFPREGSP Wright_SETFPREGS
  • 实施了 IPC_INFOMSG_INFO msgctl 系统调用命令的 struct msginfo 参数。
  • 实现了 MSG_STAT 和 MSG_STAT _ ANY msgctl 系统调用命令的 struct msqid_ ds 参数的解码。
  • 实施了 IPC_INFOSEM_INFO semctl 系统调用命令的 struct seminfo 参数的解码。
  • 实施了 IPC_SETIPC_STAT、SEM_STAT 和 SEM_STAT _ANY semctl 系统调用参数的 struct semid_ ds 参数的解码。
  • 已实现 IPC_INFO shmctl 系统调用命令 struct shminfo 参数的解码器。
  • 实现了 SHM_INFO shmctl 系统调用命令 struct shm_info 参数的解码。
  • 实现了 SHM_STAT 和 SHM_STAT _ANY shmctl 系统调用命令的 struct shmid_ ds 参数的解码。
  • IFLA_BRPORT_* netlink 属性的解码已更新,以匹配 Linux 5.12 内核。
  • 以下常量列表已更新: *_magic, aLG_* , audit_*, bpf_*, btr FS_*, cap _*, close _RANGE_*, dev CONF_*, eth_*, fAN _*, fAN_* iflA_*, iNET_DIAG_*, ior ING_*, ipv 6_* , ip_* , k EXEC_*, key CTL_* , key_* , kvm_* , kvm_*, lOOP_*, mdbA_* , memBARRIER_CMD_*, mPOL_*, ms_* , mtD_* , nda_* , nFT_MSG_* nlMSGERR_*, nt_*, pr _*, ptp _PEROUT_*, p eligible_* , res OLVE_*, r TAX_*, rt A_* , rtc_*, rtc_*, rtc_*, rtm_*, rtNH_*, rtPROT_*, sctp_*, se GV_*, so _*, stat X_* , st_* , sys_*, tca_* , tca_* TRAP_*UFFDIO_*UFFD_*、UFFD_* 和 V4L2_*
  • ioctl 命令列表已更新,以匹配 Linux 5.13 内核更新中的这些列表。
  • 随着 RHEA-2022:4635 公告的发布,strace 现在可在实际 SELinux 上下文和从 SELinux 上下文数据库中提取的定义之间显示不匹配。

    使用 不匹配 参数扩展 strace 的现有 --secontext 选项。这个参数可让您只打印预期的上下文以及实际不匹配的上下文。输出用双感叹号(!!)分隔,第一个是实际上下文,然后是预期上下文。在下面的示例中,full,mismatch 参数打印预期的完整上下文以及实际的上下文,因为上下文的用户部分不匹配。但是,在使用单独的 mismatch 时,它只检查上下文的类型部分。预期的上下文不会打印,因为上下文的类型部分匹配。

    [...]
    $ strace --secontext=full,mismatch -e statx stat /home/user/file
    statx(AT_FDCWD, "/home/user/file" [system_u:object_r:user_home_t:s0!!unconfined_u:object_r:user_home_t:s0], ...
    
    $ strace --secontext=mismatch -e statx stat /home/user/file
    statx(AT_FDCWD, "/home/user/file" [user_home_t:s0], ...

    SELinux 上下文不匹配通常会导致与 SELinux 相关的访问控制问题。系统调用 traces 中打印的不匹配可显著加快 SELinux 上下文正确性的检查。系统调用 traces 也可以解释有关访问控制检查的特定内核行为。

程序错误修复

  • 修正了 SIOCGIFINDEXSIOCBRADDIFSIOCBR DIF ioctl 命令的解码。
  • clock_gettime64clock_settime64clock_adjtime64lock_getres_time64 系统调用添加到 %clock trace 类。
  • statx 系统调用添加到 %fstat 跟踪类中。
  • 在以前的版本中,strace 在网络接口名称打印中使用不足的缓冲区大小。这导致在试图显示需要引用的打印接口名称时导致断言,例如: -xx 模式中的名称大于 4 个字符。随着 RHEA-2022:4635 公告的发布,这个程序错误已被解决。