lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <c97fd5c9-c9aa-7f27-30fb-115e59f17389@huawei.com>
Date:   Mon, 24 Dec 2018 11:47:41 +0800
From:   yangerkun <yangerkun@...wei.com>
To:     Greg KH <gregkh@...uxfoundation.org>,
        Al Viro <viro@...iv.linux.org.uk>
CC:     <rafael@...nel.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] debugfs: remove inc_nlink in debugfs_create_automount



Greg KH wrote on 2018/12/22 19:25:
> On Sat, Dec 22, 2018 at 04:45:36PM +0800, yangerkun wrote:
>> Remove inc_nlink in debugfs_create_automount, or this inode will never
>> be free.
>>
>> Signed-off-by: yangerkun <yangerkun@...wei.com>
>> ---
>>   fs/debugfs/inode.c | 3 +--
>>   1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
>> index 13b01351dd1c..9294238e364f 100644
>> --- a/fs/debugfs/inode.c
>> +++ b/fs/debugfs/inode.c
>> @@ -551,12 +551,11 @@ struct dentry *debugfs_create_automount(const char *name,
>>   	if (unlikely(!inode))
>>   		return failed_creating(dentry);
>>   
>> +	/* directory inodes start off with i_nlink == 2 (for "." entry) */
>>   	make_empty_dir_inode(inode);
>>   	inode->i_flags |= S_AUTOMOUNT;
>>   	inode->i_private = data;
>>   	dentry->d_fsdata = (void *)f;
>> -	/* directory inodes start off with i_nlink == 2 (for "." entry) */
>> -	inc_nlink(inode);
> 
> Again, have you tested this and how?  How did you find this issue?
> 
> thanks,
> 
> greg k-h
> 
> .
> 
Thanks a lot for Al Viro's explain.

I was confusing about i_nlink and i_count before, so after insert and 
remove module show as below, i think the inode can still exist with 
nlink will be 1.

So the only problem is that the nlink should be 2 for a empty dir, and 
for debugfs,the influence is that the stat for the dir. Right?

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/debugfs.h>

static char *name = "test-dir";
module_param(name, charp, 0644);
MODULE_PARM_DESC(name, "Get an string(char *) value from user...\n");

struct inode *inode;

int init_module(void)
{
     struct dentry *dentry;

     dentry = debugfs_create_automount(name, NULL, NULL, NULL);
     inode = dentry->d_inode;
     debugfs_remove(dentry);
     return 0;
}

void cleanup_module(void)
{
     printk("%d\n", inode->i_nlink);
}

MODULE_LICENSE("GPL");

Thanks,
Kun.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ