poison。但是 use after poison 不能够给出地址失效

简介: q

分配过大的内存 AddressSanitizer 会报出 OOM 错误,根据栈以及 Core Dump 文件可以分析出何处分配了过大内存。栈举例如下:

Fix PR 见:https://github.com/apache/doris/pull/10289

UBSan 能够高效发现强制类型转换的错误,如下方 Issue 链接中描述,它能够精确的描述出强制类型转换带来错误的代码,如果不能在第一现场发现这种错误,后续因为指针错误使用,会比较难定位。

Issue:https://github.com/apache/doris/issues/9105

UndefinedBehaviorSanitizer 也比 AddressSanitizer 及其它的更容易发现死锁。

比如:https://github.com/apache/doris/issues/10309

程序维护内存 Pool 时 AddressSanitizer 的使用
AddressSanitizer 是编译器针对内存分配、释放、访问 生成额外代码来实现内存问题分析的,如果程序维护了自己的内存 Pool,AddressSanitizer 就不能发现 Pool 中内存非法访问的问题。这种情况下需要做一些额外的工作来使得 AddressSanitizer 尽可能工作,主要是使用 ASAN_POISON_MEMORY_REGION 和 ASAN_UNPOISON_MEMORY_REGION 管理内存是否可以访问,这种方法使用比较难,因为 AddressSanitizer 内部有地址对齐等的处理。出于性能以及内存释放等原因,Apache Doris 也维护了内存分配 Pool ,这种方法不能确保 AddressSanitizer 能够发现所有问题。

可以参考:https://github.com/apache/doris/pull/8148

当程序维护自己的内存池时,按照 https://github.com/apache/dorisw/pull/8148 中方法,use after free 错误会变成 use after poison。但是 use after poison 不能够给出地址失效的栈(https://github.com/google/sanitizers/issues/191),从而导致问题的定位分析仍然很困难。

因此建议程序维护的内存 Pool 可以通过选项关闭,这样在测试环境就可以使用 AddressSanitizer 高效地定位内存问题。

Core dump 分析工具
分析 C++ 程序生成的 Core Dump 文件经常遇到的问题就是怎么打印出 STL 容器中的值以及 Boost 中容器的值,有如下三个工具可以高效的查看 STL 和 Boost 中容器的值。
————————————————

相关文章
|
4月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
49050 72
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
人工智能 网络协议 算法
5 分钟搞懂 ECN
5 分钟搞懂 ECN
4454 0
|
5月前
|
存储 安全 API
OpenClaw安全部署与版本加固指南|全平台部署+API配置+漏洞防护教程
2026年,OpenClaw(Clawdbot)作为高权限本地AI执行代理,其强大的系统操控能力与潜在的安全风险并存。近期披露的ClawJacked、WebSocket劫持、远程代码执行等高危漏洞,已导致大量公网暴露实例被入侵,凸显了安全部署与版本加固的重要性。默认配置下,OpenClaw存在公网可访问、无密码认证、敏感信息明文存储等多重风险,若直接部署使用,相当于向攻击者敞开系统大门。
1270 7
|
5月前
|
人工智能 Cloud Native JavaScript
JSVClaw 与 OpenClaw 深度解析:从 AI 助理框架到云原生部署的完整实践
本文深度解析 JSVClaw 和 OpenClaw 开源 AI 智能体框架的技术架构、核心特性,以及在阿里云平台上的云原生部署实践。涵盖百炼 API 集成、多平台消息通道打通(钉钉/iMessage/企微等)、部署方案对比(轻量服务器/无影云电脑/容器化),以及实际应用场景与最佳实践。助力开发者快速拥有专属 AI 数字员工。
|
11月前
|
安全 Oracle 关系型数据库
【赵渝强老师】基于PostgreSQL的MPP集群:Greenplum
Greenplum是基于PostgreSQL的MPP架构分布式数据库,由Master、Segment和Interconnect组成,支持海量数据并行处理。本文介绍其架构及集群安装配置全过程。
826 1
|
存储 负载均衡 云计算
抖音服务器是什么样的
抖音服务器采用分布式云计算架构,遍布全国多个数据中心,如北上广、四川和贵州等地,利用高带宽、云集群并发及OSS、CDN、SLB等技术,确保大量用户同时流畅观看视频。这不仅需要强大的服务器群支持,还需精准的负载均衡与内容分发网络,保障用户体验。
1097 1
|
监控 测试技术 Python
性能工具之 Locust 简单入门
【4月更文挑战第1天】Locust是一个易于使用,分布式,用户负载测试工具。它用于负载测试web站点(或其他系统)并计算一个系统可以处理多少并发用户。
916 1
性能工具之 Locust 简单入门
|
监控 安全 JavaScript
DVWA CSP Bypass 通关解析
DVWA CSP Bypass 通关解析
|
网络安全 开发工具
zookeeper解决Error contacting service. It is probably not running.
应用场景 安装了zookeeper集群之后,应用命令zkServer.sh start后,启动了zookeeper服务,用jps进程发现存在QuorumPeerMain进程,但是查看zookeeper状态的时候,发现报Error contacting service. It is probably not running.错误,提示服务并没有启动,那这是什么原因呢?原因可能有多种造成的,下面我们来分析一下。
29583 1
IDEA常用配置之代码自动格式化删除无用导入
IDEA常用配置之代码自动格式化删除无用导入
1731 1