All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: 高翔 <gaoxiang17@xiaomi.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Xiang Gao <gxxa03070307@gmail.com>,
	"brauner@kernel.org" <brauner@kernel.org>,
	"mjguzik@gmail.com" <mjguzik@gmail.com>,
	"Liam.Howlett@oracle.com" <Liam.Howlett@oracle.com>,
	"joel.granados@kernel.org" <joel.granados@kernel.org>,
	"lorenzo.stoakes@oracle.com" <lorenzo.stoakes@oracle.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] pid: Add a judgment for ns null in pid_nr_ns
Date: Mon, 4 Aug 2025 13:49:01 +0200	[thread overview]
Message-ID: <20250804114900.GA6656@redhat.com> (raw)
In-Reply-To: <80be47cb31d14ffc9f9a7d8d4408ab0a@xiaomi.com>

On 08/04, 高翔 wrote:
>
>     struct task_struct *tsk = current;
>
>     struct task_struct *parent;
>
>     ...
>
>     info->pid = task_pid_vnr(tsk);
>     rcu_read_lock();
>     parent = rcu_dereference(tsk->real_parent);
>     get_task_struct(parent);
>     rcu_read_unlock();
>     info->ppid = task_tgid_vnr(parent);
>     strncpy(info->ptask_name, parent->comm, TASK_COMM_LEN);
>     put_task_struct(parent);

So I guess the kernel crashes when you try to obtain another process's pid, not
the current process's pid. This is was I suspected.

This code is buggy. tsk->real_parent points to nowhere if tsk = current was reaped.
rcu_read_lock() alone can't help. Even get_task_struct(parent) is not safe. And it
is not needed.

You need something like

	info->pid = info->ppid = 0;

	rcu_read_lock();
	if (pid_alive(tsk)) {
		info->pid = task_pid_vnr(tsk);
		info->ppid = task_tgid_vnr(tsk->real_parent);
	}
	rcu_read_unlock();

Oleg.

> 
> 
> 
> ________________________________
> 发件人: Oleg Nesterov <oleg@redhat.com>
> 发送时间: 2025年8月2日 16:45:26
> 收件人: 高翔
> 抄送: Al Viro; Xiang Gao; brauner@kernel.org; mjguzik@gmail.com; Liam.Howlett@oracle.com; joel.granados@kernel.org; lorenzo.stoakes@oracle.com; linux-kernel@vger.kernel.org
> 主题: Re: 答复: [External Mail]Re: [PATCH] pid: Add a judgment for ns null in pid_nr_ns
> 
> [外部邮件] 此邮件来源于小米公司外部,请谨慎处理。若对邮件安全性存疑,请将邮件转发给misec@xiaomi.com进行反馈
> 
> On 08/02, 高翔 wrote:
> >
> > Obtain the current process pid in the ufs compl command. This scene is possible.
> 
> How exactly your module tries to obtain the current process pid?
> 
> task_pid_vnr(current) should work and return 0 if the task was reaped.
> 
> Oleg.
> 


  parent reply	other threads:[~2025-08-04 11:50 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-02  2:21 [PATCH] pid: Add a judgment for ns null in pid_nr_ns Xiang Gao
2025-08-02  2:25 ` Al Viro
2025-08-02  8:43   ` Oleg Nesterov
     [not found]   ` <15b18541f37447dd8d5dbd8012662f67@xiaomi.com>
2025-08-02  5:52     ` 答复: [External Mail]Re: " Al Viro
2025-08-02  5:54       ` Al Viro
     [not found]       ` <c7968242db914979953277226fe55fc8@xiaomi.com>
2025-08-02  8:04         ` 答复: " Al Viro
2025-08-02  8:45     ` Oleg Nesterov
     [not found]       ` <80be47cb31d14ffc9f9a7d8d4408ab0a@xiaomi.com>
2025-08-04 11:49         ` Oleg Nesterov [this message]
2025-08-04 12:14           ` Christian Brauner
2025-08-04 12:44             ` Oleg Nesterov
2025-08-05 12:43               ` Oleg Nesterov
2025-08-08 14:56                 ` Christian Brauner
2025-08-10 15:42                   ` Oleg Nesterov
     [not found]             ` <aa5272ddcec944e2a35ca7104f6a86bf@xiaomi.com>
2025-08-05 19:43               ` 答复: [External Mail]Re: " Oleg Nesterov
2025-08-08 14:54                 ` Christian Brauner
2025-08-10 17:36 ` [PATCH 1/4] pid: make __task_pid_nr_ns(ns => NULL) safe for zombie callers Oleg Nesterov
2025-08-10 17:36 ` [PATCH 2/4] pid: introduce task_ppid_vnr() Oleg Nesterov
2025-08-10 17:36 ` [PATCH 3/4] pid: change bacct_add_tsk() to use task_ppid_nr_ns() Oleg Nesterov
2025-08-10 17:36 ` [PATCH 4/4] pid: change task_state() " Oleg Nesterov
2025-08-19 11:40 ` [PATCH] pid: Add a judgment for ns null in pid_nr_ns Christian Brauner
2025-08-19 14:25   ` Oleg Nesterov
2025-09-01 15:30     ` Oleg Nesterov
2025-09-01 15:44       ` Mateusz Guzik
2025-09-01 15:55         ` Mateusz Guzik
2025-09-02 14:37           ` Oleg Nesterov
2026-01-04  7:25 ` Qing Wang
  -- strict thread matches above, loose matches on Subject: below --
2025-02-11  6:17 Xiang Gao
2025-02-11  6:49 ` Baoquan He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250804114900.GA6656@redhat.com \
    --to=oleg@redhat.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=brauner@kernel.org \
    --cc=gaoxiang17@xiaomi.com \
    --cc=gxxa03070307@gmail.com \
    --cc=joel.granados@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=mjguzik@gmail.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.