You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 RcCell은 rc가 0보다 큰 상황에서 드롭되면 패닉을 발생시킵니다. rv6에서는 RcCell을 스택에 배치하는 경우가 없고 한 스레드라도 패닉하면 결국 커널 전체가 패닉하므로 이 설계가 큰 문제가 아닐 수 있지만, 일반적인 경우를 생각해 보면 현재의 RcCell 설계는 메모리 안전성을 깰 수 있어 보입니다.
아래 코드에서 RcCell을 소유한 스레드가 종료되면서 RcCell이 드롭되면 rc가 0이 아니기 때문에 패닉이 발생합니다. 하지만 메인 스레드의 실행에는 영향을 주지 않기 때문에, 이미 드롭된 RcCell을 가리키는 Ref를 dereference할 수 있으며 이는 UB입니다(실제 실행해 보면 segmentaion fault가 발생하며 Miri로도 UB가 탐지됨).
현재
RcCell
은 rc가 0보다 큰 상황에서 드롭되면 패닉을 발생시킵니다. rv6에서는RcCell
을 스택에 배치하는 경우가 없고 한 스레드라도 패닉하면 결국 커널 전체가 패닉하므로 이 설계가 큰 문제가 아닐 수 있지만, 일반적인 경우를 생각해 보면 현재의RcCell
설계는 메모리 안전성을 깰 수 있어 보입니다.아래 코드에서
RcCell
을 소유한 스레드가 종료되면서RcCell
이 드롭되면 rc가 0이 아니기 때문에 패닉이 발생합니다. 하지만 메인 스레드의 실행에는 영향을 주지 않기 때문에, 이미 드롭된RcCell
을 가리키는Ref
를 dereference할 수 있으며 이는 UB입니다(실제 실행해 보면 segmentaion fault가 발생하며 Miri로도 UB가 탐지됨).https://doc.rust-lang.org/std/ops/trait.Drop.html#panics에 따르면
drop
안에서 패닉이 발생하더라도 그 값은 드롭된 것으로 간주되는 것 같습니다.The text was updated successfully, but these errors were encountered: