Hi Eric, On 11/7/21 20:51, Eric W. Biederman wrote: > Manfred Spraul writes: > >> >>> + >>> + /* Guarantee shp lives after task_lock is dropped */ >>> + ipc_getref(&shp->shm_perm); >>> + >> task_lock() doesn't help: As soon as shm_creator is set to NULL, >> IPC_RMID won't acquire task_lock() anymore. >> >> Thus shp can disappear before we arrive at this ipc_getref. >> >> [Yes, I think I have introduced this bug. ] >> >> Corrected version attached. >> >> [...] >> + /* 2) unlink */ >> + list_del_init(&shp->shm_clist); >> + [...] >> + /* >> + * 5) get a reference to the namespace. >> + * The refcount could be already 0. If it is 0, then >> + * the shm objects will be free by free_ipc_work(). >> + */ >> + ns = get_ipc_ns_not_zero(ns); > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Isn't this increment also too late? Doesn't this need to move up > by ipc_rcu_getref while shp is still on the list? Yes, thanks. Updated patch attached. > Assuming the code is running in parallel with shm_exit_ns after removal > from shm_clist shm_destroy can run to completion and shm_exit_ns can > run to completion and the ipc namespace can be freed. > > Eric --     Manfred