A.7. strace 的更改
Red Hat Developer Toolset 11.0 带有 strace 5.13。
自以前的 Red Hat Developer Toolset 发行版本以来,添加了或修改了以下功能:
行为更改
修改后的
% 进程
类包含与进程生命周期(计算、执行和终止)关联的系统调用:-
新调用:
kill
、tkill
、tgkill
、pidfd_send_signal
、rt_sigqueueinfo
-
删除了调用:
arch_prctl
和unshare
-
新调用:
改进
-
新的
-n
(--syscall-number
)选项打印系统调用号。 -
新的
--secontext[=full]
选项会显示 SELinux 上下文。 -
系统将实施 poke 注入,并添加了两个新选项:--
inject=SET:poke_enter=
和--inject=SET:poke_exit=
。 - 在 IBM POWER 构架中,添加了系统调用向量(SCV)ABI 支持。
-
libdw
- 为非原生分配启用基于堆栈的追踪。 - netlink 数据以更结构化的方式打印。
-
以下系统调用的解码已实现:
close_range
、epoll_pwait2
、faccessat2
、landlock_add_rule
、landlock_create_ruleset
、landlock_restrict_self
、mount_setattr
和process_madvise
。 -
对以下系统调用的解码已被改进:
io_uring_setup
、membarrier
、perf_event_open
、pidfd_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_IOCSPEB
、V4L2BUF_TYPE_META_CAPTURE
,V4L2_BUF_TYPE_META_OUTPUT
和VIDIOC_QUERY_EXT_CTRL
. -
实施了
NT_PRSTATUS
和NT_FPREGSET
regsets,并实现了Pabrt_GETREGSET
和Pabrt_SETREGSET
ptrace
请求。 -
以下
ptrace
请求的regs
参数已被实施:PDIB_GETREGS
、PDIB_GETREGS64、
、PSYS
_SETREGSPDIB_SETREGS64、
PSYS_GETFPREGS
和P Wright_SETFPREGS
。 -
实施了
IPC_INFO
和MSG_INFO
msgctl
系统调用命令的struct msginfo
参数。 -
实现了 MSG_STAT 和
MSG_STAT
_ANY
参数的解码。msgctl
系统调用命令的struct msqid_
ds -
实施了
IPC_INFO
和SEM_INFO
semctl
系统调用命令的struct seminfo
参数的解码。 -
实施了
IPC_SET
、IPC_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
_ANYshmctl
系统调用命令的struct shmid_
ds -
IFLA_BRPORT_*
netlink 属性的解码已更新,以匹配 Linux 5.12 内核。 -
以下常量列表已更新:
*_magic
, aLG_* , audit_*
,bpf_*
, btrFS_*
, cap_*
, close_RANGE_*, dev
, fANCONF_*
, eth_*_*
,fAN_*
iflA_*
,iNET_DIAG_*,
iorING_*
, ipv6_* , ip_*
,
kEXEC_*
, keyCTL_* , key_*
, kvm_*
, kvm_*
,lOOP_*
,mdbA_*
, memBARRIER_CMD_*
,mPOL_*
,ms_*
, mtD_*
, nda_*
, nFT_MSG_*
nlMSGERR_*
,nt_*
, pr_*
, ptp_PEROUT_*, p eligible_*
, res
,OLVE_*
, rTAX_*
, rtA_* , rtc_*
, rtc_*rtc_*
,rtm_*
,rtNH_*
,rtPROT_*
,sctp_*
, seGV_*
, so_*
, statX_* , 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 也可以解释有关访问控制检查的特定内核行为。
程序错误修复
-
修正了
SIOCGIFINDEX
、SIOCBRADDIF
和SIOCBR
DIFioctl
命令的解码。 -
clock_gettime64
、clock_settime64
、clock_adjtime64
和lock_getres_time64
系统调用添加到%clock
trace 类。 -
statx
系统调用添加到%fstat
跟踪类中。 -
在以前的版本中,strace 在网络接口名称打印中使用不足的缓冲区大小。这导致在试图显示需要引用的打印接口名称时导致断言,例如:
-xx
模式中的名称大于 4 个字符。随着 RHEA-2022:4635 公告的发布,这个程序错误已被解决。