fuse: verify nlink
authorMiklos Szeredi <mszeredi@redhat.com>
Tue, 12 Nov 2019 10:49:04 +0000 (11:49 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 13 Dec 2019 07:52:35 +0000 (08:52 +0100)
commit c634da718db9b2fac201df2ae1b1b095344ce5eb upstream.

When adding a new hard link, make sure that i_nlink doesn't overflow.

Fixes: ac45d61357e8 ("fuse: fix nlink after unlink")
Cc: <stable@vger.kernel.org> # v3.4
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/fuse/dir.c

index e7a2a98..1df6a6f 100644 (file)
@@ -837,7 +837,8 @@ static int fuse_link(struct dentry *entry, struct inode *newdir,
 
                spin_lock(&fc->lock);
                fi->attr_version = ++fc->attr_version;
-               inc_nlink(inode);
+               if (likely(inode->i_nlink < UINT_MAX))
+                       inc_nlink(inode);
                spin_unlock(&fc->lock);
                fuse_invalidate_attr(inode);
                fuse_update_ctime(inode);