On Mon, 2023-01-23 at 11:45 +0100, Florian Weimer wrote: > * David Hildenbrand: > > > On 19.01.23 22:23, Rick Edgecombe wrote: > > > The x86 Control-flow Enforcement Technology (CET) feature > > > includes a new > > > type of memory called shadow stack. This shadow stack memory has > > > some > > > unusual properties, which requires some core mm changes to > > > function > > > properly. > > > Shadow stack memory is writable only in very specific, controlled > > > ways. > > > However, since it is writable, the kernel treats it as such. As a > > > result > > > there remain many ways for userspace to trigger the kernel to > > > write to > > > shadow stack's via get_user_pages(, FOLL_WRITE) operations. To > > > make this a > > > little less exposed, block writable GUPs for shadow stack VMAs. > > > Still allow FOLL_FORCE to write through shadow stack protections, > > > as > > > it > > > does for read-only protections. > > > > So an app can simply modify the shadow stack itself by writing to > > /proc/self/mem ? > > > > Is that really intended? Looks like security hole to me at first > > sight, but maybe I am missing something important. > > Isn't it possible to overwrite GOT pointers using the same vector? > So I think it's merely reflecting the status quo. There was some debate on this. /proc/self/mem can currently write through read-only memory which protects executable code. So should shadow stack get separate rules? Is ROP a worry when you can overwrite executable code? The consensus seemed to lean towards not making special rules for this case, and there was some discussion that /proc/self/mem should maybe be hardened generally.