public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
From: gregkh@mini.kroah.org
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
	Serge Hallyn <serue@us.ibm.com>,
	Dave Kleikamp <shaggy@linux.vnet.ibm.com>,
	ecryptfs-devel@lists.launchpad.net,
	Tyler Hicks <tyhicks@linux.vnet.ibm.com>,
	Chuck Ebbert <cebbert@redhat.com>
Subject: [4/8] eCryptfs: Prevent lower dentry from going negative during unlink (CVE-2009-2908)
Date: Fri, 09 Oct 2009 16:21:27 -0700	[thread overview]
Message-ID: <20091009232233.941048286@mini.kroah.org> (raw)
In-Reply-To: <20091009232300.GA403@kroah.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: ecryptfs-prevent-lower-dentry-from-going-negative-during-unlink.patch --]
[-- Type: text/plain, Size: 1845 bytes --]


From: Tyler Hicks <tyhicks@linux.vnet.ibm.com>

commit 9c2d2056647790c5034d722bd24e9d913ebca73c upstream.

When calling vfs_unlink() on the lower dentry, d_delete() turns the
dentry into a negative dentry when the d_count is 1.  This eventually
caused a NULL pointer deref when a read() or write() was done and the
negative dentry's d_inode was dereferenced in
ecryptfs_read_update_atime() or ecryptfs_getxattr().

Placing mutt's tmpdir in an eCryptfs mount is what initially triggered
the oops and I was able to reproduce it with the following sequence:

open("/tmp/upper/foo", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600) = 3
link("/tmp/upper/foo", "/tmp/upper/bar") = 0
unlink("/tmp/upper/foo")                = 0
open("/tmp/upper/bar", O_RDWR|O_CREAT|O_NOFOLLOW, 0600) = 4
unlink("/tmp/upper/bar")                = 0
write(4, "eCryptfs test\n"..., 14 <unfinished ...>
+++ killed by SIGKILL +++

https://bugs.launchpad.net/ecryptfs/+bug/387073

Reported-by: Loïc Minier <loic.minier@canonical.com>
Cc: Serge Hallyn <serue@us.ibm.com>
Cc: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
Cc: ecryptfs-devel@lists.launchpad.net
Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
Cc: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 fs/ecryptfs/inode.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -443,6 +443,7 @@ static int ecryptfs_unlink(struct inode 
 	struct inode *lower_dir_inode = ecryptfs_inode_to_lower(dir);
 	struct dentry *lower_dir_dentry;
 
+	dget(lower_dentry);
 	lower_dir_dentry = lock_parent(lower_dentry);
 	rc = vfs_unlink(lower_dir_inode, lower_dentry);
 	if (rc) {
@@ -456,6 +457,7 @@ static int ecryptfs_unlink(struct inode 
 	d_drop(dentry);
 out_unlock:
 	unlock_dir(lower_dir_dentry);
+	dput(lower_dentry);
 	return rc;
 }
 



  parent reply	other threads:[~2009-10-09 23:27 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20091009232123.464253035@mini.kroah.org>
2009-10-09 23:23 ` [0/8] 2.6.27.37-stable review Greg KH, gregkh
2009-10-09 23:21   ` [1/8] net: Fix wrong sizeof Greg KH, gregkh
2009-10-09 23:21   ` [2/8] x86-64: slightly stream-line 32-bit syscall entry code Greg KH, gregkh
2009-10-09 23:21   ` [3/8] x86: Dont leak 64-bit kernel register values to 32-bit processes Greg KH, gregkh
2009-10-09 23:21   ` Greg KH, gregkh [this message]
2009-10-09 23:21   ` [5/8] x86: Increase MIN_GAP to include randomized stack Greg KH, gregkh
2009-10-09 23:21   ` [6/8] KVM: x86: Disallow hypercalls for guest callers in rings > 0 [CVE-2009-3290] Greg KH, gregkh
2009-10-09 23:21   ` [7/8] [WATCHDOG] hpwdt.c: Add new HP BMC controller Greg KH, gregkh
2009-10-09 23:21   ` [8/8] time: catch xtime_nsec underflows and fix them Greg KH, gregkh

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=20091009232233.941048286@mini.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cebbert@redhat.com \
    --cc=ecryptfs-devel@lists.launchpad.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=serue@us.ibm.com \
    --cc=shaggy@linux.vnet.ibm.com \
    --cc=stable-review@kernel.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tyhicks@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox