Linux Kernel 将移除可变长数组

栏目: 数据库 · 发布时间: 6年前

内核开发者 Kees Cook 递交了移除可变长数组的 pull request , Linux 4.20 或 5.0 将不再依赖于可变长数组。可变长数组(variable length array,简称 VLA)是指数组对象的长度在运行时而不是编译时确定。

但使用 VLA 会存在问题,包括增加运行时开销——因为数组长度需要在运行时确定; LLVM Clang 编译器不支持结构内 VLA,它只支持 C99 风格的 VLA;存在安全隐患。Linus Torvalds 对 VLA 的使用公开表达过不赞成,认为相比固定长度,VLA 产生了更多的代码和更慢的代码。

通过开发中的 Linux 4.20内核,它现在可以实现无VLA ...可变长度数组(VLA)可以方便并且是C99标准的一部分,但可能会产生意想不到的后果。

VLA允许在运行时而不是编译时确定数组长度。 Linux内核长期以来一直依赖于内核不同部分的VLA(包括结构内部),但现在持续数月(如果计算内核Clang的工作数年,则已经过去几年)已经删除了可变长度数组的使用在内核中。它们的问题是:

- 由于需要在运行时确定数组的大小,因此使用可变长度数组会给代码添加一些较小的运行时开销。

- LLVM Clang编译器不支持结构中的VLA,因此对于那些想要在GCC之外构建内核的人来说,Clang只支持C99风格的VLA。

- 可以说最重要的是,VDA可能会对内核的堆栈使用产生安全隐患。

Linus Torvalds在过去对VLA的使用表达了他的不满,例如“使用VLA是积极的愚蠢!它产生了更多代码,更多_slower_代码(和更脆弱的代码)”,而不仅仅是使用固定的密钥大小“。

特别是在过去的几个周期中,已经有代码消除了内核对VLA的使用,并且到目前为止这个Linux 4.20~5.0周期仍在继续。内核中有超过200个依赖于VLA的点,但现在最新的Linux Git代码应该基本结束了。

Kees Cook今天发出了拉取请求,用于移除VLA,现在,如果在内核的C代码中找到任何可变长度数组,则“-Wvla”编译器标志会发出警告。这将有助于防止新代码无意中使用VLA,并发现仍依赖于此行为的任何延迟内核代码。

Kees Cook写道,可能还有一些地方可以找到VLA,“可能会有更多的VLA隐藏在难以找到的randconfig中,但是在linux-next的上个月左右没有任何大的震动我们现在应该基本上没有VLA了!Wheee。:)“

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址:https://www.linuxidc.com/Linux/2018-10/1550.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

黑客秘笈

黑客秘笈

[美]彼得·基姆 / 徐文博、成明遥 / 人民邮电出版社 / 2015-7-1 / 45.00

所谓的渗透测试,就是借助各种漏洞扫描工具,通过模拟黑客的攻击方法,来对网络安全进行评估。 本书采用大量真实案例和集邮帮助的建议讲解了在渗透测试期间会面临的一些障碍,以及相应的解决方法。本书共分为10章,其内容涵盖了本书所涉的攻击机器/工具的安装配置,网络扫描,漏洞利用,人工地查找和搜索Web应用程序的漏洞,攻陷系统后如何获取更重要的信息,社工方面的技巧,物理访问攻击,规避杀毒软件的方法,破解......一起来看看 《黑客秘笈》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具