• Eric W. Biederman's avatar
    ipc/util: Helpers for making the sysvipc operations pid namespace aware · 03f1fc09
    Eric W. Biederman authored
    Capture the pid namespace when /proc/sysvipc/msg /proc/sysvipc/shm
    and /proc/sysvipc/sem are opened, and make it available through
    the new helper ipc_seq_pid_ns.
    
    This makes it possible to report the pids in these files in the
    pid namespace of the opener of the files.
    
    Implement ipc_update_pid.  A simple impline helper that will only update
    a struct pid pointer if the new value does not equal the old value.  This
    removes the need for wordy code sequences like:
    
    	old = object->pid;
    	object->pid = new;
    	put_pid(old);
    
    and
    
    	old = object->pid;
    	if (old != new) {
    		object->pid = new;
    		put_pid(old);
    	}
    
    Allowing the following to be written instead:
    
    	ipc_update_pid(&object->pid, new);
    
    Which is easier to read and ensures that the pid reference count is
    not touched the old and the new values are the same.  Not touching
    the reference count in this case is important to help avoid issues
    like af_unix experienced, where multiple threads of the same
    process managed to bounce the struct pid between cpu cache lines,
    but updating the pids reference count.
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    03f1fc09
util.c 22.6 KB