首批通过分布式安全可靠测评,为关键业务系统打造
访问不存在的 Package.Cursor 导致 Core
更新时间:2026-06-04 09:56
问题现象
resolve package cursor 时如果包中不存在对应的游标,在 resolve 阶段可能 core 掉。
问题原因
内核代码 BUG,未对返回的 cursor 做 null 值检查。
如下用例:
create or replace package is end;
/
begin open pack.c; end;
/
resolve open.c 时,会把 pack.c 当做包中的 cursor 进行解析,在解析过程中发现包中不存在对应的 cursor,会返回 null,上层未对 cursor 进行空值判断就访问 cursor 中内存,导致 core 掉。
未对返回的 cursor 做 null 值检查。
问题的风险及影响
对于一些非法 procedure 在 resolve 过程中可能 core,主要是针对非法 cursor 的 resolve 过程会 core 掉。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响。
影响的版本
V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V3.2.3 BP6 Hotfix2(oceanbase-3.2.3.3-106020042022120915)、V3.2.3 BP6 Hotfix3(oceanbase-3.2.3.3-106030012022121311)、V3.2.3 BP6 Hotfix4(oceanbase-3.2.3.3-106040022022122222)、V3.2.3 BP6 Hotfix5(oceanbase-3.2.3.3-106050012023051617)、V3.2.3 BP7(oceanbase-3.2.3.3-107000092023011911)及之后版本。
检查 package cursor 的合法性,修改不合法的 cursor。
规避方式
检查 package cursor 的合法性,修改不合法的 cursor。