From: Dmitry Monakhov <dmonakhov@openvz.org>
To: linux-kernel@vger.kernel.org
Cc: darrick.wong@oracle.com, axboe@kernel.dk, tytso@mit.edu,
jack@suse.cz, hch@infradead.org,
Dmitry Monakhov <dmonakhov@openvz.org>
Subject: [PATCH 1/5] bh: Prevent panic on invalid BHs
Date: Thu, 6 Apr 2017 16:02:45 +0400 [thread overview]
Message-ID: <1491480169-1889-2-git-send-email-dmonakhov@openvz.org> (raw)
In-Reply-To: <1491480169-1889-1-git-send-email-dmonakhov@openvz.org>
- Convert BUG_ON to WARN_ON+EIO on submit_bh.
Leave BUG_ON(!bh->b_end_io) as is because this is static bug in
submission logic which can not be handled at runtime anyway.
unmapped BH is also special case which signal about user
misbehavior, so just dump error messageю
- guard __find_get_block from null pointer bdev.
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
fs/buffer.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/fs/buffer.c b/fs/buffer.c
index 9196f2a..4c8ce74 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -1355,8 +1355,12 @@ lookup_bh_lru(struct block_device *bdev, sector_t block, unsigned size)
struct buffer_head *
__find_get_block(struct block_device *bdev, sector_t block, unsigned size)
{
- struct buffer_head *bh = lookup_bh_lru(bdev, block, size);
+ struct buffer_head *bh;
+
+ if (WARN_ON_ONCE(!bdev))
+ return NULL;
+ bh = lookup_bh_lru(bdev, block, size);
if (bh == NULL) {
/* __find_get_block_slow will mark the page accessed */
bh = __find_get_block_slow(bdev, block);
@@ -3099,11 +3103,18 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
{
struct bio *bio;
- BUG_ON(!buffer_locked(bh));
- BUG_ON(!buffer_mapped(bh));
BUG_ON(!bh->b_end_io);
- BUG_ON(buffer_delay(bh));
- BUG_ON(buffer_unwritten(bh));
+
+ if (WARN_ON_ONCE(!buffer_locked(bh)))
+ goto bad_bh;
+ if (WARN_ON_ONCE(buffer_delay(bh)))
+ goto bad_bh;
+ if (WARN_ON_ONCE(buffer_unwritten(bh)))
+ goto bad_bh;
+ if (unlikely(!buffer_mapped(bh))) {
+ buffer_io_error(bh, ", bh not mapped");
+ goto bad_bh;
+ }
/*
* Only clear out a write error when rewriting
@@ -3143,6 +3154,9 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
submit_bio(bio);
return 0;
+bad_bh:
+ bh->b_end_io(bh, 0);
+ return -EIO;
}
int _submit_bh(int op, int op_flags, struct buffer_head *bh,
--
2.9.3
next prev parent reply other threads:[~2017-04-06 12:03 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-06 12:02 [PATCH 0/5] falloc on blockdevice: what possibly can go whong? Dmitry Monakhov
2017-04-06 12:02 ` Dmitry Monakhov [this message]
2017-04-06 15:42 ` [PATCH 1/5] bh: Prevent panic on invalid BHs Christoph Hellwig
2017-04-06 16:01 ` Dmitry Monakhov
2017-04-06 12:02 ` [PATCH 2/5] block: protect bdevname from null pointer bdev Dmitry Monakhov
2017-04-06 12:02 ` [PATCH 3/5] bio: Protect submit_bio from bdevless bio-s Dmitry Monakhov
2017-04-06 12:02 ` [PATCH 4/5] jbd2: use stable bdev pointer Dmitry Monakhov
2017-04-06 12:02 ` [PATCH 5/5] block: truncate page cache only when necessary on fallocate Dmitry Monakhov
2017-04-06 15:43 ` Christoph Hellwig
2017-04-06 15:51 ` Dmitry Monakhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1491480169-1889-2-git-send-email-dmonakhov@openvz.org \
--to=dmonakhov@openvz.org \
--cc=axboe@kernel.dk \
--cc=darrick.wong@oracle.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®