# HG changeset patch # User Paul Boddie # Date 1617744003 -7200 # Node ID eda3afa224509a7774da7f6f600bf5286b585092 # Parent 866eb2a8fc8bb82cd9ad9552c9a6c30417c67174 Fixed conversion to map-compatible flags, also introducing basic enforcement of access permissions. diff -r 866eb2a8fc8b -r eda3afa22450 files/file_paging.cc --- a/files/file_paging.cc Tue Apr 06 00:14:00 2021 +0200 +++ b/files/file_paging.cc Tue Apr 06 23:20:03 2021 +0200 @@ -40,11 +40,11 @@ -/* Convert opening flags to paging flags. */ +/* Convert opening flags to map-compatible paging flags. */ flags_t FilePaging::get_flags(flags_t flags) { - return flags & (O_WRONLY | O_RDWR) ? L4_FPAGE_RW : L4_FPAGE_RO; + return flags & (O_WRONLY | O_RDWR) ? L4RE_DS_MAP_FLAG_RW : L4RE_DS_MAP_FLAG_RO; } diff -r 866eb2a8fc8b -r eda3afa22450 generic/pager.cc --- a/generic/pager.cc Tue Apr 06 00:14:00 2021 +0200 +++ b/generic/pager.cc Tue Apr 06 23:20:03 2021 +0200 @@ -65,6 +65,12 @@ { offset_t file_offset = _start + offset; offset_t max_offset = _start + _size; + + /* Prevent access beyond that defined by the pager. */ + + if (flags & ~_flags) + return -L4_EACCESS; + Flexpage *flexpage = _mapper->get(file_offset, flags); /* Issue the flexpage via the IPC system. */ @@ -73,14 +79,14 @@ flags, region); if (!err) - err = complete_Dataspace_map(*region); + err = complete_Dataspace_map(*region); /* After the flexpage is issued, it is queued for future reuse. */ _mapper->queue(flexpage); if (err) - return err; + return err; return IPC_MESSAGE_SENT; } diff -r 866eb2a8fc8b -r eda3afa22450 pipes/pipe_pager.cc --- a/pipes/pipe_pager.cc Tue Apr 06 00:14:00 2021 +0200 +++ b/pipes/pipe_pager.cc Tue Apr 06 23:20:03 2021 +0200 @@ -8,7 +8,7 @@ done by requesting a region. */ PipePager::PipePager(PipePaging *paging, bool writing) -: Pager(NULL, writing ? L4_FPAGE_RW : L4_FPAGE_RO), +: Pager(NULL, writing ? L4RE_DS_MAP_FLAG_RW : L4RE_DS_MAP_FLAG_RO), _paging(paging), _writing(writing) { /* Initialise the size of the paged region. */