All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen Gang <gang.chen@asianux.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	Serge Hallyn <serge.hallyn@canonical.com>,
	"Serge E. Hallyn" <serge@hallyn.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] kernel/pid.c: check pid whether be NULL in __change_pid()
Date: Tue, 08 Oct 2013 05:53:56 +0800	[thread overview]
Message-ID: <52532D74.1060408@asianux.com> (raw)
In-Reply-To: <20131007124319.GA24450@redhat.com>

On 10/07/2013 08:43 PM, Oleg Nesterov wrote:
> On 10/07, Chen Gang wrote:
>>
>> Within __change_pid(), 'new' may be NULL if it comes from detach_pid(),
>> and 'link->pid' also may be NULL ("link->pid = new"), so theoretically,\
>> the original 'link->pid' may be NULL, too.
> 
> I don't really understand this "theoretically",
> 
>> In real world, at least now, all callers which will call detach_pid()
>> or change_pid() will not cause issue,
> 
> Yes,
> 
>> but still recommend to check it
>> in __change_pid() to let itself consistency.
> 
> Why?
> 
> Contrary, I think we should not hide the problem. If __change_pid() is
> called when task->pids[type].pid is already NULL there is something
> seriously wrong.
> 

Hmm... In my opinion, it means need BUG_ON() for original 'link->pid'.

--------------------------------patch begin-----------------------------

[PATCH] kernel/pid.c: add BUG_ON() for "!pid" in __change_pid()

  Within __change_pid(), 'new' may be NULL if it comes from detach_pid(),
  and 'link->pid' also may be NULL ("link->pid = new"), so theoretically,
  the original 'link->pid' may be NULL, too.

  But in real world, all related extern functions always assume "if
  'link->pid' is already NULL, there must be something seriously wrong",
  although __change_pid() can accept parameter 'new' as NULL.

  So in __change_pid(), need add BUG_ON() for it: "it should not happen,
  when it really happen, OS must be continuing blindly, and next will
  cause serious issue".

Signed-off-by: Chen Gang <gang.chen@asianux.com>
---
 kernel/pid.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/kernel/pid.c b/kernel/pid.c
index 9b9a266..8fc87f1 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -396,6 +396,12 @@ static void __change_pid(struct task_struct *task, enum pid_type type,
 	link = &task->pids[type];
 	pid = link->pid;
 
+	/*
+	 * If task->pids[type].pid is already NULL, there must be something
+	 * seriously wrong
+	 */
+	BUG_ON(!pid);
+
 	hlist_del_rcu(&link->node);
 	link->pid = new;
 
-- 
1.7.7.6

--------------------------------patch end-------------------------------

> Oleg.
> 
> 
> 


-- 
Chen Gang

  reply	other threads:[~2013-10-07 21:55 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-07 10:29 [PATCH] kernel/pid.c: check pid whether be NULL in __change_pid() Chen Gang
2013-10-07 12:43 ` Oleg Nesterov
2013-10-07 21:53   ` Chen Gang [this message]
2013-10-08 17:56     ` Oleg Nesterov
2013-10-09  1:03       ` Chen Gang

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=52532D74.1060408@asianux.com \
    --to=gang.chen@asianux.com \
    --cc=akpm@linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=serge.hallyn@canonical.com \
    --cc=serge@hallyn.com \
    /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.