ubifs: Fix off-by-one error
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 20 Jan 2021 13:12:53 +0000 (14:12 +0100)
committerRichard Weinberger <richard@nod.at>
Fri, 12 Feb 2021 20:53:23 +0000 (21:53 +0100)
An inode is allowed to have ubifs_xattr_max_cnt() xattrs, so we must
complain only when an inode has more xattrs, having exactly
ubifs_xattr_max_cnt() xattrs is fine.
With this the maximum number of xattrs can be created without hitting
the "has too many xattrs" warning when removing it.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Richard Weinberger <richard@nod.at>
fs/ubifs/journal.c
fs/ubifs/xattr.c

index 03410ae..2857e64 100644 (file)
@@ -881,7 +881,7 @@ int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode)
                struct inode *xino;
                struct ubifs_dent_node *xent, *pxent = NULL;
 
-               if (ui->xattr_cnt >= ubifs_xattr_max_cnt(c)) {
+               if (ui->xattr_cnt > ubifs_xattr_max_cnt(c)) {
                        ubifs_err(c, "Cannot delete inode, it has too much xattrs!");
                        goto out_release;
                }
index a0b9b34..842d5f1 100644 (file)
@@ -498,7 +498,7 @@ int ubifs_purge_xattrs(struct inode *host)
        struct fscrypt_name nm = {0};
        int err;
 
-       if (ubifs_inode(host)->xattr_cnt < ubifs_xattr_max_cnt(c))
+       if (ubifs_inode(host)->xattr_cnt <= ubifs_xattr_max_cnt(c))
                return 0;
 
        ubifs_warn(c, "inode %lu has too many xattrs, doing a non-atomic deletion",