[Devel] [PATCH vz10] Revert "ve: Replace 0 ppid with 1 (workaround for bad utils)"
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Tue Jul 28 15:24:58 MSK 2026
Reviewed-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
On 7/28/26 09:44, Vasileios Almpanis wrote:
> Reviewed-by: Vasileios Almpanis <vasileios.almpanis at virtuozzo.com>
>
> On 7/27/26 7:35 PM, Konstantin Khorenko wrote:
>> This reverts commit b6a803bdf66bf3da211704060a8f263706c2a364.
>>
>> We won't support so ancient utils which are not ready for getting 0 as a
>> parent PID which actually is a normal situation and means that the
>> parent process is from an outer pidns and is not visible in the
>> current pidns.
>>
>> https://virtuozzo.atlassian.net/browse/VSTOR-139436
>> Feature: procfs: virtualization and visibility configuration
>> Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
>> ---
>> fs/proc/array.c | 5 +++--
>> include/linux/pid.h | 1 -
>> kernel/pid.c | 12 ------------
>> kernel/sys.c | 2 +-
>> 4 files changed, 4 insertions(+), 16 deletions(-)
>>
>> diff --git a/fs/proc/array.c b/fs/proc/array.c
>> index 80b882fe4832..0ff32bee5c50 100644
>> --- a/fs/proc/array.c
>> +++ b/fs/proc/array.c
>> @@ -171,7 +171,8 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
>> unsigned int max_fds = 0;
>> rcu_read_lock();
>> - ppid = pid_alive(p) ? ve_task_ppid_nr_ns(p, ns) : 0;
>> + ppid = pid_alive(p) ?
>> + task_tgid_nr_ns(rcu_dereference(p->real_parent), ns) : 0;
>> tracer = ptrace_parent(p);
>> if (tracer)
>> @@ -551,7 +552,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
>> }
>> sid = task_session_nr_ns(task, ns);
>> - ppid = ve_task_ppid_nr_ns(task, ns);
>> + ppid = task_ppid_nr_ns(task, ns);
>> pgid = task_pgrp_nr_ns(task, ns);
>> unlock_task_sighand(task, &flags);
>> diff --git a/include/linux/pid.h b/include/linux/pid.h
>> index 04f983d477ff..34ef8e692fee 100644
>> --- a/include/linux/pid.h
>> +++ b/include/linux/pid.h
>> @@ -184,7 +184,6 @@ static inline pid_t pid_nr(struct pid *pid)
>> pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns);
>> pid_t pid_vnr(struct pid *pid);
>> -pid_t ve_task_ppid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
>> #define do_each_pid_task(pid, type, task) \
>> do { \
>> diff --git a/kernel/pid.c b/kernel/pid.c
>> index c95e572efd7d..350ca2fbff5c 100644
>> --- a/kernel/pid.c
>> +++ b/kernel/pid.c
>> @@ -517,18 +517,6 @@ pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
>> }
>> EXPORT_SYMBOL(__task_pid_nr_ns);
>> -pid_t ve_task_ppid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
>> -{
>> - pid_t ppid;
>> - rcu_read_lock();
>> - ppid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
>> - rcu_read_unlock();
>> - /* It's dirty hack. Some old utils don't work if ppid is zero*/
>> - if (ppid == 0 && ns->child_reaper != tsk)
>> - ppid = 1;
>> - return ppid;
>> -}
>> -
>> struct pid_namespace *task_active_pid_ns(struct task_struct *tsk)
>> {
>> return ns_of_pid(task_pid(tsk));
>> diff --git a/kernel/sys.c b/kernel/sys.c
>> index 33b05af556fa..80f8b9eb17c3 100644
>> --- a/kernel/sys.c
>> +++ b/kernel/sys.c
>> @@ -990,7 +990,7 @@ SYSCALL_DEFINE0(getppid)
>> int pid;
>> rcu_read_lock();
>> - pid = ve_task_ppid_nr_ns(current, task_active_pid_ns(current));
>> + pid = task_tgid_vnr(rcu_dereference(current->real_parent));
>> rcu_read_unlock();
>> return pid;
>
--
Best regards, Pavel Tikhomirov
Senior Software Developer, Virtuozzo.
More information about the Devel
mailing list