Re: [RFC v3 7/7] shm: isolate pinned pages when sealing files

From: Andy Lutomirski
Date: Fri Jun 13 2014 - 11:06:59 EST


On Fri, Jun 13, 2014 at 3:36 AM, David Herrmann <dh.herrmann@xxxxxxxxx> wrote:
> When setting SEAL_WRITE, we must make sure nobody has a writable reference
> to the pages (via GUP or similar). We currently check references and wait
> some time for them to be dropped. This, however, might fail for several
> reasons, including:
> - the page is pinned for longer than we wait
> - while we wait, someone takes an already pinned page for read-access
>
> Therefore, this patch introduces page-isolation. When sealing a file with
> SEAL_WRITE, we copy all pages that have an elevated ref-count. The newpage
> is put in place atomically, the old page is detached and left alone. It
> will get reclaimed once the last external user dropped it.
>
> Signed-off-by: David Herrmann <dh.herrmann@xxxxxxxxx>

Won't this have unexpected effects?

Thread 1: start read into mapping backed by fd

Thread 2: SEAL_WRITE

Thread 1: read finishes. now the page doesn't match the sealed page

Is this okay? Or am I missing something?

Are there really things that keep unnecessary writable pins around?

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/