[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220809080809.GB14727@lst.de>
Date: Tue, 9 Aug 2022 10:08:09 +0200
From: ChristophHellwig <hch@....de>
To: Liwei Song <liwei.song@...driver.com>
Cc: MiquelRaynal <miquel.raynal@...tlin.com>,
RichardWeinberger <richard@....at>,
VigneshRaghavendra <vigneshr@...com>,
ChristophHellwig <hch@....de>, linux-mtd@...ts.infradead.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] mtd_blkdevs: add mtd_table_mutex lock back to
blktrans_{open, release} to avoid race condition
On Tue, Aug 09, 2022 at 03:57:53PM +0800, Liwei Song wrote:
> without lock mtd_table_mutex in blktrans_{open, release}, there will
> be a race condition when access devices /dev/mtd1 and /dev/mtdblock1
> at the same time with a high frequency open and close test:
>
> kernel BUG at drivers/mtd/mtdcore.c:1221!
> lr : blktrans_release+0xb0/0x120
This does not seem on a current mainline kernel and seems to be
a somewhat incomplete backtrace. Can you send the full dmesg of
a latest mainline run and maybe share the reproducer?
> diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
> index b8ae1ec14e17..147e4a11dfe4 100644
> --- a/drivers/mtd/mtd_blkdevs.c
> +++ b/drivers/mtd/mtd_blkdevs.c
> @@ -188,6 +188,8 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
>
> kref_get(&dev->ref);
>
> + if (!mutex_trylock(&mtd_table_mutex))
> + return ret;
No, that's not really the solution.
Turning the kref_get above into a kref_get_unless_zero might be better
path to look into.
Powered by blists - more mailing lists