Linux 커널에서는 다음 취약점이 해결되었습니다. accel/ethosu: 초기화되지 않은 길이의 DMA 명령 거부 cmd_state_init()는 memset(0xff)으로 명령 상태를 초기화합니다. 설정 누락을 알리기 위해 U64_MAX에 dma->len을 남겨 둡니다. 유일한 세터 NPU_SET_DMA0_LEN입니다. 사용자 공간에서 이 명령을 생략하고 문제가 발생하는 경우 NPU_OP_DMA_START, dma->len은 U64_MAX로 유지됩니다. dma_length()에서 U64_MAX에 추가된 양의 보폭은 작은 크기로 래핑됩니다. 가치. size0 == 1이면 check_mul_overflow()는 트라이하지 않습니다.
Linux 커널에서는 다음 취약점이 해결되었습니다.
accel/ethosu: 초기화되지 않은 길이의 DMA 명령 거부
cmd_state_init()는 memset(0xff)으로 명령 상태를 초기화합니다. 설정 누락을 알리기 위해 U64_MAX에 dma->len을 남겨 둡니다. 유일한 세터 NPU_SET_DMA0_LEN입니다. 사용자 공간에서 이 명령을 생략하고 문제가 발생하는 경우 NPU_OP_DMA_START, dma->len은 U64_MAX로 유지됩니다.
dma_length()에서 U64_MAX에 추가된 양의 보폭은 작은 크기로 래핑됩니다. 가치. size0 == 1이면 check_mul_overflow()가 트리거되지 않으며 dma_length()는 U64_MAX 대신 0을 반환합니다. 발신자의 U64_MAX 확인 그런 다음 통과하고, Region_size[]는 0으로 유지되고, 경계는 체크인됩니다. etosu_job.c가 우회되어 하드웨어가 오래된 DMA를 실행할 수 있습니다. 실제 주소.
dma_length() 시작 부분에서 U64_MAX를 확인하여 문제를 해결하세요. 전체에서 사용되는 센티넬 값과 일치하는 산술 초기화되지 않은 필드를 감지하는 드라이버입니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 88.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 88.00 |
VPI 공식 vpi-v1 기준