struct sockaddr伪灵活数组的麻烦

2024-11-29

本文讨论了Linux内核中struct sockaddr结构体中的sa_data字段带来的问题。sa_data最初设计为固定长度,但随着网络协议的发展,其长度不足以容纳所有地址类型,因此在实践中被当作灵活数组使用。这种用法导致编译器难以进行边界检查,从而带来安全隐患。内核开发者尝试通过多种方式解决这个问题,包括重新定义struct sockaddr,引入sockaddr_storage和sockaddr_legacy等变体,但都存在兼容性问题。最终,开发者计划逐步淘汰内核内部对struct sockaddr的使用,以改进内存安全。

7
未分类 sockaddr