summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Maiolino <cmaiolino@redhat.com>2015-06-25 17:25:58 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2015-07-01 05:59:49 +0200
commit2adc376c551943a07170cbe70f43e6d6065f8906 (patch)
treef73e93d10b925e5e0e3a8e47f62a6d58b213da66
parentnamei: make set_root_rcu() return void (diff)
downloadlinux-2adc376c551943a07170cbe70f43e6d6065f8906.tar.xz
linux-2adc376c551943a07170cbe70f43e6d6065f8906.zip
vfs: avoid creation of inode number 0 in get_next_ino
currently, get_next_ino() is able to create inodes with inode number = 0. This have a bad impact in the filesystems relying in this function to generate inode numbers. While there is no problem at all in having inodes with number 0, userspace tools which handle file management tasks can have problems handling these files, like for example, the impossiblity of users to delete these files, since glibc will ignore them. So, I believe the best way is kernel to avoid creating them. This problem has been raised previously, but the old thread didn't have any other update for a year+, and I've seen too many users hitting the same issue regarding the impossibility to delete files while using filesystems relying on this function. So, I'm starting the thread again, with the same patch that I believe is enough to address this problem. Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/inode.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/inode.c b/fs/inode.c
index 0401d2c6d087..648e71ce6ec2 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -840,7 +840,11 @@ unsigned int get_next_ino(void)
}
#endif
- *p = ++res;
+ res++;
+ /* get_next_ino should not provide a 0 inode number */
+ if (unlikely(!res))
+ res++;
+ *p = res;
put_cpu_var(last_ino);
return res;
}