Hello Stephan,uvm_deallocate is a wrapper for uvm_unmap. It calls unmap after checking 3 things:
- size is not 0 - address starts at a page. If not, it is rounded - address + size is at the end of a page, otherwise, size is also roundedA thing to look out for here is that unmap takes a pointer to the end while deallocate uses the size instead and it is not possible to set the flags using deallocate.
From what I understand in regard to sys_shmdt (sysv_shm.c), the address in this case cannot be influenced by the user/userland. This would make the checks introduced by deallocate not necessary.
Kind regards Am 13.01.25 um 14:06 schrieb Stephan:
Hello, what is the difference between uvm_unmap() and uvm_deallocate()? It does not become clear to me from what is written in uvm_map(9): uvm_unmap() removes a valid mapping, from start to end, in map map, which must be unlocked. uvm_deallocate() deallocates kernel memory in map map from address start to start + size. uvm_deallocate() is used e.g. in sysv_shm.c, in which case I would have expected uvm_unmap(). Thanks, Stephan