diff options
| author | Dave Airlie <airlied@redhat.com> | 2010-03-31 14:55:14 +1000 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-03-31 14:55:14 +1000 |
| commit | 3595be778d8cb887f0e0575ef0a0c1a094d120bb (patch) | |
| tree | 15671ed8bd3597d2efe13aa57b755c66014acb57 /drivers/base/devtmpfs.c | |
| parent | c414a117c6094c3f86b533f97beaf45ef9075f03 (diff) | |
| parent | 220bf991b0366cc50a94feede3d7341fa5710ee4 (diff) | |
Merge branch 'v2.6.34-rc2' into drm-linus
Diffstat (limited to 'drivers/base/devtmpfs.c')
| -rw-r--r-- | drivers/base/devtmpfs.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index 42ae452b36b0..dac478c6e460 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c @@ -301,6 +301,19 @@ int devtmpfs_delete_node(struct device *dev) if (dentry->d_inode) { err = vfs_getattr(nd.path.mnt, dentry, &stat); if (!err && dev_mynode(dev, dentry->d_inode, &stat)) { + struct iattr newattrs; + /* + * before unlinking this node, reset permissions + * of possible references like hardlinks + */ + newattrs.ia_uid = 0; + newattrs.ia_gid = 0; + newattrs.ia_mode = stat.mode & ~0777; + newattrs.ia_valid = + ATTR_UID|ATTR_GID|ATTR_MODE; + mutex_lock(&dentry->d_inode->i_mutex); + notify_change(dentry, &newattrs); + mutex_unlock(&dentry->d_inode->i_mutex); err = vfs_unlink(nd.path.dentry->d_inode, dentry); if (!err || err == -ENOENT) |
