Re: [PATCH] UBI: block: Fix locking for idr_alloc/idr_remove

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



My apologies.  I was testing sending to myself and forgot about the
stable tag in the commit message.

On Thu, Jan 18, 2018 at 8:55 AM, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
> On Thu, Jan 18, 2018 at 08:47:41AM -0500, Bradley Bolen wrote:
>> From: Bradley Bolen <bradleybolen@xxxxxxxxx>
>>
>> This fixes a race with idr_alloc where gd->first_minor can be set to the
>> same value for two simultaneous calls to ubiblock_create.  Each instance
>> calls device_add_disk with the same first_minor.  device_add_disk calls
>> bdi_register_owner which generates several warnings.
>>
>> WARNING: CPU: 1 PID: 179 at kernel-source/fs/sysfs/dir.c:31
>> sysfs_warn_dup+0x68/0x88
>> sysfs: cannot create duplicate filename '/devices/virtual/bdi/252:2'
>>
>> WARNING: CPU: 1 PID: 179 at kernel-source/lib/kobject.c:240
>> kobject_add_internal+0x1ec/0x2f8
>> kobject_add_internal failed for 252:2 with -EEXIST, don't try to
>> register things with the same name in the same directory
>>
>> WARNING: CPU: 1 PID: 179 at kernel-source/fs/sysfs/dir.c:31
>> sysfs_warn_dup+0x68/0x88
>> sysfs: cannot create duplicate filename '/dev/block/252:2'
>>
>> However, device_add_disk does not error out when bdi_register_owner
>> returns an error.  Control continues until reaching blk_register_queue.
>> It then BUGs.
>>
>> kernel BUG at kernel-source/fs/sysfs/group.c:113!
>> [<c01e26cc>] (internal_create_group) from [<c01e2950>]
>> (sysfs_create_group+0x20/0x24)
>> [<c01e2950>] (sysfs_create_group) from [<c00e3d38>]
>> (blk_trace_init_sysfs+0x18/0x20)
>> [<c00e3d38>] (blk_trace_init_sysfs) from [<c02bdfbc>]
>> (blk_register_queue+0xd8/0x154)
>> [<c02bdfbc>] (blk_register_queue) from [<c02cec84>]
>> (device_add_disk+0x194/0x44c)
>> [<c02cec84>] (device_add_disk) from [<c0436ec8>]
>> (ubiblock_create+0x284/0x2e0)
>> [<c0436ec8>] (ubiblock_create) from [<c0427bb8>]
>> (vol_cdev_ioctl+0x450/0x554)
>> [<c0427bb8>] (vol_cdev_ioctl) from [<c0189110>] (vfs_ioctl+0x30/0x44)
>> [<c0189110>] (vfs_ioctl) from [<c01892e0>] (do_vfs_ioctl+0xa0/0x790)
>> [<c01892e0>] (do_vfs_ioctl) from [<c0189a14>] (SyS_ioctl+0x44/0x68)
>> [<c0189a14>] (SyS_ioctl) from [<c0010640>] (ret_fast_syscall+0x0/0x34)
>>
>> Locking idr_alloc/idr_remove removes the race and keeps gd->first_minor
>> unique.
>>
>> Fixes: 2bf50d42f3a4 ("UBI: block: Dynamically allocate minor numbers")
>> Cc: stable@xxxxxxxxxxxxxxx
>> Signed-off-by: Bradley Bolen <bradleybolen@xxxxxxxxx>
>> ---
>>  drivers/mtd/ubi/block.c | 42 ++++++++++++++++++++++++++----------------
>>  1 file changed, 26 insertions(+), 16 deletions(-)
>
> <formletter>
>
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree.  Please read:
>     https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for how to do this properly.
>
> </formletter>
>
> It's also not how you submit patches upstream, you have read
> Documentation/SubmittingPatches, right?
>
> thanks,
>
> greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]