问题说明

近期一台主机报以下 kernel 信息:

Jul 8 10:47:42 cztest kernel: ------------[ cut here ]------------

Jul 8 10:47:42 cztest kernel: WARNING: at net/ipv4/tcp_input.c:2269 tcp_mark_head_lost+0x113/0x290()

Jul 8 10:47:42 cztest kernel: Modules linked in: iptable_filter ip_tables binfmt_misc cdc_ether usbnet mii xt_multiport dm_mirror dm_region_hash dm_log dm_mod intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm irqbypass crc32_p

clmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper ablk_helper cryptd ipmi_ssif ipmi_devintf ipmi_si mei_me pcspkr iTCO_wdt mxm_wmi iTCO_vendor_support dcdbas mei sg sb_edac edac_core ipmi_msghandler shpchp lpc_ich wmi acpi_p

ower_meter xfs libcrc32c sd_mod crc_t10dif crct10dif_generic mgag200 drm_kms_helper crct10dif_pclmul crct10dif_common syscopyarea crc32c_intel sysfillrect sysimgblt fb_sys_fops igb ttm ptp drm ahci pps_core libahci dca i2c_algo_bit libat

a megaraid_sas i2c_core fjes [last unloaded: ip_tables]

Jul 8 10:47:42 cztest kernel: CPU: 10 PID: 0 Comm: swapper/10 Tainted: G W ------------ 3.10.0-514.16.1.el7.x86_64 #1

Jul 8 10:47:42 cztest kernel: Hardware name: Dell Inc. PowerEdge R630/02C2CP, BIOS 2.3.4 11/08/2016

Jul 8 10:47:42 cztest kernel: 0000000000000000 dd79fe633eacd853 ffff88103e743880 ffffffff81686ac3

Jul 8 10:47:42 cztest kernel: ffff88103e7438b8 ffffffff81085cb0 ffff8806d5c57800 ffff88010a4e6c80

Jul 8 10:47:42 cztest kernel: 0000000000000001 00000000f90e778c 0000000000000001 ffff88103e7438c8

Jul 8 10:47:42 cztest kernel: Call Trace:

Jul 8 10:47:42 cztest kernel: [] dump_stack+0x19/0x1b

Jul 8 10:47:42 cztest kernel: [] warn_slowpath_common+0x70/0xb0

Jul 8 10:47:42 cztest kernel: [] warn_slowpath_null+0x1a/0x20

Jul 8 10:47:42 cztest kernel: [] tcp_mark_head_lost+0x113/0x290

Jul 8 10:47:42 cztest kernel: [] tcp_update_scoreboard+0x67/0x80

Jul 8 10:47:42 cztest kernel: [] tcp_fastretrans_alert+0x6dd/0xb50

Jul 8 10:47:42 cztest kernel: [] tcp_ack+0x8dd/0x12e0

Jul 8 10:47:42 cztest kernel: [] tcp_rcv_established+0x118/0x760

Jul 8 10:47:42 cztest kernel: [] tcp_v4_do_rcv+0x10a/0x340

Jul 8 10:47:42 cztest kernel: [] ? security_sock_rcv_skb+0x16/0x20

Jul 8 10:47:42 cztest kernel: [] tcp_v4_rcv+0x799/0x9a0

Jul 8 10:47:42 cztest kernel: [] ? iptable_filter_hook+0x36/0x80 [iptable_filter]

Jul 8 10:47:42 cztest kernel: [] ip_local_deliver_finish+0xb4/0x1f0

Jul 8 10:47:42 cztest kernel: [] ip_local_deliver+0x59/0xd0

Jul 8 10:47:42 cztest kernel: [] ? ip_rcv_finish+0x350/0x350

Jul 8 10:47:42 cztest kernel: [] ip_rcv_finish+0x8a/0x350

Jul 8 10:47:42 cztest kernel: [] ip_rcv+0x2b6/0x410

Jul 8 10:47:42 cztest kernel: [] __netif_receive_skb_core+0x582/0x800

Jul 8 10:47:42 cztest kernel: [] ? tcp4_gro_receive+0x134/0x1b0

Jul 8 10:47:42 cztest kernel: [] ? __slab_free+0x81/0x2f0

Jul 8 10:47:42 cztest kernel: [] __netif_receive_skb+0x18/0x60

Jul 8 10:47:42 cztest kernel: [] netif_receive_skb_internal+0x40/0xc0

Jul 8 10:47:42 cztest kernel: [] napi_gro_receive+0xd8/0x130

Jul 8 10:47:42 cztest kernel: [] igb_clean_rx_irq+0x387/0x700 [igb]

Jul 8 10:47:42 cztest kernel: [] ? skb_release_data+0xf2/0x140

Jul 8 10:47:42 cztest kernel: [] igb_poll+0x383/0x770 [igb]

Jul 8 10:47:42 cztest kernel: [] ? tcp_write_timer_handler+0x200/0x200

Jul 8 10:47:42 cztest kernel: [] net_rx_action+0x170/0x380

Jul 8 10:47:42 cztest kernel: [] __do_softirq+0xef/0x280

Jul 8 10:47:42 cztest kernel: [] call_softirq+0x1c/0x30

Jul 8 10:47:42 cztest kernel: [] do_softirq+0x65/0xa0

Jul 8 10:47:42 cztest kernel: [] irq_exit+0x115/0x120

Jul 8 10:47:42 cztest kernel: [] do_IRQ+0x58/0xf0

Jul 8 10:47:42 cztest kernel: [] common_interrupt+0x6d/0x6d

Jul 8 10:47:42 cztest kernel: [] ? cpuidle_enter_state+0x52/0xc0

Jul 8 10:47:42 cztest kernel: [] cpuidle_idle_call+0xd9/0x210

Jul 8 10:47:42 cztest kernel: [] arch_cpu_idle+0xe/0x30

Jul 8 10:47:42 cztest kernel: [] cpu_startup_entry+0x245/0x290

Jul 8 10:47:42 cztest kernel: [] start_secondary+0x1ba/0x230

Jul 8 10:47:42 cztest kernel: ---[ end trace 6bc65b0c591c1794 ]---

主机环境如下:

System | Dell Inc.; PowerEdge R620;

Platform | Linux

Kernel | Centos 3.10.0-514.16.1.el7.x86_64

Total Memory | 64G

处理说明

堆栈的打印过程类似于xfs 告警处理 , 大致的过程为内核开启 sack, fack 功能后, 网络传输过程中需要的快速重传和选择性重传会通过 tcp_input.c 文件的 tcp_mark_head_lost 函数进行处理, 其主要标记传输过程中丢失的报文的数量, 如下所示, 系统报的 kernel 堆栈信息由 tcp_mark_head_lost 函数中的 tcp_verify_left_out 函数调用触发:

// source/include/net/tcp.h

#define tcp_verify_left_out(tp) WARN_ON(tcp_left_out(tp) > tp->packets_out)

static inline unsigned int tcp_left_out(const struct tcp_sock *tp)

{

return tp->sacked_out + tp->lost_out;

}

// source/include/asm-generic/bug.h

#define __WARN() warn_slowpath_null(__FILE__, __LINE__)

#ifndef WARN_ON

#define WARN_ON(condition) ({ \

__WARN(); \

})

#endif

// source/net/ipv4/tcp_input.c

/* Detect loss in event "A" above by marking head of queue up as lost.

* For FACK or non-SACK(Reno) senders, the first "packets" number of segments

* are considered lost. For RFC3517 SACK, a segment is considered lost if it

* has at least tp->reordering SACKed seqments above it; "packets" refers to

* the maximum SACKed segments to pass before reaching this limit.

*/

static void tcp_mark_head_lost(struct sock *sk, int packets, int mark_head)

{

struct tcp_sock *tp = tcp_sk(sk);

....

tcp_verify_left_out(tp); // trigger dump_stack

}

...

static void tcp_update_scoreboard(struct sock *sk, int fast_rexmit)

{

struct tcp_sock *tp = tcp_sk(sk);

if (tcp_is_reno(tp)) {

tcp_mark_head_lost(sk, 1, 1);

} else if (tcp_is_fack(tp)) {

int lost = tp->fackets_out - tp->reordering;

if (lost <= 0)

lost = 1;

tcp_mark_head_lost(sk, lost, 0);

} else {

int sacked_upto = tp->sacked_out - tp->reordering;

if (sacked_upto >= 0)

tcp_mark_head_lost(sk, sacked_upto, 0);

else if (fast_rexmit)

tcp_mark_head_lost(sk, 1, 1);

}

}

从 redhat-536483中描述的来看, 这种错误信息一般是 tcp bug 引起的, 在内核使用已经释放的 tcp socket buffer 链表的时候就可能触发:

Root Cause

A use after free issue related to the TCP kernel socket buffer linked list. Thus it is a bug in the TCP kernel code. Although the bug is in TCP kernel code, but it could get triggered in multiple ways. It could get triggered due to NFS, or due to even an application(say java process).

处理方式

升级 kernel

如下所示, redhat 在 3.10.0-520 版本可能修复了 tcp_* 相关函数的 use after free 相关的 bug, 可以尝试升级处理该问题:

centos 7.x changelog

* Thu Nov 03 2016 Rafael Aquini [3.10.0-520.el7]

- [net] tcp: fix use after free in tcp_xmit_retransmit_queue() (Mateusz Guzik) [1379531] {CVE-2016-6828}

关闭 fack/sack 功能

从红帽知识库的文档来看, tcp_mark_head_lost 函数主要用来标记快速重传和选择确认的过程中丢失的报文数量, 所以或许可以临时关闭 fack/sack 参数避免该问题的出现:

sysctl -w net.ipv4.tcp_fack=0

sysctl -w net.ipv4.tcp_sack=0

可以优先尝试第二种方式, 如果还有问题再考虑升级 kernel 版本.

参考

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

linux tcp 113错误,linux系统报tcp_mark_head_lost错误的处理方法相关推荐

  1. python安装失败0x80070570_e460安装win10系统报错0x80070570的解决方法

    win10系统现已逐渐成为了主流操作系统,很多用户都将自己的电脑升级为win10系统.但近日却有用户跟小编反映说自己的e460电脑在安装win10系统时出现了提示错误0x80070570情况,那我们要 ...

  2. linux tcp keepalive,[20170504]Linux TCP keepalive timers.txt

    [20170504]Linux TCP keepalive timers.txt --//上午仔细看一些文档,发现实际上netstat命令就有输出,参数--timer或者-o参数. # netstat ...

  3. linux 软键盘输入密码,Linux_Linux系统中使用屏幕键盘的方法,屏幕键盘可以作为实体键盘输 - phpStudy...

    Linux系统中使用屏幕键盘的方法 屏幕键盘可以作为实体键盘输入的替代方案.在某些时候,屏幕键盘显得非常需要. 比如, 你的键盘刚好坏了:你的机器太多,没有足够的键盘:你的机器没有多余的接口来连接键盘 ...

  4. mysql 报1055错误_MySQL数据库报1055错误

    有点坑啊,当初装MySQL数据库的时候没有整配置文件,结果MySQL报1055错误的时候,网上的解决办法都说如果需要永久生效的话,只能通过改配置文件实现,but,我没有配置文件,蜜汁尴尬啊 1.已安装 ...

  5. 电脑xp传照片显示服务器错误,xp系统显示“服务器错误500”的两种解决方法

    xp纯净版系统在浏览网页的时候会遇到这样或者那样的错误,比如经常遇到404错误,503错误,怎么回事呢?这些都是HTTP的状态码,不同的状态码代表不同的错误类型,有些不常用的状态码便没有详细的记载,例 ...

  6. 双击计算机显示未指定的错误,win10系统出现未指定错误的详细办法

    有关win10系统出现未指定错误的操作方法想必大家有所耳闻.但是能够对win10系统出现未指定错误进行实际操作的人却不多.其实解决win10系统出现未指定错误的问题也不是难事,小编这里提示两点:1.在 ...

  7. linux tcp 内核模块,C – Linux – 内核模块 – TCP头

    我正在尝试创建 linux内核模块,它将检查传入的数据包.目前,我正在提取数据包的TCP标头并读取源和目标端口 – >但是我得到的值不正确.我有钩功能: unsigned int hook_fu ...

  8. linux tcp 服务器 c,Linux网络编程篇之Tcp协议介绍, C/S通信及聊天室实现

    基于tcp协议的网络程序流程图如下: tcp协议网络程序流程图 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态 客户端调用so ...

  9. net framework 3.5 安装错误_PageAdmin CMS建站系统报http403错误的解决方案

    pageadmin CMS目前已经是国内用户最多的网站内容管理系统,但是很多新手第一次安装时候最常见的错误就是http403错误. 针对这个错误,小编我整理出了常见的原因及解决方法 原因1.后台站点绑 ...

  10. 移动硬盘里的linux系统文件夹加密,在Deepin系统中加密移动存储设备的方法

    本文介绍简单可行的方法让你在Deepin系统中加密你的移动存储设备,包括U盘及移动硬盘.同时要指出的是虽然可以采用下面方法保护数据不让他人随意观看,但是不能阻止他人破坏数据,例如,格式化U盘或移动硬盘 ...

最新文章

  1. Windows内核情景分析 笔记
  2. Spring Thread Pool 线程池的应用
  3. CMakeList.txt中设置一个可变的变量的值(bool)
  4. php读取模板生成静态功能,php 生成静态页面的办法与实现代码详细版
  5. Linux查找大文件 (find的用法)
  6. seafile私有网盘搭建
  7. 高效办公之Windows高效技巧提高你的工作效率
  8. w10系统 怎么快捷搜索服务器,w10系统怎么远程连接服务器
  9. win10硬盘速度测试软件,最好的硬盘检测工具
  10. 特殊符号大全分享给大家,直接复制粘贴就可以使用了!
  11. 我国祖冲之密码算法ZUC128和ZUC256性能测试
  12. PostgreSQL10.1-CN-v0.1.chm中文手册
  13. 【问题记录】pip 安装报错 Failed to establish a new connection
  14. 图片转换成代码的小工具Image2Lcd使用说明
  15. 骨传导耳机推荐,列举几款骨传导主流的耳机分享
  16. 笔试题之——栈问题(列车车厢编组问题)
  17. 如何画Flot折线图
  18. java + nginx + ffmpeg + vue实现摄像头,rtmp、rtsp直播流协议的实时播放
  19. 怎么看互联网反垄断下的大厂未来?
  20. PhoneGap 简介

热门文章

  1. 解决java.lang.ClassCastException class java.lang.Integer cannot be cast to class java.lang.Long异常
  2. NET Reflector 8 使用
  3. Limelight完成了对雅虎Edgecast的收购,合并后的公司更名为Edgio,成为全球边缘解决方案的领导者...
  4. 迅雷下载边下边播设置为本地安装的浏览器
  5. 微积分“小糊涂”,难担大任
  6. 微信小程序自定义页面标题
  7. ARM裸机篇(三)——i.MX6ULL第一个裸机程序
  8. 计算机知识竞赛 翻译,英文简历之常见学科竞赛中英文翻译
  9. 萧风查询搜索软件 v1.1 下载
  10. Error: Delta RPMs disabled because /usr/bin/applyd