Illegal memory will be touch if SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3 (41) exceed the size of structure sdma_script_start_addrs(40), thus cause memory corrupt such as slob block header so that kernel trap into while() loop forever in slob_free(). Please refer to below code piece in imx-sdma.c: for (i = 0; i < sdma->script_number; i++) if (addr_arr[i] > 0) saddr_arr[i] = addr_arr[i]; /* memory corrupt here */ That issue was brought by commit a572460be9cf ("dmaengine: imx-sdma: Add support for version 3 firmware") because SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3 (38->41 3 scripts added) not align with script number added in sdma_script_start_addrs(2 scripts).
Showing the changes to include/linux (1 of 2 files). Show all
Unified · Split
| @@ -51,7 +51,10 @@ struct sdma_script_start_addrs { · 50 unmodified lines | ||
| 51 | 51 | /* End of v2 array */ |
| 52 | 52 | s32 zcanfd_2_mcu_addr; |
| 53 | 53 | s32 zqspi_2_mcu_addr; |
| 54 | + s32 mcu_2_ecspi_addr; | |
| 54 | 55 | /* End of v3 array */ |
| 56 | + s32 mcu_2_zqspi_addr; | |
| 57 | + /* End of v4 array */ | |
| 55 | 58 | }; |
| 56 | 59 | |
| 57 | 60 | /** |