A página do manual descreve o significado dos VmFlags:
The "VmFlags" line (available since Linux 3.8) represents
the kernel flags associated with the virtual memory area,
encoded using the following two-letter codes:
rd - readable
wr - writable
ex - executable
sh - shared
mr - may read
mw - may write
me - may execute
ms - may share
Qual é a diferença entre "readable" e "may read"? Parecem equivalentes. O mesmo para as versões write/executable/share.
As declarações
include/linux/mm.h
esclarecem ligeiramente o seu propósito:Os sinalizadores representam diferentes pedaços de informação:
VM_READ
significa que uma página é legível,VM_MAYREAD
significa que ela tem permissão para ser legível. Uma página pode ser mapeada sem um dos sinalizadoresVM_READ
/VM_WRITE
etc., mas isso não indica se o sinalizador pode ser alterado.Ter os dois conjuntos de sinalizadores significa que as permissões podem ser definidas quando uma página é alocada (por código que sabe quais são as permissões apropriadas), e então o código que manipula as configurações reais não precisa de conhecimento específico do domínio sobre as permissões, ele só precisa verificar os
VM_MAY
sinalizadores. Semprotect
for solicitado a mapear uma páginaPROT_WRITE
, ele só precisa verificar seVM_MAYWRITE
está definido como .A capacidade de mapear páginas como não legíveis e impedir que elas se tornem legíveis pode parecer surpreendente, mas é útil em algumas circunstâncias; por exemplo, páginas de gatilho podem ser mapeadas somente para gravação e nunca devem ser lidas.