core/utils/common_check.cpp:93,AsdTensorInvalidShapeCheck():
AsdTensorInvalidShapeCheck()
CHECK_STATUS_WITH_ACL_RETURN(aclGetStorageShape(tensor, &storageDims, &storageDimsNum), "aclGetStorageShape"); if (*storageDims <= 0) { // <- 未判空直接解引用
两个问题:
aclGetStorageShape
storageDims == nullptr
*storageDims <= 0
该函数被 SIP_OP_CHECK_INVALID_SHAPE 宏广泛用于 BLAS 算子入参校验(如 core/blas/cgemm.cpp 的 CgemmShapeCheck),0 维张量一旦传入即触发崩溃。
SIP_OP_CHECK_INVALID_SHAPE
CgemmShapeCheck
仅异常输入(0 维/含非法维度的张量)触发;触发即崩溃。修复是在崩溃路径上加提前返回,不存在依赖崩溃行为的正常业务,无回归风险。
解引用前增加防护:
if (storageDims == nullptr || storageDimsNum == 0) { return AsdSip::ErrorType::ACL_ERROR_INVALID_PARAM; }
并考虑遍历全部维度校验 > 0。建议补 1 条 0 维张量负向 UT。
> 0
感谢您的反馈,当前@east_yang跟踪处理中。
Describe the current behavior / 问题描述
core/utils/common_check.cpp:93,
AsdTensorInvalidShapeCheck():CHECK_STATUS_WITH_ACL_RETURN(aclGetStorageShape(tensor, &storageDims, &storageDimsNum), "aclGetStorageShape"); if (*storageDims <= 0) { // <- 未判空直接解引用两个问题:
aclGetStorageShape可能返回storageDims == nullptr,此处直接解引用导致进程崩溃;*storageDims <= 0,后续维度为负/零时未校验,函数名承诺的 "InvalidShape" 检查不完整。该函数被
SIP_OP_CHECK_INVALID_SHAPE宏广泛用于 BLAS 算子入参校验(如 core/blas/cgemm.cpp 的CgemmShapeCheck),0 维张量一旦传入即触发崩溃。Impact / 影响
仅异常输入(0 维/含非法维度的张量)触发;触发即崩溃。修复是在崩溃路径上加提前返回,不存在依赖崩溃行为的正常业务,无回归风险。
Suggested fix / 修复建议
解引用前增加防护:
if (storageDims == nullptr || storageDimsNum == 0) { return AsdSip::ErrorType::ACL_ERROR_INVALID_PARAM; }并考虑遍历全部维度校验
> 0。建议补 1 条 0 维张量负向 UT。Environment / 环境信息