Messages in this thread | | | Date | Tue, 9 Aug 2022 10:08:09 +0200 | From | ChristophHellwig <> | 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.
| |