graphene icon indicating copy to clipboard operation
graphene copied to clipboard

[LibOS,PAL] MAP_SHARED flag is not propagated to PAL

Open dimakuv opened this issue 4 years ago • 6 comments

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.

dimakuv avatar Feb 08 '21 20:02 dimakuv

@mkow You touched that part of code (with all those transformations between flags), could you give your opinion on this issue?

dimakuv avatar Feb 08 '21 20:02 dimakuv

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?

mkow avatar Feb 08 '21 20:02 mkow

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.

boryspoplawski avatar Feb 08 '21 22:02 boryspoplawski

Huh, really? All mappings in PAL API are shared, unless marked as CoW? That doesn't make sense...

mkow avatar Feb 08 '21 22:02 mkow

That's what the current code does ¯\_(ツ)_/¯

boryspoplawski avatar Feb 08 '21 22:02 boryspoplawski

After validating PAL_PROT_WRITECOPY does not work, even on Linux-Pal.

boryspoplawski avatar Feb 08 '21 22:02 boryspoplawski