已关闭
[Bug-Report|缺陷反馈]: aclnn_nan_median.cpp 200-201行,空指针校验像是校验错了变量,需分析 #5862
liuhanwen8创建于 9月15日关闭于 9月17日
zjl5071
9月15日 评论:
9月15日 评论:
信息来源声明:以下分析基于昇腾知识图谱(ascend.wiki)检索结果与 ops-nn 仓库代码走查。
结论:报告属实。aclnn_nan_median.cpp L201 的空指针校验确实校验错了变量——校验了上游已保证非空的出参 indicesOut,而 ZerosLike 的返回值 indicesOutZero 未被校验,守卫形同虚设。 属低严重度健壮性缺陷:正常路径无影响,l0 算子构建失败路径下 nullptr 会流入后续 ViewCopy。
依据:
- 上游调用链
aclnnNanMedianDimGetWorkspaceSize(L209)→CheckParamsDim(median_common.cpp)第 1 步CheckNotNullDim(self, valuesOut, indicesOut)已对三个指针做空检查(返回ACLNN_ERR_PARAM_NULLPTR),因此进入ExecZeroDimNum时indicesOut必然非空,L201 的CHECK_RET(indicesOut != nullptr, ...)是恒真死检查; - 真正可能为空的是 L200
l0op::ZerosLike(indicesOut, executor)的返回值indicesOutZero(l0 算子构建失败时返回 nullptr)。若其为空,L203l0op::ViewCopy(indicesOutZero, indicesOut, executor)将收到 nullptr 首参——本应在 L201 拦截并返回ACLNN_ERR_INNER_NULLPTR的分支永远不会触发; - 对照同函数的成对模式可确认是笔误:L196-197(
valueCopyResult生成后查空)、L203-204(indicesCopyResult生成后查空)查的都是刚生成的返回值,唯独 L201 查了出参; - 同族
aclnn_median.cpp无ZerosLike调用(标量路径处理不同),该问题仅存在于 nan_median。
修复建议(一行):
auto indicesOutZero = l0op::ZerosLike(indicesOut, executor);
CHECK_RET(indicesOutZero != nullptr, ACLNN_ERR_INNER_NULLPTR);
顺带发现同文件一处错误码不一致(可顺手修):L176-177 对内部 ViewCopy 失败返回 ACLNN_ERR_PARAM_NULLPTR,而同函数 L172 对同类内部失败返回 ACLNN_ERR_INNER_NULLPTR——内部算子失败建议统一 ACLNN_ERR_INNER_NULLPTR,避免用户把内部错误误判为入参传空。
(昇腾知识图谱接入方式:https://gitcode.com/agent0/kg-tools)


9月15日 将 BruceLP 设为负责人
yuning_chen
9月15日 评论:
9月15日 评论:
您好,问题已收到,目前 @BruceLP 正在处理中。


9月17日 关闭了 issue
9月17日 添加了label:resolved
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Describe the current behavior / 问题描述 (Mandatory / 必填)
https://gitcode.com/cann/ops-nn/blob/master/index/nan_median/op_api/aclnn_nan_median.cpp
200-201行,空指针校验是否校验错了变量,需分析
static aclnnStatus ExecZeroDimNum(const aclTensor* self, int64_t dim, aclTensor* valuesOut, aclTensor* indicesOut,
aclOpExecutor* executor)
{
CHECK_RET(CheckDimValue(self, dim), ACLNN_ERR_PARAM_INVALID);
}
Environment Information / 环境信息 (Mandatory / 必填)
白盒检视,不涉及
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
白盒检视,不涉及
Describe the expected behavior / 预期结果 (Mandatory / 必填)
白盒检视,不涉及
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
白盒检视,不涉及
Special notes for this issue/备注 (Optional / 选填)