mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 05:06:29 +00:00
__d_alloc(): treat NULL name as QSTR("/", 1)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
322ea0bbf3
commit
798434bda3
13
fs/dcache.c
13
fs/dcache.c
@ -1558,7 +1558,11 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
|
|||||||
* be overwriting an internal NUL character
|
* be overwriting an internal NUL character
|
||||||
*/
|
*/
|
||||||
dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
|
dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
|
||||||
if (name->len > DNAME_INLINE_LEN-1) {
|
if (unlikely(!name)) {
|
||||||
|
static const struct qstr anon = QSTR_INIT("/", 1);
|
||||||
|
name = &anon;
|
||||||
|
dname = dentry->d_iname;
|
||||||
|
} else if (name->len > DNAME_INLINE_LEN-1) {
|
||||||
size_t size = offsetof(struct external_name, name[1]);
|
size_t size = offsetof(struct external_name, name[1]);
|
||||||
struct external_name *p = kmalloc(size + name->len,
|
struct external_name *p = kmalloc(size + name->len,
|
||||||
GFP_KERNEL_ACCOUNT);
|
GFP_KERNEL_ACCOUNT);
|
||||||
@ -1812,9 +1816,7 @@ struct dentry *d_make_root(struct inode *root_inode)
|
|||||||
struct dentry *res = NULL;
|
struct dentry *res = NULL;
|
||||||
|
|
||||||
if (root_inode) {
|
if (root_inode) {
|
||||||
static const struct qstr name = QSTR_INIT("/", 1);
|
res = __d_alloc(root_inode->i_sb, NULL);
|
||||||
|
|
||||||
res = __d_alloc(root_inode->i_sb, &name);
|
|
||||||
if (res)
|
if (res)
|
||||||
d_instantiate(res, root_inode);
|
d_instantiate(res, root_inode);
|
||||||
else
|
else
|
||||||
@ -1855,7 +1857,6 @@ EXPORT_SYMBOL(d_find_any_alias);
|
|||||||
|
|
||||||
static struct dentry *__d_obtain_alias(struct inode *inode, int disconnected)
|
static struct dentry *__d_obtain_alias(struct inode *inode, int disconnected)
|
||||||
{
|
{
|
||||||
static const struct qstr anonstring = QSTR_INIT("/", 1);
|
|
||||||
struct dentry *tmp;
|
struct dentry *tmp;
|
||||||
struct dentry *res;
|
struct dentry *res;
|
||||||
unsigned add_flags;
|
unsigned add_flags;
|
||||||
@ -1869,7 +1870,7 @@ static struct dentry *__d_obtain_alias(struct inode *inode, int disconnected)
|
|||||||
if (res)
|
if (res)
|
||||||
goto out_iput;
|
goto out_iput;
|
||||||
|
|
||||||
tmp = __d_alloc(inode->i_sb, &anonstring);
|
tmp = __d_alloc(inode->i_sb, NULL);
|
||||||
if (!tmp) {
|
if (!tmp) {
|
||||||
res = ERR_PTR(-ENOMEM);
|
res = ERR_PTR(-ENOMEM);
|
||||||
goto out_iput;
|
goto out_iput;
|
||||||
|
Loading…
Reference in New Issue
Block a user