rv6 icon indicating copy to clipboard operation
rv6 copied to clipboard

`AllocatedPipe::alloc()`: check whether stack is used to fill `*ptr`

Open anemoneflower opened this issue 4 years ago • 2 comments

https://github.com/kaist-cp/rv6/blob/5bbd4f03298d5c6d011b55f59ed0b8035acdb392/kernel-rs/src/pipe.rs#L116-L129

anemoneflower avatar Jan 27 '21 07:01 anemoneflower

https://github.com/kaist-cp/rv6/commit/030fea533c928b69a714a8cf05113724c790b79d 에서 김정우님이 추가하신 TODO로 보이는데, 무슨 뜻인지 확실하지는 않지만 "Pipe의 크기가 page 1개 크기보다도 커서 다른 page나 stack page를 덮어써버리는 게 아닌지 확인해봐야 한다."라는 뜻이 아닐까 조심스럽게 추측해봅니다.

travis1829 avatar Jan 28 '21 07:01 travis1829

제가 @efenniht 과 대화하면서 이해한 바로는 다음과 같습니다.

현재 구현은 Pipe를 만든 뒤 이를 ptr에 넣으므로 Pipe가 먼저 스택에 만들어진 뒤 ptr이 가리키는 주소로 복사될 수 있습니다. 만약 실제로 실행 중에 이런 일이 일어난다면 Pipe가 꽤 크기 때문에 스택이 넘칠 가능성이 있습니다. 그러나 지금은 컴파일러가 잘 최적화해 주기 때문에, 실행 중에 스택에 만들어지고 복사되는 것이 아니라 바로 ptr이 가리키는 곳에 Pipe가 만들어져 문제가 발생하지 않는 것으로 보입니다. 이는 Rust의 semantics가 아니라 컴파일러의 최적화에 의존하는 것이므로 이 코드가 스택에 문제를 일으키지 않는지 확인하면서 리팩토링해야 합니다.

Medowhill avatar Jan 28 '21 14:01 Medowhill