跟蹤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.pswp.cn/diannao/73261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73261.shtml
英文地址,請注明出處:http://en.pswp.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 常…