The 02/27/2023 14:29, Rick Edgecombe wrote: > For shadow stack enabled vfork(), the parent and child can share the same > shadow stack, like they can share a normal stack. Since the parent is > suspended until the child terminates, the child will not interfere with > the parent while executing as long as it doesn't return from the vfork() > and overwrite up the shadow stack. The child can safely overwrite down > the shadow stack, as the parent can just overwrite this later. So CET does > not add any additional limitations for vfork(). > > Userspace implementing posix vfork() can actually prevent the child from > returning from the vfork() calling function, using CET. Glibc does this > by adjusting the shadow stack pointer in the child, so that the child > receives a #CP if it tries to return from vfork() calling function. this commit message implies there is protection against the vfork child clobbering the parent's shadow stack, but actually the child can INCSSP (or longjmp) and then clobber it. so the glibc code just tries to catch bugs and accidents not a strong security mechanism. i'd skip this paragraph.