All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 2/2] btrfs: avoid overflowing f_bfree
@ 2016-03-30 22:18 Luis de Bethencourt
  0 siblings, 0 replies; only message in thread
From: Luis de Bethencourt @ 2016-03-30 22:18 UTC (permalink / raw)
  To: linux-kernel
  Cc: clm, jbacik, dsterba, fdmanana, linux-btrfs, Luis de Bethencourt

Since mixed block groups accounting isn't byte-accurate and f_bree is an
unsigned integer, it could overflow. Avoid this.

Signed-off-by: Luis de Bethencourt <luisbg@osg.samsung.com>
Suggested-by: David Sterba <dsterba@suse.com>
---
Hi,

Thanks to Filipe Manana for spotting a mistake in the first version of this
patch.

Luis

 fs/btrfs/super.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index bdca79c..fe03efb 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -2100,7 +2100,11 @@ static int btrfs_statfs(struct dentry *dentry, struct kstatfs *buf)
 
 	/* Account global block reserve as used, it's in logical size already */
 	spin_lock(&block_rsv->lock);
-	buf->f_bfree -= block_rsv->size >> bits;
+	/* Mixed block groups accounting is not byte-accurate, avoid overflow */
+	if (buf->f_bfree >= block_rsv->size >> bits)
+		buf->f_bfree -= block_rsv->size >> bits;
+	else
+		buf->f_bfree = 0;
 	spin_unlock(&block_rsv->lock);
 
 	buf->f_bavail = div_u64(total_free_data, factor);
-- 
2.5.3


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-03-30 22:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-30 22:18 [PATCH v2 2/2] btrfs: avoid overflowing f_bfree Luis de Bethencourt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.