Driver Core: devtmpfs: ignore umask while setting file mode
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
f38506c49d
commit
0092699643
|
@ -156,34 +156,40 @@ int devtmpfs_create_node(struct device *dev)
|
||||||
mode |= S_IFCHR;
|
mode |= S_IFCHR;
|
||||||
|
|
||||||
curr_cred = override_creds(&init_cred);
|
curr_cred = override_creds(&init_cred);
|
||||||
|
|
||||||
err = vfs_path_lookup(dev_mnt->mnt_root, dev_mnt,
|
err = vfs_path_lookup(dev_mnt->mnt_root, dev_mnt,
|
||||||
nodename, LOOKUP_PARENT, &nd);
|
nodename, LOOKUP_PARENT, &nd);
|
||||||
if (err == -ENOENT) {
|
if (err == -ENOENT) {
|
||||||
/* create missing parent directories */
|
|
||||||
create_path(nodename);
|
create_path(nodename);
|
||||||
err = vfs_path_lookup(dev_mnt->mnt_root, dev_mnt,
|
err = vfs_path_lookup(dev_mnt->mnt_root, dev_mnt,
|
||||||
nodename, LOOKUP_PARENT, &nd);
|
nodename, LOOKUP_PARENT, &nd);
|
||||||
if (err)
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
if (err)
|
||||||
|
goto out;
|
||||||
|
|
||||||
dentry = lookup_create(&nd, 0);
|
dentry = lookup_create(&nd, 0);
|
||||||
if (!IS_ERR(dentry)) {
|
if (!IS_ERR(dentry)) {
|
||||||
int umask;
|
|
||||||
|
|
||||||
umask = sys_umask(0000);
|
|
||||||
err = vfs_mknod(nd.path.dentry->d_inode,
|
err = vfs_mknod(nd.path.dentry->d_inode,
|
||||||
dentry, mode, dev->devt);
|
dentry, mode, dev->devt);
|
||||||
sys_umask(umask);
|
if (!err) {
|
||||||
/* mark as kernel created inode */
|
struct iattr newattrs;
|
||||||
if (!err)
|
|
||||||
|
/* fixup possibly umasked mode */
|
||||||
|
newattrs.ia_mode = mode;
|
||||||
|
newattrs.ia_valid = ATTR_MODE;
|
||||||
|
mutex_lock(&dentry->d_inode->i_mutex);
|
||||||
|
notify_change(dentry, &newattrs);
|
||||||
|
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||||
|
|
||||||
|
/* mark as kernel-created inode */
|
||||||
dentry->d_inode->i_private = &dev_mnt;
|
dentry->d_inode->i_private = &dev_mnt;
|
||||||
|
}
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
} else {
|
} else {
|
||||||
err = PTR_ERR(dentry);
|
err = PTR_ERR(dentry);
|
||||||
}
|
}
|
||||||
mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
|
|
||||||
|
|
||||||
|
mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
|
||||||
path_put(&nd.path);
|
path_put(&nd.path);
|
||||||
out:
|
out:
|
||||||
kfree(tmp);
|
kfree(tmp);
|
||||||
|
|
Loading…
Reference in New Issue