跟踪napi_gro_receive_entry时IP头信息缺失的分析

问题描述

在使用eBPF程序跟踪napi_gro_receive_entry内核跟踪点时,发现获取到的IP头部字段(如saddrdaddrprotocol)为空值。

代码如下:

/* 自定义结构体来映射 napi_gro_receive_entry tracepoint 的 format */
struct napi_gro_receive_entry_data {unsigned short common_type;unsigned char common_flags;unsigned char common_preempt_count;int common_pid;/* 以下字段根据 format 来定义 */char name[4];      // __data_loc char[]unsigned int napi_id;unsigned short queue_mapping;const void *skbaddr; // skbaddr 字段,用来访问 skb 数据bool vlan_tagged;unsigned short vlan_proto;unsigned short vlan_tci;unsigned short protocol;unsigned char ip_summed;unsigned int hash;bool l4_hash;unsigned int len;unsigned int data_len;unsigned int truesize;bool mac_header_valid;int mac_header;unsigned char nr_frags;unsigned short gso_size;unsigned short gso_type;
};
//ip头里面的信息为空
SEC("tp/net/napi_gro_receive_entry")
int trace_napi(struct napi_gro_receive_entry_data *ctx)
{// 获取当前进程 PIDint pid = bpf_get_current_pid_tgid();bpf_printk("Hello!!! \n");// 读取 IP 头中的 protocol 字段u8 protocol; struct sk_buff *skb = (struct sk_buff *)ctx->skbaddr;if(skb == NULL){bpf_printk("skb is NULL \n");return 0;}struct iphdr *ip = (struct iphdr *)(BPF_CORE_READ(skb, head) +BPF_CORE_READ(skb, network_header));if(ip == NULL){bpf_printk("ip is NULL \n");return 0;}protocol = BPF_CORE_READ(ip, protocol);// 如果协议字段无效,返回if (protocol < 0) {bpf_printk("protocol is NULL \n");return 0;}//输出协议源IP字段__u32 saddr = BPF_CORE_READ(ip, saddr);bpf_printk("Source IP: %d.%d.%d.%d\n",(saddr >> 24) & 0xFF,(saddr >> 16) & 0xFF,(saddr >> 8) & 0xFF,saddr & 0xFF);//输出协议协议字段bpf_printk("protocol: %d \n", protocol);return 0;}

 输出结果如下:

 发现读取到的IP头部信息(iphdr结构中的内容)是空的,但是可以确定获取到了skb以及iphdr结构体。

问题分析:(deepseek解答)

  1. GRO合并未完成
    GRO机制会对多个分片报文进行重组,此时network_header可能仅指向首个分片的头部位置。当处理后续分片时,skb->network_header可能尚未更新为有效偏移量‌。

  2. 协议头初始化时序
    在GRO处理路径中,skb->transport_headerskb->network_header的初始化可能延迟到分片重组完成后进行。过早访问会导致读取到内核未初始化的内存区域‌。

  3. SKB共享状态干扰
    skb被克隆(skb_clone())时,多个副本共享数据缓冲区。此时直接访问skb->head + skb->network_header可能触发内存越界,因为克隆操作的元数据更新存在延迟‌。

 以上给出了deepseek的解释,但是本人并没有验证,后期会去深入源码实现来探讨这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android子线程更新View的方法原理

对于所有的Android开发者来说&#xff0c;“View的更新必须在UI线程中进行”是一项最基本常识。 如果不在UI线程中更新View&#xff0c;系统会抛出CalledFromWrongThreadException异常。那么有没有什么办法可以不在UI线程中更新View&#xff1f;答案当然是有的&#xff01; 一…

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)

DeepSeek 之后&#xff0c;又一个AI沸腾&#xff0c;冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨&#xff0c;全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队&#xff08;隶属中国夜莺科技&#xff09;推出的“全球首款通用AI…

Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示)

一、计算机眼中的图像 像素 像素是图像的基本单元&#xff0c;每个像素存储着图像的颜色、亮度和其他特征。一系列像素组合到一起就形成 了完整的图像&#xff0c;在计算机中&#xff0c;图像以像素的形式存在并采用二进制格式进行存储。根据图像的颜色不 同&#xff0c;每个像…

SQLiteStudio:一款免费跨平台的SQLite管理工具

SQLiteStudio 是一款专门用于管理和操作 SQLite 数据库的免费工具。它提供直观的图形化界面&#xff0c;简化了数据库的创建、编辑、查询和维护&#xff0c;适合数据库开发者和数据分析师使用。 功能特性 SQLiteStudio 提供的主要功能包括&#xff1a; 免费开源&#xff0c;可…

【软考网工-实践篇】DHCP 动态主机配置协议

一、DHCP简介 DHCP&#xff0c;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议。 位置&#xff1a;DHCP常见运行于路由器上&#xff0c;作为DHCP服务器功能&#xff1a;用于自动分配IP地址及其他网络参数给网络中的设备作用&#xff1a;简化网络管理&…

【Linux学习笔记】Linux用户和文件权限的深度剖析

【Linux学习笔记】Linux用户和文件权限的深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 前言 文章目录 【Linux学习笔记】Linux用户和文件权限的深度剖析前言一. Linux权限管理1.1 文件访问者的分类&#xff08;人)…

Centos离线安装openssl-devel

文章目录 Centos离线安装openssl-devel1. openssl-devel是什么&#xff1f;2. openssl-devel下载地址3. openssl-devel安装4. 安装结果验证 Centos离线安装openssl-devel 1. openssl-devel是什么&#xff1f; openssl-devel 是 Linux 系统中与 OpenSSL 加密库相关的开发包&…

深度学习篇---Opencv中Haar级联分类器的自定义

文章目录 1. 准备工作1.1安装 OpenCV1.2准备数据集1.2.1正样本1.2.2负样本 2. 数据准备2.1 正样本的准备2.1.1步骤2.1.2生成正样本描述文件2.1.3示例命令2.1.4正样本描述文件格式 2.2 负样本的准备2.2.1步骤2.2.2负样本描述文件格式 3. 训练分类器3.1命令格式3.2参数说明 4. 训…

Smart Time Plus smarttimeplus-MySQLConnection SQL注入漏洞(CVE-2024-53544)

免责声明 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x01…

58.Harmonyos NEXT 图片预览组件架构设计与实现原理

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; Harmonyos NEXT 图片预览组件架构设计与实现原理 文章目录 Harmonyos NEXT 图片预览组件架构设计与实现原理效果预览一、组件架构概述1. 核心组件层…

虚拟机下ubuntu进不了图形界面

6.844618] piix4_smbus 0000:07.3: SMBus Host ContrFoller not enabled! 7.859836] sd 2:0:0:0:0: [sda] Assuming drive cache: wirite through /dev/sda1: clean, 200424/1966080 files, 4053235/7864064 blocks ubuntu启动时&#xff0c;卡在上面输出位置 当前遇到的原因…

Appium高级操作--从源码角度解析--模拟复杂手势操作

书接上回&#xff0c;Android自动化--Appium基本操作-CSDN博客文章浏览阅读600次&#xff0c;点赞10次&#xff0c;收藏5次。书接上回&#xff0c;上一篇文章已经介绍了appium在Android端的元素定位方法和识别工具Inspector&#xff0c;本次要介绍使用如何利用Appium对找到的元…

SpringBoot学生宿舍管理系统的设计与开发

项目概述 幽络源分享的《SpringBoot学生宿舍管理系统的设计与开发》是一款专为校园宿舍管理设计的智能化系统&#xff0c;基于SpringBoot框架开发&#xff0c;功能全面&#xff0c;操作便捷。该系统涵盖管理员、宿管员和学生三大角色&#xff0c;分别提供宿舍管理、学生信息管…

爱普生温补晶振 TG5032CFN高精度稳定时钟的典范

在科技日新月异的当下&#xff0c;众多领域对时钟信号的稳定性与精准度提出了极为严苛的要求。爱普生温补晶振TG5032CFN是一款高稳定性温度补偿晶体振荡器&#xff08;TCXO&#xff09;。该器件通过内置温度补偿电路&#xff0c;有效抑制环境温度变化对频率稳定性的影响&#x…

【原创】在高性能服务器上,使用受限用户运行Nginx,充当反向代理服务器[未完待续]

起因 在公共高性能服务器上运行OllamaDeepSeek&#xff0c;如果按照默认配置启动Ollama程序&#xff0c;则自己在远程无法连接你启动的Ollama服务。 如果修改配置&#xff0c;则会遇到你的Ollama被他人完全控制的安全风险。 不过&#xff0c;我们可以使用一个方向代理&#…

Bash和Zsh的主要差异是?

Bash&#xff08;GNU Bourne-Again Shell&#xff09; 和 Zsh&#xff08;Z Shell&#xff09; 都是功能强大的Unix/Linux Shell&#xff0c;广泛用于交互式使用和脚本编写。 尽管它们有很多相似之处&#xff0c;但在功能、语法、配置选项等方面也存在一些显著的区别。 是Bas…

芯科科技推出的BG29超小型低功耗蓝牙®无线SoC,是蓝牙应用的理想之选

具有扩大的内存和超低功耗特性的超小型BG29是互联健康设备的理想之选 低功耗无线领域内的领导性创新厂商Silicon Labs&#xff08;亦称“芯科科技”&#xff0c;NASDAQ&#xff1a;SLAB&#xff09;今日宣布&#xff1a;推出全新的第二代无线开发平台产品BG29系列无线片上系统…

【数据挖掘】知识蒸馏(Knowledge Distillation, KD)

1. 概念 知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;是一种模型压缩和知识迁移技术&#xff0c;旨在将大型复杂模型&#xff08;称为教师模型&#xff09;中的知识传递给一个较小的模型&#xff08;称为学生模型&#xff09;&#xff0c;以减少计算成本&…

选型消息队列(MQ):ActiveMQ、RabbitMQ、RocketMQ、Kafka对比

选型消息队列&#xff08;MQ&#xff09;&#xff1a;ActiveMQ、RabbitMQ、RocketMQ、Kafka对比 选型消息队列&#xff08;MQ&#xff09;1. 引言2. 消息队列核心指标3. MQ 技术对比分析4. 详细分析及案例4.1 ActiveMQ&#xff1a;传统企业级 MQ 方案4.2 RabbitMQ&#xff1a;高…

AWK 入门教程:强大的文本处理工具

AWK 是一种强大的文本处理工具&#xff0c;广泛用于 Linux/Unix 系统中对文本文件或数据流进行操作。它能够基于条件筛选、统计字段、重新排列数据等。主要特点包括&#xff1a; 2. AWK 的基本语法 2.1 AWK 程序的结构 AWK 程序的结构: awk pattern { action } file 2.2 常…