Linux和Glibc API更改

2021-05-06 03:07:09

由于Linux编程接口在2010年8月开始按下,它是与当前版本的Linux内核(2.6.35),GLIBC(2.12)和POSIX.1 /单个UNIX标准的当前版本最新(POSIX.1 -2008 / susv4)。

由于Linux内核和Glibc的开发人员致力于维护ABI兼容性,因此TLPI中提供的所有详细信息都应在未来保持准确。但是,(几个)将新功能添加到内核和GLIBC中,每个版本都是如此。由于每个新版本的Linux内核和Glibc发生,此页面将尝试注意与本书主题区域相关的新接口功能。此外,此页面还提供了有关POSIX / SUS标准的后续更新的信息的链接。

另请参阅:LWN文章在内核5.12合并窗口(1,2)和内核Newbies内核5.12摘要。

另请参阅:内核上的LWN文章5.11合并窗口(1,2)和内核Newbies内核5.11摘要。

另请参阅:内核5.10的LWN文章合并窗口(1,2)和内核Newbies内核5.10摘要。

SETNS(2)系统调用现在支持移动到时间命名空间。进一步的详细信息可以在SETNS(2)手册页中找到。

添加了新功能:CAP_CHECKPOINT_RESTORE。可以在功能(7)手动页面和jonathan corbet和#39; s lwn.net文章中找到了进一步的详细信息,这是一种新功能(在拟议名称是Cap_restore的时间)。

SECCOMP用户空间通知工具添加了一个新的IOCTL(2)操作seccomp_ioctl_notif_addfd,它允许管理员进程分配文件描述符,然后在目标过程中安装该文件描述符。这允许管理员在分配文件描述符的目标中展示系统调用。进一步的详细信息可以在Seccomp_unotify(2)手册页中,并在基督教兄弟' s博客文章中,SECCOMP通知程序 - 在非特权集装箱开发中的新前沿

另请参阅:内核5.9的LWN文章合并窗口(1,(2)和内核newbies内核5.9摘要。

SETNS(2)系统调用现在可以将PID文件描述符作为其文件描述符参数,以允许调用者将其移入相同的命名空间,因为文件描述符所引用的进程。进一步的详细信息可以在SETNS(2)手册页中找到。

已添加两个新功能:CAP_BPF和CAP_PERFMON。进一步的详细信息可以在功能(7)手册页和jonathan corbet' s lwn.net文章中找到,这是一种新功能。

一个新的Faccessat2()系统调用允许正确实现GNU C库中的Faccessat()。进一步的详细信息可以在Faccessat(2)手册页中找到。

另请参阅:在内核5.8的LWN文章合并窗口(1,2)和内核Newbies内核5.8摘要。

MREMAP()系统调用添加了Map_dontunmap标志,它与MREMAP_DONTUNMAP标志一起使用,可用于将映射重新映射到新地址,同时未删除原始映射。详细信息可以在MREMAP(2)手册页中找到

克隆3()系统调用现在提供克隆_into_cgroup标志,它允许父进程直接将新子进程放入指定的版本2 CGroup。详细信息可以在Clone3(2)手册页中找到。

另请参阅:内核中的LWN文章5.7合并窗口(1,2)和内核Newbies内核5.7摘要。

内核添加了一个新的命名空间:时间名称空间。详细信息可以在time_namespaces(7)手册页面和jonathan corbet' s lwn.net文章时间名称空间中。

已添加新的Openat2()系统调用。此系统调用扩展了现有Openat()系统调用的功能(它本身是传统开放()系统调用的扩展)。具有OpenAt2()提供的显着的新功能是限制不受信任的路径如何解决的能力。详细信息可以在Openat2()手册页中,并在Jonathan Corbet' s lwn.net文章使用Openat2()限制路径名称。

可以使用新的PIDFD_GETFD()系统调用来获取由另一个进程所持操作的文件描述符的副本。详细信息可以在PIDFD_GETFD(2)手册页中,并在Jonathan Corbet' s lwn.net Struity抓取文件描述符与pidfd_getfd()。

prctl()系统调用添加新pr_get_io_flusher和pr_set_io_flusher命令以获取并设置调用进程的IO_Flusher状态。详细信息可以在PRCTL(2)手册页中找到。

另请参阅:LWN在内核5.6合并窗口(1,2)和内核新手内核5.6摘要。

可以在调用Clone3()时使用Clone_Clear_SighAnd标志,以便创建子进程,其中在父中处理的所有信号被重置为其默认处置。详细信息可以在Clone3(2)手册页中找到。

使用Clone3()创建新子进程时,特权调用者现在可以选择将哪个PID分配给它所存在的每个PID名称空间中的新进程。详细信息可以在Clone3(2)手册页中找到。

另请参阅:内核上的LWN文章5.5合并窗口(1,2)和内核Newbies内核5.5摘要。

WAITID(2)系统调用现在可以用于等待PID文件描述符引用的子项。详细信息可在WAITID(2)手册页中找到。

WAITID(2)系统调用添加了WEADPID中存在的功能(2):在与父级相同的进程组中等待孩子的功能,而无需首先发现父进程进程组ID。详细信息可在WAITID(2)手册页中找到。

PRCTL(2)系统调用添加新的ARM64特定操作PR_SET_TAGGED_ADDR_CTRL和PR_GET_TAGGED_ADDR_CTRL,以设置和获取标记地址模式。详细信息可以在PRCTL(2)手册页中找到。

内核锁定功能已合并。进一步的信息可以在Jon Corbet' SLWN.NET文章中找到和kernel_lockdown(7)手册页。

另请参阅:LWN在内核5.4的文章合并窗口(1,2)和内核Newbies内核5.4摘要。

新的PIDFD_Open(2)系统调用可用于获取PID文件描述符,从而引用其PID被指定为调用的参数的过程。该文件描述符可用于使用Linux 5.2中添加的PIDFD_SEND_SIGNAL(2)系统调用向该进程发送信号,并使用Linux 5.4开始)使用WATED(2)等待进程。进一步的详细信息可以在PIDFD_Open(2))手册页中找到。另见下一个点。

现在可以使用轮询(2),选择(2)和ePOLS(2)监视克隆(2)克隆_PIDFD和PIDFD_OPEN(2))返回的PID文件描述符。当文件描述符终止的过程时,文件描述符被标记为可读。进一步的详细信息可以在PIDFD_Open(2))手册页中找到。

添加新的克隆3(2)系统调用,提供较旧的克隆(2)系统调用的多个API改进。新的系统调用提供了额外的标志位(因此允许将来的扩展);在使用各种论据时清洁分离;以及指定子女堆积的大小的能力。详细信息可以在Clone3(2)手册页中找到。

新的Ptrace(2)选项Ptrace_Get_Syscall_info可用于检索有关导致PTrace Stop的系统调用的信息。详细信息可以在Ptrace(2)手册页中找到。

另请参阅:内核5.3的LWN文章合并窗口(1,2)和内核Newbies内核5.3摘要。

呼叫克隆(2)时可以指定新的克隆_pidfd标志,呼叫返回a" pid文件描述符"这是指新的子进程。该文件描述符可用于将信号发送到进程(使用PIDFD_SEND_SIGNAL(2))和(在Linux 5.4中开始)使用WATED(2)等待进程。可以在克隆(2)手册页面和Jonathan Corbet' S LWN.NET文章中找到进一步的详细信息,重新思考无思维过程信令。

另请参阅:LWN在内核5.2中的文章合并窗口(1,2)和内核Newbies内核5.2摘要。

现在可以打开进程' s目录以获取引用该过程的文件描述符。然后,该文件描述符可以传递给PIDFD_SEND_SIGNAL(2)系统呼叫,以便向进程发送信号。为此目的使用文件描述符允许避免传统API(例如kill(2))可以发生的竞争条件,其中如果原始目标进程已经终止并且其PID,则信号可以发送到错误的过程已被回收。详细信息可以在PIDFD_SEND_SIGNAL(2)手册页面和MARTARYBCZYńSKA' S LWN.NET文章中找到,朝着自由竞赛过程信令。

如Execve(2)手册页所指出的,可以遵循#!的解释器字符串大小的限制!指定为Execve(2)的解释文件开始时的字符串已从127增加到255个字符。

一个新的f_seal_future_write允许调用进程继续使用现有的可写映射写入MEMFD文件,但是阻止创建新的可写映射并写入MEMFD文件。详细信息可以在FCNTL(2)和MEMFD_CREATE(2)手册页中找到。

另请参阅:内核中的LWN文章5.1合并窗口(1,2)和内核Newbies内核5.1摘要。

CGROUP_NO_V1 =命名的内核引导选项可用于禁用创建名为Shierarchies的V1。详细信息可以在CGroups(7)手册页中找到。

SECCOMP机制现在提供了一个用户空间通知功能。使用此功能,SECCOMP过滤器可以将系统调用的处理延迟到另一个用户空间过程。为此,筛选物种SECCOMP_RET_UR_USER_NOT的返回值进一步的详细信息可以在JON CORBET' SLWN.NET文章推迟到用户空间中的决策,在内核文档文件文档/ userspace-api / seccomp_filter.rst中,和seccomp_unotify(2)手册页:

新的粉丝扇_open_exec和fan_open_exec_perm标志可用于在打开文件以进行执行时获取事件。详细信息可以在FANOTIFY_MARK(2)中找到并粉丝(7)手动页面。

另请参阅:LWN在内核5.0合并窗口(1,2)和内核新手内核5.0摘要。

一个新的粉丝_filesystem粉丝vallify标志允许标记整个文件系统以进行监控。详细信息可以在FANOTIFY_MARK(2)中找到并粉丝(7)手动页面。

可以使用新的粉丝粉丝粉丝标志来请求,而不是报告触发过程的进程ID,则报告触发线程的线程ID。详细信息可以在FANOTIFY_INIT(2)中找到并粉丝(7)手动页面。

另请参阅:LWN在内核的文章4.20合并窗口(1,2)和内核Newbies内核4.20摘要。

创建Inotify Watch时,可以使用新的IN_MASK_CREATE标志,以防止在inode上切断现有的监视掩码。进一步的详细信息可以在Inotify(7)手册页中找到。

另请参阅:LWN internel 4.19合并窗口(1,2)和内核新手内核4.19摘要。

添加了新的轮询界面和相关系统调用,IO_PgetEvents(2)。有些信息可以在Jonathan Corbet' le lwn.net文章中找到了一个新的内核轮询界面。

添加了一个新的rseq(2)系统调用。该系统调用允许实现重新安装的序列,技术允许在每次CPU数据上实现更新操作,而无需使用锁定基元。一些信息可以在Jonathan Corbet' s lwn.net文章中找到重新启动的序列。

另请参阅:内核4.18的LWN文章合并窗口(1,2)和内核新手内核4.18摘要。

MMAP()系统调用添加了对Map_fixed执行类似任务的Map_fixed_noreplace标志,但是' t clobber一个预先存在的映射。详细信息可以在MMAP(2)手册页面和Jonathan Corbet' s lwn.net文章,map_fixed_safe中找到,它讨论了添加此功能的早期版本的修补程序(然后用不同的提议名称)。

MSGCTL()系统调用添加了MSG_STAT_ANY命令,该命令执行与MSG_STAT相同的任务,但不需要在消息队列上进行读取权限,以便任何用户可以采用该操作(就像任何用户都可以读取以获取相同信息一样。为semctl(sem_stat_any)和shmctl(shm_stat_any)添加了类似的操作。文档可以在msgctl(2),semctl(2)和shmctl(2)手册页中找到。

prctl()系统调用添加新pr_get_speculation_ctrl和pr_set_speculation_ctrl命令以获取并设置猜测误操作的状态。详细信息可以在PRCTL(2)手册页中找到。

另请参阅:内核上的LWN文章4.17合并窗口(1,2)和内核Newbies内核4.17摘要。

PowerPC架构现在支持首次出现在Linux 4.9中的内存保护键功能(仅在英特尔X86架构上提供支持)。

PWRITEv2(2)系统调用现在支持RWF_APPEND标志,该标志允许以每呼叫以按顺序附加到文件的数据。有关详细信息,请参阅PWRITEV2(2)手动页面。

Membarrier()系统调用为以下新命令添加了支持:Membarrier_cmd_global_expited,membarrier_cmd_register_global_expited,membarrier_cmd_private_expedited_sync_core,和membarrier_cmd_register_private_expedited_sync_core。详细信息可以在Membarrier(2)手册页中找到。

sched_settr()系统调用添加了一个新标志,sched_flag_dl_overrun,允许应用程序在sched_deadline线程中通知运行时溢出。文档可以在Sched_setattr(2)手册页中找到。

另请参阅:内核上的LWN文章4.16合并窗口(1,2)和内核Newbies内核4.16摘要。

可以写入到文件的行数和文件的限制从5到340增加。详细信息可以在User_Namespace(7)手册页中找到。

该文件导出在CGroups v2层次结构中在执行委派时必须携带的文件列表。详细信息可以在CGroups(7)手册页中找到。

该文件导出CGroups v2支持的功能列表。详细信息可以在CGroups(7)手册页中找到。

MMAP()系统调用支持两个新标志,map_shared_validate和map_sync。详细信息可以在MMAP(2)手册页中找到。

PRCTL(2)系统调用添加了新的ARM64特定操作PR_SVE_SET_VL和PR_SVE_GET_VL,用于设置和获得SVE向量长度。详细信息可以在PRCTL(2)手册页中和内核源文件中找到。

另请参阅:内核4.15的LWN文章合并窗口(1,2)和内核Newbies内核4.15摘要。

新的MEMD_CREATE()MFD_HUGETLB标志允许在RAM-BASE HUGETLBFS文件系统中创建匿名文件。有关详细信息,请参阅MEMFD_CREATE(2)手动页面。

新的疯狂()madv_wipeonfork和madv_keeponfork允许一个过程来设置或清除"擦拭fork"在指定的私有匿名地址范围内的页面属性。如果设置此属性,则在Fork()创建的子进程中清除此范围内的页面。有关详细信息,请参阅MADVISE(2)手动页面。

SECCOMP设施有多个添加,所有这些都在SECCOMP(2)手册页中记录:内核现在提供了记录SECCOMP过滤器返回的操作的功能。可以记录seccomp_ret_allow以外的所有操作。

新功能可用于限制记录到审核日志的一组操作。

新的seccomp()seccomp_filter_flag_log标志允许bpf过滤器请求所有返回操作(seccomp_ret_allow除外)记录到审核日志。

新的seccomp_ret_log过滤器返回操作允许系统调用(如seccomp_ret_allow),但将动作记录到审核日志。

新的seccomp_ret_kill_process筛选return return actor会导致内核终止多线程过程中的所有线程。这与预先存在的seccomp_ret_kill_thread筛选返回操作形成了对比,其仅终止了使系统调用的线程。

要清楚地区分新的Seccomp_ret_kill_process筛选返回操作,请从旧的seccomp_ret_kill操作中添加,名称seccomp_ret_kill_thread已添加为seccomp_ret_kill的同义词。

无法识别过滤器操作返回值的默认处理从seccomp_ret_kill_thread更改为seccomp_ret_kill_process。

新文件显示内核支持的SECCOMP过滤操作的列表。

新的seccomp()seccomp_get_action_avail操作允许程序询问内核是否支持指定的过滤器返回操作。

Cgroups版本2实现中出现了一系列新功能,所有这些功能都在CGroups(7)手册页中记录了:支持所谓的"线程模式",其中一些限制迄今为止在CGroups V2中存在宽松。该实现现在允许创建"线程子树",其中多线程进程的线程可以在不同的cgroups上传播。在螺纹子树中,"没有内部流程"规则是放松的,因此螺纹子树内的CGroup可以具有成员过程和对儿童cgroups的运动控制。只有所谓的线程控制器(目前,和)可以在螺纹子树的CBroups内使用。

一个新的文件,它出现在每个非热点cgroup中,并添加到支持"线程模式"概念,可用于查看和更改"类型"螺纹组。

新文件与&#34一起使用;线程模式"要查看作为CGroup成员的线程,并将线程移动到新的CGroups。

每个CGROUP中出现的两个新文件,可用于限制CGROUP子树的深度和子树中的后代CGroups的数量。

版本3的文件功能是添加的,以便允许执行命名方式文件功能。命名文件功能是一种机制,允许在非线性用户命名空间内具有功能的过程(但是在初始用户名称空间中没有能力)以以一种方式将能力附加到可执行文件,这意味着这些能力将被赋予过程仅当进程驻留在该用户命名空间内时,才执行文件。可以在功能(7)手册页中找到更多信息。

Membarrier()系统调用添加了加急选项(Membarrier_cmd_private_expedited命令)。有关详细信息,请参阅Membarrier(2)手动页面和Jonathan Corbet' S LWN.NET文章加快Membarrier()。

proreadv2(2)系统调用为新标志,RWF_NOWAIT添加了支持,该系统调用可以用于 ......