lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 3 Jan 2014 12:51:51 +0000
From:	Chris Wilson <chris@...is-wilson.co.uk>
To:	Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>
Cc:	ben@...dawsk.net, daniel.vetter@...ll.ch,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH] drm/i915: Fix refcount leak and possible NULL
 pointerdereference.

On Fri, Jan 03, 2014 at 08:42:18PM +0900, Tetsuo Handa wrote:
> Chris Wilson wrote:
> > On Tue, Dec 24, 2013 at 08:50:23PM +0900, Tetsuo Handa wrote:
> > > >From 482be6384379072eb4c0d45d0ab8a25df4f59ed7 Mon Sep 17 00:00:00 2001
> > > From: Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>
> > > Date: Tue, 24 Dec 2013 18:04:14 +0900
> > > Subject: [PATCH] drm/i915: Fix refcount leak and possible NULL pointer dereference.
> > > 
> > > Since get_pid_task() grabs a reference on the task_struct, we have to drop the
> > > refcount after reading that task's comm name. Also, directly reading like
> > > get_pid_task()->comm can trigger an oops when get_pid_task() returned NULL.
> > 
> > The second issue is moot as file itself cannot exist if the task_struct
> > is NULL, and the task_struct cannot be destroyed until we finish the
> > function. The simpler fix would appear to be s/get_pid_task/pid_task/
> 
> If I understand correctly, priv->pid = get_pid(task_pid(current)); in
> drm_open_helper() grabs a reference on "struct pid" before adding to
> &dev->filelist, and put_pid(file_priv->pid); in drm_release() releases that
> reference after removing from &dev->filelist.
> 
> So, you meant that mutex_lock_interruptible(&dev->struct_mutex); in
> i915_gem_object_info() prevents drm_release() from calling put_pid() ?

Right, my understanding is that since we take the struct_mutex during
release of the filp (and across this list walker) that is sufficient
serialisation to prevent the task struct from disappearing from
underneath us.
 
> Then, this file->pid in &dev->filelist keeps at least one reference.
> OK. Updated patch follows.

Looks good to me, and the comment is great.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ