linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] md: raid0/linear: fix dereference before null check on pointer mddev
@ 2020-07-02 11:35 Colin King
  2020-07-02 14:40 ` Guilherme Piccoli
  0 siblings, 1 reply; 3+ messages in thread
From: Colin King @ 2020-07-02 11:35 UTC (permalink / raw)
  To: Song Liu, NeilBrown, Guilherme G . Piccoli, linux-raid
  Cc: kernel-janitors, linux-kernel

From: Colin Ian King <colin.king@canonical.com>

Pointer mddev is being dereferenced with a test_bit call before mddev
is being null checked, this may cause a null pointer dereference. Fix
this by moving the null pointer checks to sanity check mddev before
it is dereferenced.

Addresses-Coverity: ("Dereference before null check")
Fixes: 62f7b1989c02 ("md raid0/linear: Mark array as 'broken' and fail BIOs if a member is gone")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/md/md.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 8bb69c61afe0..49452149ac72 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -470,17 +470,18 @@ static blk_qc_t md_submit_bio(struct bio *bio)
 	struct mddev *mddev = bio->bi_disk->private_data;
 	unsigned int sectors;
 
-	if (unlikely(test_bit(MD_BROKEN, &mddev->flags)) && (rw == WRITE)) {
+	if (mddev == NULL || mddev->pers == NULL) {
 		bio_io_error(bio);
 		return BLK_QC_T_NONE;
 	}
 
-	blk_queue_split(&bio);
-
-	if (mddev == NULL || mddev->pers == NULL) {
+	if (unlikely(test_bit(MD_BROKEN, &mddev->flags)) && (rw == WRITE)) {
 		bio_io_error(bio);
 		return BLK_QC_T_NONE;
 	}
+
+	blk_queue_split(&bio);
+
 	if (mddev->ro == 1 && unlikely(rw == WRITE)) {
 		if (bio_sectors(bio) != 0)
 			bio->bi_status = BLK_STS_IOERR;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] md: raid0/linear: fix dereference before null check on pointer mddev
  2020-07-02 11:35 [PATCH] md: raid0/linear: fix dereference before null check on pointer mddev Colin King
@ 2020-07-02 14:40 ` Guilherme Piccoli
  2020-07-02 18:36   ` Song Liu
  0 siblings, 1 reply; 3+ messages in thread
From: Guilherme Piccoli @ 2020-07-02 14:40 UTC (permalink / raw)
  To: Colin King; +Cc: Song Liu, NeilBrown, linux-raid, kernel-janitors, LKML

Great catch Colin, thanks!
Feel free to add my:

Reviewed-by: Guilherme G. Piccoli <gpiccoli@canonical.com>


P.S.  Not sure if it's only me, but the diff is soo much easier to
read when git is set to use patience diff algorithm:
https://termbin.com/f8ig

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] md: raid0/linear: fix dereference before null check on pointer mddev
  2020-07-02 14:40 ` Guilherme Piccoli
@ 2020-07-02 18:36   ` Song Liu
  0 siblings, 0 replies; 3+ messages in thread
From: Song Liu @ 2020-07-02 18:36 UTC (permalink / raw)
  To: Guilherme Piccoli
  Cc: Colin King, NeilBrown, linux-raid, kernel-janitors, LKML

On Thu, Jul 2, 2020 at 7:41 AM Guilherme Piccoli <gpiccoli@canonical.com> wrote:
>
> Great catch Colin, thanks!
> Feel free to add my:
>
> Reviewed-by: Guilherme G. Piccoli <gpiccoli@canonical.com>

Thanks Colin and Guilherme! Applied to md-next.

>
>
> P.S.  Not sure if it's only me, but the diff is soo much easier to
> read when git is set to use patience diff algorithm:
> https://termbin.com/f8ig

Agreed. Patience is cleaner.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-07-02 18:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-02 11:35 [PATCH] md: raid0/linear: fix dereference before null check on pointer mddev Colin King
2020-07-02 14:40 ` Guilherme Piccoli
2020-07-02 18:36   ` Song Liu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).