bfs: fix bitmap size argument to find_first_zero_bit()
PATCH 1/1 bfs: fix bitmap size argument to find_first_zero_bit()
The usage of find_first_zero_bit() in bfs_create() is wrong for two reasons.
The bitmap size argument to find_first_zero_bit() is info->si_lasti but the correct bitmap size is info->si_lasti + 1 as info->si_lasti is the last valid index in info->si_imap bitmap.
Another problem is that it is impossible to detect that info->si_imap bitmap is full because there is an off-by-one bug in the return value check for find_first_zero_bit(). If no zero bits exist in info->si_imap, find_first_zero_bit() returns info->si_lasti. But the check can't catch it due to the off-by-one.
Signed-off-by Akinobu Mita <[email protected]>
Cc "Tigran A. Aivazian" <[email protected]>
--- fs/bfs/dir.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
fs/bfs/dir.c +1 -1
@@ -97,7 +97,7 @@ static int bfs_create(struct inode *dir, struct dentry *dentry, int mode,if (!inode)return -ENOSPC ;mutex_lock (&info->bfs_lock); - ino =find_first_zero_bit (info->si_imap, info->si_lasti); + ino =find_first_zero_bit (info->si_imap, info->si_lasti +1 );if (ino > info->si_lasti) {mutex_unlock (&info->bfs_lock);iput (inode);
Signature · 1 line
1.7.4