深入解析 sock_skb_cb_check_size 宏及其内核安全机制
一、核心设计目的与背景
问题本质:
该宏用于解决内核网络协议栈中控制块内存越界的核心安全问题。在 Linux 网络子系统中,struct sk_buff
(简称 skb
)是数据包的核心载体,其 cb[]
字段(控制块缓冲区)被各协议层(IP/TCP/J1939 等)复用存储私有数据。若协议层控制结构(如 struct inet_skb_parm
)超出预分配空间,将导致内存越界,引发内核崩溃或安全漏洞 。
历史教训:
2023 年修复的 J1939 协议栈漏洞(CVE-2023-XXXX)正因 memcpy()
越界访问 skb->cb
触发。补丁不仅修正内存操作,更引入 BUILD_BUG_ON
验证控制块大小,从源头阻断此类风险 。
二、宏的完整执行逻辑与原理
1. 顶层调用:sock_skb_cb_check_size
#define sock_skb_cb_check_size(size) BUILD_BUG_ON((size) > SOCK_SKB_CB_