graphene
graphene copied to clipboard
[LibOS,PAL] MAP_SHARED flag is not propagated to PAL
Description of the problem
During shim_do_mmap(), there could be a combination mmap(..., MAP_SHARED, ...) which is not possible on Linux-SGX PAL. However, the Linux-SGX PAL layer ignores this flag (which is transformed into !PAL_PROT_WRITECOPY via LINUX_PROT_TO_PAL()).
It seems that the simple fix is to check that prot doesn't contain PAL_PROT_WRITECOPY inside Linux-SGX's _DkVirtualMemoryAlloc() and fail with some PAL error.
It looks like the same situation happens in Linux PAL: the mapping is created as MAP_PRIVATE (never MAP_SHARED) always.
@mkow You touched that part of code (with all those transformations between flags), could you give your opinion on this issue?
Seems that PAL API doesn't even have a notion of shared memory? And I don't think it should, this concept is (I think) not compatible with the rest of this API.
So, should we just error out on MAP_SHARED in LibOS?
It does: PAL_PROT_WRITECOPY means CoW (translates to MAP_PRIVATE on Linux), lack of it means shared memory (MAP_SHARED). The convention might be questionable, but the feature is supported atm.
Huh, really? All mappings in PAL API are shared, unless marked as CoW? That doesn't make sense...
That's what the current code does ¯\_(ツ)_/¯
After validating PAL_PROT_WRITECOPY does not work, even on Linux-Pal.