Linux问题情报分享(1):内核Stack Clash补丁导致Java程序启动失败
关于Stack Clash,缺少耐心的读者,请参考Stack Clash 漏洞正粉碎 Linux 防御危及 root 权限,较全面的介绍请参考Stack Guard Page Circumvention Affecting Multiple Packages。
各个Linux发行版都已经发布了升级,合并了上游补丁。 上游补丁通过增大stack guard gap(堆栈保护措施,更多请参考Buffer overflow protection)尺寸到1M的方式,修复了Linux Kernel Stack Clash安全漏洞。但是,这个修正会导致JVM崩溃。
终端显示问题可能是这样的
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGBUS (0x7) at pc=0x00007f0d190f6ec3, pid=17221, tid=0x00007f0d2be12740
#
# Problematic frame:
# j java.lang.Object.()V+0
调试coredump,结果可能是这样的
总的说来,就是Java程序启动失败。
这个问题会影响CentOS5, 6, 7和部分Debain发行版本。
临时解决方案的实质是给JVM指定线程堆栈为2M并且重启之。
对于具体应用,这可以通过给java命令行(或者适当的命令行)增加“-Xss2m”参数或者通过配置文件来调整。也可以通过环境变量JAVA_OPTS(或者对于tomcat,CATALINA_OPTS)来调整。比如
CATALINA_OPTS="${CATALINA_OPTS} -Xss2m"
如果是JNI方式,则可以通过环境变量JAVA_TOOL_OPTIONS来处理。对于这个环境变量,更多信息请参考Linux系统小技巧(4):环境变量JAVA_TOOL_OPTIONS简介。
最后更新:2017-07-27 09:03:00
上一篇:
阿里云安全肖力:边界消亡后,你需要四个“新认知”
下一篇:
Linux系统小技巧(5):如何列出和排序正在读写的进程?
datalist自定义列表的使用心得
第二章 IoC Annotation注入
定时任务时间与当前时间比较的方法
九度题目1323:World Cup Betting
CCAI | 中国科学院前沿科学与教育局副局长王颖:论人工智能与艺术
IE环境下判断IE版本的语句...[if lte IE 6]……[endif][if lte IE 7]……[endif]
jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming
建设投入严重不足 构建全新网络安全体系迫在眉睫
C#多线程学习(二) 如何操纵一个线程
Tomcat的设置3——设置虚拟主机