内核一个转发模块,在做IPv4转IPv6的时候,对原来的IPv4报文指针进行了释放操作,然后新建一个skb buffer存储IPv6报文,使用

kfree_skb释放掉旧的IPv4 skb后直接将新的IPv6 SKB指针传递给了指向旧的指针(如下),结果引起了内核奔溃。

struct sk_buff *skb, skb_cp;/* 创建一个新的skb buffer */
skb_cp = skb_copy_expand(skb, head, tail, GFP_ATOMIC);if (skb_cp)
{/* 创建成功后,释放skb所指向的旧的buffer,然后将新的skb指针赋值给它 */dev_kfree_skb_any(skb);skb = skb_cp;
}

上述操作是在一个函数体内进行的,导致跳出函数体后,skb仍然指向被释放的skb buffer,引起系统异常。以前以为指针传递可以改变原有的内容,原来是对指针没理解透彻,将指针传递给函数后,可以在该函数体内修改该指针指向的数据内容,但是如果更改该指针所存储的对象位置,对函数外部而言是无效的,相当于指针传递是传递了一个指针副本,这个指针副本和原有的指针指向同一个内容,可以对该内容进行修改,但是如果修改了该指针副本所指向的位置,并不会修改原有指针的内容。

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

释放skb buffer指针引出的指针传递问题相关推荐

  1. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  2. 函数参数的传递问题(一级指针和二级指针)

    函数参数的传递问题(一级指针和二级指针) [转] 原以为自己对指针掌握了,却还是对这个问题不太明白.请教!   程序1:   void  myMalloc(char  *s)  //我想在函数中分配内 ...

  3. 第二十章 指针 二 为指针分配和释放空间(转)

    载自<白话c++>:http://17de.com/library/CPP/ls20.htm 20.1 理解指针的两种"改变" 20.1.1 改变指针的值 20.1.2 ...

  4. 【C/C++】指针的思考与注意:空指针,指针赋值,void*指针,二级指针,结构体指针,指向同一地址的多个指针释放问题

    部分参考自:https://blog.csdn.net/u012351051/article/details/96753703 1. 啥是指针 指针是地址,而不是具体的标量值,这是指针的精髓,不管是一 ...

  5. 出参传递数组指针_C语言指针重难点详解

    1为什么使用指针 假如我们定义了 char a='A' ,当需要使用 'A' 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 ...

  6. C语言:结构体中一级指针和二级指针的创建与释放示例

    http://blog.csdn.net/Bixiwen_liu/article/details/53610952 这几天把C语言巩固了一下,作为一门最基本的编程语言,C语言还是相当基础和非常重要的, ...

  7. c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题

    [求助]关于文件指针在函数中传递的问题 我写的一个程序中文件指针在各函数间传递.请各位整理一下思路. /*=============================================== ...

  8. 字符串指针的地址的传递

    字符串指针的地址的传递 #include <iostream>using namespace std;void change(char **a) {(*a)++; }int main() ...

  9. C语言中函数和指针的參数传递

    C语言中函数和指针的參数传递 近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家 ...

最新文章

  1. three.js 背景图片
  2. ansible playbook实战——下发部署nginx以及更新、回滚
  3. C代码开发遇到的问题 变量初始化和结构体指针移动
  4. C语言再学习 -- 详解C++/C 面试题 2
  5. perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
  6. mybatis_user_guide(6) Java API
  7. php.ini 安全配置
  8. Centos下MySQL的安装及常见问题
  9. Python分析「我们为什么这么穷」
  10. ar开发 ue4_UE4 和 ARKit 入门
  11. 试用了GIMP的Smart remove selection,结果有些失望啊,哈哈
  12. 神州数码DCWS学习日志
  13. Android 集成Unity项目
  14. Maven 项目添加jetty 插件
  15. w10系统服务器连接错误代码,Win10升级失败常见问题及错误代码解决方法汇总
  16. 最新版面具隐藏root过检测教程(免刷机)
  17. 安卓平板usb变显示器_三星DeX—安卓生产力之巅
  18. JSPL中用fn:contains()判断list中是否包含某个值
  19. 在线学习编程网站收集
  20. 基于帧的时隙ALOHA(FSA)算法的实现与性能分析

热门文章

  1. hdu 2025:查找最大元素(水题,顺序查找)
  2. 如何开启和关闭开机自启动
  3. AT COMMAND的命令集
  4. 满足什么条件的两个量才可以被分类?
  5. QSAR生命的发动机卟啉c20h14n4---用反向传导做卟啉的分子模型
  6. android+发邮件,Android发送邮件的方法实例详解
  7. 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务
  8. C# 指针的使用 ref byte 转 byte 或 byte [] ref 与指针
  9. 构建根文件系统之busybox(三)最小根文件系统
  10. kmalloc、vmalloc、malloc、calloc的区别