已开启
[ArkWeb][安全][上游社区漏洞修复][BUG-485622239] 修复Vulkan纹理尺寸溢出 #458
。创建于 7 天前
[ArkWeb][安全][上游社区漏洞修复][BUG-485622239] 修复Vulkan纹理尺寸溢出 #458
已开启
合并受阻
openharmony_ci
7 天前 评论:
7 天前 评论:
感谢提交 Pull Requests!
Thanks for submitting a pull request.


7 天前 添加了label:dco检查成功
7 天前 修改了pull request 的描述
修复说明
本次修复针对 Bug 485622239,解决 ANGLE Vulkan 后端纹理尺寸计算中的 32 位整数溢出问题。
关键代码变更
文件:
src/libANGLE/renderer/vulkan/TextureVk.cpp原代码将宽、高、深、像素字节数与层数一次性相乘:
size_t dstBufferSize = sourceBox.width * sourceBox.height * sourceBox.depth * dstFormat.pixelBytes * layerCount;以上乘法的中间结果以 32 位有符号整数计算,当纹理尺寸接近规格上限时可能发生溢出,造成缓冲分配不足与内存越界风险。
修复后改为
size_t分步乘法,并新增编译期断言:static_assert(gl::IMPLEMENTATION_MAX_2D_TEXTURE_SIZE * gl::IMPLEMENTATION_MAX_2D_TEXTURE_SIZE < std::numeric_limits<int32_t>::max()); size_t dstBufferSize = sourceBox.width * sourceBox.height; static_assert(gl::IMPLEMENTATION_MAX_3D_TEXTURE_SIZE * gl::IMPLEMENTATION_MAX_2D_ARRAY_TEXTURE_LAYERS * 16 < std::numeric_limits<int32_t>::max()); dstBufferSize *= sourceBox.depth * dstFormat.pixelBytes * layerCount;代码逻辑说明:先以
size_t类型保存宽×高的结果,再累乘深度、像素字节数与层数,全程使用 64 位运算避免中间溢出;两个static_assert在编译期验证规格上限下的乘积不会超过 32 位有符号整数范围。影响评估
TextureVk::stageSubresourceUpdateAndGetData相关逻辑)测试情况
static_assert已通过编译验证,确认规格上限乘积均在int32_t范围内关联Issue
Issue #368(BUG-485622239)
Signed-off-by: xiuwangliu liuxingwang10@h-partners.com
关联Issue: #368
Closes #368