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
현재 Braneded는 여러 개의 Kernel/Procs/WaitGuard 객체를 구분하기 위해 사용중인데, 사실 더 일반적으로 유용할만한 use case로는 이미 하나의 Kernel에 여러 개 존재하는 객체 (ex: Disk)를 구분하기 위해 사용할 때가 아닐까 싶습니다.
예로, Bcache의 invariant는, Buf는 항상 disk block의 latest 데이터를 가지고 있다는 것인데, rv6내에 여러 개의 Disk가 존재할 수 있는 경우 다음 method이 위 invariant를 깨트릴 수 있습니다.
위 method는 Buf가 주어진 self로부터 왔음을 확인하지 않으므로, Disk로부터 Buf를 받은 후, 다른 Disk로부터 받은 Buf로 그 Disk의 해당 부분을 덮어쓰게되면 invariant가 깨질 수 있게 됩니다.
이러면, functionality 및 consistency 등의 면에서는 당연히 문제가 발생할 수 있게 됩니다.
memory safety bug는 현재로서는 없는 것 같습니다만, 이는 ufs내의 assert! 덕분이며, 이를 없애게 되면 disk가 초기에는 문제가 없었다고 가정하더라도 후에 UB가 일어나게 할 수는 있습니다. (예시; 참고로 위 예시의 assert!는 xv6에서는 존재하지 않는 것 같습니다.)
The text was updated successfully, but these errors were encountered:
현재
Braneded
는 여러 개의Kernel
/Procs
/WaitGuard
객체를 구분하기 위해 사용중인데, 사실 더 일반적으로 유용할만한 use case로는 이미 하나의Kernel
에 여러 개 존재하는 객체 (ex:Disk
)를 구분하기 위해 사용할 때가 아닐까 싶습니다.예로,
Bcache
의 invariant는,Buf
는 항상 disk block의 latest 데이터를 가지고 있다는 것인데, rv6내에 여러 개의Disk
가 존재할 수 있는 경우 다음 method이 위 invariant를 깨트릴 수 있습니다.위 method는
Buf
가 주어진self
로부터 왔음을 확인하지 않으므로,Disk
로부터Buf
를 받은 후, 다른Disk
로부터 받은Buf
로 그Disk
의 해당 부분을 덮어쓰게되면 invariant가 깨질 수 있게 됩니다.ufs
내의assert!
덕분이며, 이를 없애게 되면 disk가 초기에는 문제가 없었다고 가정하더라도 후에 UB가 일어나게 할 수는 있습니다. (예시; 참고로 위 예시의assert!
는 xv6에서는 존재하지 않는 것 같습니다.)The text was updated successfully, but these errors were encountered: