2002-12-04 23:02:11

by Olaf Dietsche

[permalink] [raw]
Subject: [PATCH] 2.5.50: unused code in link_path_walk()

This patch removes one unnecessary line of code.

Regards, Olaf.

diff -urN a/fs/namei.c b/fs/namei.c
--- a/fs/namei.c Thu Nov 28 20:44:46 2002
+++ b/fs/namei.c Wed Dec 4 23:04:54 2002
@@ -700,7 +700,6 @@
if (this.name[1] != '.')
break;
follow_dotdot(&nd->mnt, &nd->dentry);
- inode = nd->dentry->d_inode;
/* fallthrough */
case 1:
goto return_base;


2002-12-06 16:07:45

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] 2.5.50: unused code in link_path_walk()


@@ -700,7 +700,6 @@
if (this.name[1] != '.')
break;
follow_dotdot(&nd->mnt, &nd->dentry);
- inode = nd->dentry->d_inode;
/* fallthrough */
case 1:
goto return_base;

seems broken to me. if follow_dotdot() changes nd->dentry (can happen!),
inode needs to be changed. look:

inode = nd->dentry->d_inode;
for(;;) {
err = exec_permission_lite(inode);
if (this.name[0] == '.') switch (this.len) {
case 2:
if (this.name[1] != '.')
break;
follow_dotdot(&nd->mnt, &nd->dentry);
inode = nd->dentry->d_inode;
/* fallthrough */
case 1:
continue;
}
}

btw, you should cc linux-fsdevel for patches to the VFS.

--
"It's not Hollywood. War is real, war is primarily not about defeat or
victory, it is about death. I've seen thousands and thousands of dead bodies.
Do you think I want to have an academic debate on this subject?" -- Robert Fisk

2002-12-06 16:46:16

by Olaf Dietsche

[permalink] [raw]
Subject: Re: [PATCH] 2.5.50: unused code in link_path_walk()

Matthew Wilcox <[email protected]> writes:

> @@ -700,7 +700,6 @@
> if (this.name[1] != '.')
> break;
> follow_dotdot(&nd->mnt, &nd->dentry);
> - inode = nd->dentry->d_inode;
> /* fallthrough */
> case 1:
> goto return_base;
>
> seems broken to me. if follow_dotdot() changes nd->dentry (can happen!),
> inode needs to be changed. look:
>
> inode = nd->dentry->d_inode;
> for(;;) {
> err = exec_permission_lite(inode);
> if (this.name[0] == '.') switch (this.len) {
> case 2:
> if (this.name[1] != '.')
> break;
> follow_dotdot(&nd->mnt, &nd->dentry);
> inode = nd->dentry->d_inode;
> /* fallthrough */
> case 1:
> continue;
> }
> }

You looked at the _first_ switch statement. You must go further down
to the _second_ switch. *There*, you don't need this assignment, AFAICS.

> btw, you should cc linux-fsdevel for patches to the VFS.

Thanks for this pointer, I'll spam linux-fsdevel in the future ;-).

Regards, Olaf.