Skip to contentSkip to conversation

2.5.50: unused code in link_path_walk()

PATCH Matthew Wilcox 2 participants 2 messages Dec 6, 2002 VFS

lore
Share & tools
lore
#0 lore raw

@@ -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.

Signature · 3 lines
"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
#1 lore raw
Quoted 12 lines · Matthew Wilcox
(quoted diff) +0 -1
@@ -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:

Quoted 14 lines
        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.

Quoted 1 line

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.