mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
fs/lock: skip lock owner pid translation in case we are in init_pid_ns
If the flock owner process is dead and its pid has been already freed, pid translation won't work, but we still want to show flock owner pid number when expecting /proc/$PID/fdinfo/$FD in init pidns. Reproducer: process A process A1 process A2 fork()---------> exit() open() flock() fork()---------> exit() sleep() Before the patch: ================ (root@vz7)/: cat /proc/${PID_A2}/fdinfo/3 pos: 4 flags: 02100002 mnt_id: 257 lock: (root@vz7)/: After the patch: =============== (root@vz7)/:cat /proc/${PID_A2}/fdinfo/3 pos: 4 flags: 02100002 mnt_id: 295 lock: 1: FLOCK ADVISORY WRITE ${PID_A1} b6:f8a61:529946 0 EOF Fixes: 9d5b86ac13c5 ("fs/locks: Remove fl_nspid and use fs-specific l_pid for remote locks") Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com> Acked-by: Andrey Vagin <avagin@openvz.org> Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Jeff Layton <jlayton@redhat.com>
This commit is contained in:
parent
2fe7325a0e
commit
77fdfb139c
@ -2074,6 +2074,13 @@ static pid_t locks_translate_pid(struct file_lock *fl, struct pid_namespace *ns)
|
||||
return -1;
|
||||
if (IS_REMOTELCK(fl))
|
||||
return fl->fl_pid;
|
||||
/*
|
||||
* If the flock owner process is dead and its pid has been already
|
||||
* freed, the translation below won't work, but we still want to show
|
||||
* flock owner pid number in init pidns.
|
||||
*/
|
||||
if (ns == &init_pid_ns)
|
||||
return (pid_t)fl->fl_pid;
|
||||
|
||||
rcu_read_lock();
|
||||
pid = find_pid_ns(fl->fl_pid, &init_pid_ns);
|
||||
|
Loading…
x
Reference in New Issue
Block a user