Hi Ben,
On Thu, Oct 08, 2015 at 02:08:28AM +0100, Ben Hutchings wrote:
> For 2.6.32, the first backport looks wrong:
>
> > --- a/fs/dcache.c
> > +++ b/fs/dcache.c
> > @@ -1910,7 +1910,7 @@ char *__d_path(const struct path *path, struct path
> > *root,
> > struct dentry *dentry = path->dentry;
> > struct vfsmount *vfsmnt = path->mnt;
> > char *end = buffer + buflen;
> > - char *retval;
> > + char *retval, *tail;
> >
> > spin_lock(&vfsmount_lock);
> > prepend(&end, &buflen, "\0", 1);
> > @@ -1923,6 +1923,7 @@ char *__d_path(const struct path *path, struct path
> > *root,
> > /* Get '/' right */
> > retval = end-1;
> > *retval = '/';
> > + tail = end;
>
> So tail points to the null terminator.
>
> > for (;;) {
> > struct dentry * parent;
> > @@ -1930,6 +1931,12 @@ char *__d_path(const struct path *path, struct path
> > *root,
> > if (dentry == root->dentry && vfsmnt == root->mnt)
> > break;
> > if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) {
> > + /* Escaped? */
> > + if (dentry != vfsmnt->mnt_root) {
> > + retval = tail;
> > + *retval = '/';
>
> Now we overwrite the null terminator.
Good catch!
> > + goto out;
> > + }
> > /* Global root? */
> > if (vfsmnt->mnt_parent == vfsmnt) {
> > goto global_root;
>
> Also, nothing inserts the "(unreachable)" string. I've attached my
> version, which deals with both of these.
Thanks, I've queued this one instead!
Willy
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html