CVE-2023-52813 in Linux
요약
\~에 의해 VulDB • 2026. 05. 22.
리눅스 커널에서 다음 취약점이 해결되었습니다:
crypto: pcrypt - PADATA_RESET 관련 hungtask 수정
다음과 같은 test_aead_vec_cfg 내 hungtask 버그를 발견했습니다:
INFO: task cryptomgr_test:391009 blocked for more than 120 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Call trace: __switch_to+0x98/0xe0 __schedule+0x6c4/0xf40 schedule+0xd8/0x1b4 schedule_timeout+0x474/0x560 wait_for_common+0x368/0x4e0 wait_for_completion+0x20/0x30 wait_for_completion+0x20/0x30 test_aead_vec_cfg+0xab4/0xd50 test_aead+0x144/0x1f0 alg_test_aead+0xd8/0x1e0 alg_test+0x634/0x890 cryptomgr_test+0x40/0x70 kthread+0x1e0/0x220 ret_from_fork+0x10/0x18 Kernel panic - not syncing: hung_task: blocked tasks
padata_do_parallel의 경우, 반환 에러가 0 또는 -EBUSY일 때 test_aead_vec_cfg에서 wait_for_completion(&wait->completion)를 호출합니다. 정상적인 경우, pcrypt_aead_serial에서 aead_request_complete()가 호출되며 padata_do_parallel의 반환 에러는 0이 됩니다. 그러나 pinst->flags가 PADATA_RESET일 경우, padata_do_parallel의 반환 에러는 -EBUSY가 되며 aead_request_complete()가 호출되지 않습니다. 따라서 test_aead_vec_cfg는 wait_for_completion(&wait->completion)에서 멈추게 되어 hungtask가 발생합니다.
문제는 다음과 같이 발생합니다: (padata_do_parallel) | rcu_read_lock_bh(); | err = -EINVAL; | (padata_replace) | pinst->flags |= PADATA_RESET; err = -EBUSY | if (pinst->flags & PADATA_RESET) | rcu_read_unlock_bh() | return err
이 문제를 해결하기 위해 반환 에러 -EBUSY를 -EAGAIN으로 대체했습니다. 이는 병렬 데이터가 변경 중임을 의미하며, 호출자는 이를 다시 호출해야 합니다.
v3: 재시도 제거 및 반환 에러만 변경. v2: hungtask를 해결하기 위해 pcrypt_aead_encrypt 및 pcrypt_aead_decrypt에 padata_try_do_parallel() 도입.
If you want to get best quality of vulnerability data, you may have to visit VulDB.