Messages in this thread | | | Date | Fri, 11 Dec 2015 12:50:23 -0800 | Subject | Re: [PATCH] devpts: Sensible /dev/ptmx & force newinstance | From | Linus Torvalds <> |
| |
On Fri, Dec 11, 2015 at 11:40 AM, Eric W. Biederman <ebiederm@xmission.com> wrote: > > > +struct inode *devpts_ptmx(struct inode *inode, struct file *filp) > +{ > +#ifdef CONFIG_DEVPTS_MULTIPLE_INSTANCES > + struct path path, old; > + struct super_block *sb; > + struct dentry *root; > + > + if (inode->i_sb->s_magic == DEVPTS_SUPER_MAGIC) > + return inode; > + > + old = filp->f_path; > + path = old; > + path_get(&path); > + if (kern_path_pts(&path)) { > + path_put(&path); > + return ERR_PTR(-EINVAL); > + }
So this is definitely crap.
You can't return an error. You should just return the old inode. If somebody doesn't have /dev/pts/ mounted there, the legacy /dev/ptmx should still work, not return ENOENT or whatever.
> + sb = path.mnt->mnt_sb; > + if (sb->s_magic != DEVPTS_SUPER_MAGIC) { > + path_put(&path); > + return ERR_PTR(-EINVAL); > + }
Same deal. Returning an error is wrong.
Of, alternatively, make the caller not consider an error an error, but fall back to the old behavior in the caller.
> + /* > + * Update filp with the new path so that userspace can use > + * fstat to know which instance of devpts is open, and so > + * userspace can use readlink /proc/self/fd/NNN to find the > + * path to the devpts filesystem for reporting slave inodes. > + */
Hmm. I'm not 100% convinced about this. Normally we do *not* allow f_path and f_inode to change. I guess this file descriptor hasn't been exposed yet, so it might be ok, but it makes me a bit nervous that this code violates the basic filp rules..
Linus
| |