From aaae45cf91540c53e53329e9276999e4de077fbb Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 6 Jun 2011 19:19:40 -0400 Subject: [PATCH] --- yaml --- r: 253126 b: refs/heads/master c: e6bc45d65df8599fdbae73be9cec4ceed274db53 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/namei.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 3d51495be7c3..5af1a3dbda9c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9054760ff585a7fa436599990b63a585ae89ff4d +refs/heads/master: e6bc45d65df8599fdbae73be9cec4ceed274db53 diff --git a/trunk/fs/namei.c b/trunk/fs/namei.c index e2e4e8d032ee..9802345df5e7 100644 --- a/trunk/fs/namei.c +++ b/trunk/fs/namei.c @@ -2624,6 +2624,10 @@ static long do_rmdir(int dfd, const char __user *pathname) error = PTR_ERR(dentry); if (IS_ERR(dentry)) goto exit2; + if (!dentry->d_inode) { + error = -ENOENT; + goto exit3; + } error = mnt_want_write(nd.path.mnt); if (error) goto exit3; @@ -2709,11 +2713,10 @@ static long do_unlinkat(int dfd, const char __user *pathname) error = PTR_ERR(dentry); if (!IS_ERR(dentry)) { /* Why not before? Because we want correct error value */ - if (nd.last.name[nd.last.len]) - goto slashes; inode = dentry->d_inode; - if (inode) - ihold(inode); + if (nd.last.name[nd.last.len] || !inode) + goto slashes; + ihold(inode); error = mnt_want_write(nd.path.mnt); if (error) goto exit2;