summaryrefslogtreecommitdiff
path: root/fs/ubifs
diff options
context:
space:
mode:
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2014-07-16 12:22:29 (GMT)
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2014-09-08 12:55:28 (GMT)
commitba29e721eb2df6df8f33c1f248388bb037a47914 (patch)
treee10db004cdbc4027d0046838ec9bee534a09f2c1 /fs/ubifs
parent052c28073ff26f771d44ef33952a41d18dadd255 (diff)
downloadlinux-ba29e721eb2df6df8f33c1f248388bb037a47914.tar.xz
UBIFS: fix free log space calculation
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. Cc: stable@vger.kernel.org Tested-by: hujianyang <hujianyang@huawei.com> Reported-by: hujianyang <hujianyang@huawei.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Diffstat (limited to 'fs/ubifs')
-rw-r--r--fs/ubifs/log.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c
index 9bd4aaf..c14628f 100644
--- a/fs/ubifs/log.c
+++ b/fs/ubifs/log.c
@@ -106,10 +106,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;
}
/**