399 Star 1.4K Fork 1.3K

GVPopenEuler / kernel

 / 详情

net/core/skbuff.c 的skb_segment() 函数中list_skb指针可能为空

已完成
缺陷
创建于  
2022-05-11 10:18

【标题描述】 net/core/skbuff.c 的skb_segment() 函数中list_skb指针可能为空
【环境信息】
硬件信息:ALL
软件信息:内核3.10及以上所有版本
【问题复现步骤】

if (sg && csum && (mss != GSO_BY_FRAGS)) {
if (!(features & NETIF_F_GSO_PARTIAL)) {
struct sk_buff *iter;
unsigned int frag_len;

  if (!list_skb ||    //当list_skb为null时跳转到normal标签执行
    !net_gso_ok(features, skb_shinfo(head_skb)->gso_type))
    goto normal;

normal:
headroom = skb_headroom(head_skb);
pos = skb_headlen(head_skb);

do {
  struct sk_buff *nskb;
  skb_frag_t *nskb_frag;
  int hsize;
  int size;

  if (unlikely(mss == GSO_BY_FRAGS)) {
    len = list_skb->len;      //list_skb 为空
  } else {

其他没有走到list_skb判空流程,顺序执行到normal时同样有空指针风险

评论 (4)

far_beyond 创建了缺陷

Hi far_beyond, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers: @YangYingliang , @pi3orama , @成坚 (CHENG Jian) , @jiaoff , @Xie XiuQi

openeuler-ci-bot 添加了
 
sig/Kernel
标签

个人认为不会有风险,原因如下:
1:涉及到skb_segment函数的函数包含udp_offload.c offload.c,tcp_offload.c这三个文件,而这三个文件都有对list_skb为空的判断,所以很难走到下面list的判读。
2:就算走到为空的判断,mss=GSO_BY_FRAGS这一判断条件也是不会进去的,因为这一条语句和list_skb内容强相关输入图片说明输入图片说明输入图片说明

zhangjialin 置顶等级 修改为不置顶
sanglipeng 负责人设置为sanglipeng
sanglipeng 任务状态待办的 修改为修复中
sanglipeng 添加了
 
issue_feature
标签
sanglipeng 移除了
 
issue_feature
标签
sanglipeng 添加了
 
kind/bug
标签
sanglipeng 移除了
 
kind/bug
标签
sanglipeng 移除了
 
kind/bug
标签

您好,由于这个issue两周内没有反馈解决情况,并且kernel已经给出分析结论,按照社区处理流程,先将issue关闭,后续有疑问可以重新开启。

sanglipeng 任务状态修复中 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(5)
5329419 openeuler ci bot 1632792936
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助

53164aa7 5694891 3bd8fe86 5694891