]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
UBIFS: fix free log space calculation
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Wed, 16 Jul 2014 12:22:29 +0000 (15:22 +0300)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 14 Dec 2014 16:23:41 +0000 (16:23 +0000)
commit ba29e721eb2df6df8f33c1f248388bb037a47914 upstream.

Hu (hujianyang <hujianyang@huawei.com>) discovered an issue in the
'empty_log_bytes()' function, which calculates how many bytes are left in the
log:

"
If 'c->lhead_lnum + 1 == c->ltail_lnum' and 'c->lhead_offs == c->leb_size', 'h'
would equalent to 't' and 'empty_log_bytes()' would return 'c->log_bytes'
instead of 0.
"

At this point it is not clear what would be the consequences of this, and
whether this may lead to any problems, but this patch addresses the issue just
in case.

Tested-by: hujianyang <hujianyang@huawei.com>
Reported-by: hujianyang <hujianyang@huawei.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
fs/ubifs/log.c

index 7ed9a3714237551e1829cc08c913c4983975c0b3..843beda25767b5318be0db2f888bfbfd583a4c1f 100644 (file)
@@ -110,10 +110,14 @@ static inline long long empty_log_bytes(const struct ubifs_info *c)
        h = (long long)c->lhead_lnum * c->leb_size + c->lhead_offs;
        t = (long long)c->ltail_lnum * c->leb_size;
 
-       if (h >= t)
+       if (h > t)
                return c->log_bytes - h + t;
-       else
+       else if (h != t)
                return t - h;
+       else if (c->lhead_lnum != c->ltail_lnum)
+               return 0;
+       else
+               return c->log_bytes;
 }
 
 /**