RT-Thread / RT-AK-plugin-stm32

plugin for stm32 of RT-Thread AI Kit
Apache License 2.0
8 stars 7 forks source link

[HUST CSE] [AI] Adjust the null pointer check and access order #16

Closed AD0naldRavenclow closed 1 year ago

AD0naldRavenclow commented 1 year ago

拉取/合并请求描述:(PR description)

[

为什么提交这份PR (why to submit this PR)

在ai_reloc_network.c中ai_reloc_rt_mcu_checking函数中的指针变量bin访问在空指针判断之前进行,存在可能的空指针引用,进而引起程序异常退出。

int ai_reloc_rt_mcu_checking(const struct ai_reloc_bin_hdr *bin)
{
#if defined(AI_RELOC_RT_MCU_CHECKING) && AI_RELOC_RT_MCU_CHECKING == 1
  const uint32_t flags = bin->hdr.flags;
  const uint32_t cpuid = _GET_PART_NUMBER();

  if (!bin || (bin->hdr.magic != AI_RELOC_MAGIC) || (((uintptr_t)bin & 0x3) != 0)) {
#if defined(APP_DEBUG) && APP_DEBUG == 1
    printf("AI RELOC ERROR: Binary is invalid\r\n");
#endif
      return -1;
  }

在此给出文件的详细路径如下: X-CUBE-AI.7.0.0/Middlewares/ST/AI/Reloc/Src/ai_reloc_network.c

在pb_decode.c中问题类似,checkreturn decode_callback_field函数中的指针变量pCallback访问在空指针判断之前进行,存在可能的空指针引用,进而引起程序异常退出。

static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter)
{
    pb_callback_t *pCallback = (pb_callback_t*)iter->pData;

#ifdef PB_OLD_CALLBACK_STYLE
    void *arg = pCallback->arg;
#else
    void **arg = &(pCallback->arg);
#endif

    if (pCallback == NULL || pCallback->funcs.decode == NULL)
        return pb_skip_field(stream, wire_type);

在此给出文件的详细路径如下: X-CUBE-AI.7.0.0/Middlewares/ST/AI/Validation/Src/pb_decode.c

你的解决方案是什么 (what is your solution)

修改顺序,使指针变量先进行空指针判断再进行访问

在什么测试环境下测试通过 (what is the test environment)

ALL ]

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

mysterywolf commented 1 year ago

该问题是MCU厂商HAL库的问题,非RT-Thread代码,我们合并了也没有任何意义,下个版本更新过来,你的修改会被覆盖掉