Public bug reported:
BugLink: https://bugs.launchpad.net/bugs/2104326
[Impact]
Remove the floppy kernel module by "modprobe -r floppy" causes the
following:
[ 26.594748] Floppy drive(s): fd0 is 2.88M AMI BIOS
10:58:56 [54/49654][ 26.615036] FDC 0 is a S82078B
[ 37.356072] BUG: kernel NULL
pointer dereference, address: 0000000000000030
[
37.356898] #PF: supervisor read access in kernel mode
[ 37.357306] #PF: error_code(0x0000) - not-present page
[ 37.357671] PGD 0 P4D 0
[ 37.357873] Oops: 0000 [#1] SMP NOPTI
[ 37.358143] CPU: 1 PID: 1005 Comm: modprobe Not tainted 5.15.0-135-generic
#146-Ubuntu
[ 37.358715] Hardware name: QEMU Standard PC (Q35 +
ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 37.359333] RIP: 0010:blk_mq_cancel_work_sync+0x5/0x60
[ 37.359718] Code: 00 00 89 45 d0 89 de e8 d9 8b 09 00 8b 45 d0 e9 71 ff ff
ff b8 ea ff ff ff eb 94 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <48> 83 7f
30 00 74 49 55 48 89 e5 41
54 49 89 fc 48 8d bf 60 05 00
[ 37.360912] RSP: 0018:ffffb9cb00b87d70 EFLAGS: 00010246
[ 37.361273] RAX: ffff95f905452908 RBX: ffff95f90d38c900 RCX: 0000000082000101
[ 37.361746] RDX: 00000000820001bf RSI: ffffffffa8a92b36 RDI: 0000000000000000
[ 37.362219] RBP: ffffb9cb00b87d80 R08: 0000000000000001 R09: 0000000000000000
[ 37.362697] R10: 0000000000000001 R11: ffff000000000000 R12: ffff95f9054525c0
[ 37.363169] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 37.363655] FS: 00007f0a711c4c40(0000) GS:ffff96005fc40000(0000)
knlGS:0000000000000000
[ 37.364192] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 37.364586] CR2: 0000000000000030 CR3: 000000010fcb0000 CR4: 0000000000750ee0
[ 37.365063] PKRU: 55555554
[ 37.365276] Call Trace:
[ 37.365474] <TASK>
[ 37.365649] ? show_trace_log_lvl+0x1d6/0x2ea
10:58:56 [30/49654]
[ 37.365961] ? show_trace_log_lvl+0x1d6/0x2ea
[ 37.366275] ? device_release+0x38/0xa0
[ 37.366555] ? show_regs.part.0+0x23/0x29
[ 37.366857] ? __die_body.cold+0x8/0xd
[ 37.367143] ? __die+0x2b/0x37
[ 37.367382] ? page_fault_oops+0x13b/0x170
[ 37.367682] ? do_user_addr_fault+0x313/0x640
[ 37.367991] ? fsnotify_destroy_marks+0x2a/0x150
[ 37.368322] ? __call_rcu+0xa8/0x270
[ 37.368592] ? exc_page_fault+0x77/0x170
[ 37.368882] ? asm_exc_page_fault+0x27/0x30
[ 37.369190] ? device_release+0x26/0xa0
[ 37.369471] ? blk_mq_cancel_work_sync+0x5/0x60
[ 37.369792] ? disk_release+0x31/0x80
[ 37.370060] device_release+0x38/0xa0
[ 37.370337] kobject_cleanup+0x3e/0x150
[ 37.370623] kobject_put+0x5b/0x80
[ 37.370881] put_device+0x13/0x20
[ 37.371133] put_disk+0x1b/0x30
[ 37.371379] floppy_module_exit+0x34b/0x105d [floppy]
[ 37.371740] __do_sys_delete_module.constprop.0+0x184/0x290
[ 37.372140] ? syscall_exit_to_user_mode+0x2c/0x50
[ 37.372492] ? x64_sys_call+0x1dba/0x1fa0
[ 37.372785] ? do_syscall_64+0x63/0xb0
[ 37.373058] __x64_sys_delete_module+0x12/0x20
[ 37.373421] x64_sys_call+0x16cf/0x1fa0
[ 37.373720] do_syscall_64+0x56/0xb0
[ 37.374001] ? syscall_exit_to_user_mode+0x2c/0x50
[ 37.374339] ? x64_sys_call+0x1a55/0x1fa0
[ 37.374624] ? do_syscall_64+0x63/0xb0
[ 37.374891] ? x64_sys_call+0x1de6/0x1fa0
[ 37.375180] ? clear_bhb_loop+0x45/0xa0
[ 37.375469] ? clear_bhb_loop+0x45/0xa0
[ 37.375741] ? clear_bhb_loop+0x45/0xa0
[ 37.376013] ? clear_bhb_loop+0x45/0xa0
[ 37.376292] ? clear_bhb_loop+0x45/0xa0
[ 37.376568] entry_SYSCALL_64_after_hwframe+0x6c/0xd6
[ 37.376913] RIP: 0033:0x7f0a712ecaeb
[ 37.377176] Code: 73 01 c3 48 8b 0d 45 33 0f 00 f7 d8 64 89 01 48 83 c8 ff
c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01
f0 ff ff 73 01 c3 48 8b 0d
15 33 0f 00 f7 d8 64 89 01 48
[ 37.378351] RSP: 002b:00007ffc33b3bc48 EFLAGS: 00000206 ORIG_RAX:
00000000000000b0
[ 37.378870] RAX: ffffffffffffffda RBX: 00005615695dbe30 RCX: 00007f0a712ecaeb
[ 37.379368] RDX: 0000000000000000 RSI: 0000000000000800 RDI: 00005615695dbe98
[ 37.379837] RBP: 00005615695dbe30 R08: 0000000000000000 R09: 0000000000000000
[ 37.380308] R10: 00007f0a71384ac0 R11: 0000000000000206 R12: 00005615695dbe98
[ 37.380785] R13: 0000000000000000 R14: 00005615695dbe98 R15: 00007ffc33b3df78
[ 37.381256] </TASK>
[ 37.381438] Modules linked in: floppy(-) isofs intel_rapl_msr
intel_rapl_common binfmt_misc nls_iso8859_1 kvm_intel kvm rapl joydev
input_leds serio_raw mac_hid qemu_fw_cfg sch_fq_c
odel dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua drm efi_pstore
ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress raid10 raid456
async_raid6_recov async_memcpy asyn
c_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear
crct10dif_pclmul crc32_pclmul ghash_clmulni_intel sha256_ssse3 sha1_ssse3
aesni_intel i2c_i801 crypto_simd x
hci_pci virtio_net ahci net_failover cryptd i2c_smbus psmouse libahci
virtio_scsi lpc_ich virtio_blk virtio_rng xhci_pci_renesas failover
[ 37.385136] CR2: 0000000000000030
[ 37.385412] ---[ end trace 09bc3a6935dc73e0 ]---
[ 37.385730] RIP: 0010:blk_mq_cancel_work_sync+0x5/0x60
[ 37.386080] Code: 00 00 89 45 d0 89 de e8 d9 8b 09 00 8b 45 d0 e9 71 ff ff
ff b8 ea ff ff ff eb 94 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <48> 83 7f
30 00 74 49 55 48 89 e5 41
54 49 89 fc 48 8d bf 60 05 00
[ 37.387332] RSP: 0018:ffffb9cb00b87d70 EFLAGS: 00010246
[ 37.387702] RAX: ffff95f905452908 RBX: ffff95f90d38c900 RCX: 0000000082000101
[ 37.388179] RDX: 00000000820001bf RSI: ffffffffa8a92b36 RDI: 0000000000000000
[ 37.388646] RBP: ffffb9cb00b87d80 R08: 0000000000000001 R09: 0000000000000000
[ 37.389126] R10: 0000000000000001 R11: ffff000000000000 R12: ffff95f9054525c0
[ 37.389607] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 37.390073] FS: 00007f0a711c4c40(0000) GS:ffff96005fc40000(0000)
knlGS:0000000000000000
[ 37.390620] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 37.391005] CR2: 0000000000000030 CR3: 000000010fcb0000 CR4: 0000000000750ee0
[ 37.391478] PKRU: 55555554
This can be simply reproduced on a VM with a floppy disk added and only
happens on 5.15 kernel, because of the change of kernel internal
structure.
[Fix]
This upstream commit fixes it:
commit 2598a2bb357d64baaa94368133ddbc900b9eb246
Author: Luis Chamberlain <[email protected]>
Date: Mon Sep 27 15:02:50 2021 -0700
floppy: fix add_disk() assumption on exit due to new developments
After the patch titled "floppy: use blk_mq_alloc_disk and
blk_cleanup_disk" the floppy driver was modified to allocate
the blk_mq_alloc_disk() which allocates the disk with the
queue. This is further clarified later with the patch titled
"block: remove alloc_disk and alloc_disk_node". This clarifies
that:
Most drivers should use and have been converted to use
blk_alloc_disk and blk_mq_alloc_disk. Only the scsi
ULPs and dasd still allocate a disk separately from the
request_queue so don't bother with convenience macros for
something that should not see significant new users and
remove these wrappers.
And then we have the patch titled, "block: hold a request_queue
reference for the lifetime of struct gendisk" which ensures
that a queue is *always* present for sure during the entire
lifetime of a disk.
In the floppy driver's case then the disk always comes with the
queue. So even if even if the queue was cleaned up on exit, putting
the disk *is* still required, and likewise, blk_cleanup_queue() on
a null queue should not happen now as disk->queue is valid from
disk allocation time on.
Automatic backport code scrapers should hopefully not cherry pick
this patch as a stable fix candidate without full due dilligence to
ensure all the work done on the block layer to make this happen is
merged first.
Signed-off-by: Luis Chamberlain <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
The floppy driver now uses blk_mq_alloc_disk(), which guarantees a valid
queue for the disk's lifetime. This change removes the need to
conditionally clean up the queue and ensures put_disk() is still
required on exit.
[Testcase]
Create a VM and add a floppy disk to it, remove the floppy module by
"modprobe -r floppy" to check if the null pointer deference occurs in
the kernel logs.
[Where problems can occur]
If there is something wrong in this commit, removing floppy module might cause
issues,
but it won't affect the whole system, and also floppy is rarely used nowadays.
** Affects: linux (Ubuntu)
Importance: Undecided
Status: New
** Description changed:
+ BugLink: https://bugs.launchpad.net/bugs/2104326
[Impact]
Remove the floppy kernel module by "modprobe -r floppy" causes the
following:
- [ 26.594748] Floppy drive(s): fd0 is 2.88M AMI BIOS
10:58:56 [54/49654][ 26.615036] FDC 0 is a S82078B
[ 37.356072] BUG: kernel
NULL pointer dereference, address: 0000000000000030
[
37.356898] #PF: supervisor read access in kernel mode
- [ 37.357306] #PF: error_code(0x0000) - not-present page
- [ 37.357671] PGD 0 P4D 0
- [ 37.357873] Oops: 0000 [#1] SMP NOPTI
- [ 37.358143] CPU: 1 PID: 1005 Comm: modprobe Not tainted 5.15.0-135-generic
#146-Ubuntu
[ 37.358715] Hardware name: QEMU Standard PC (Q35 +
ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
- [ 37.359333] RIP: 0010:blk_mq_cancel_work_sync+0x5/0x60
+ [ 26.594748] Floppy drive(s): fd0 is 2.88M AMI BIOS
10:58:56 [54/49654][ 26.615036] FDC 0 is a S82078B
[ 37.356072] BUG: kernel
NULL pointer dereference, address: 0000000000000030
[
37.356898] #PF: supervisor read access in kernel mode
+ [ 37.357306] #PF: error_code(0x0000) - not-present page
+ [ 37.357671] PGD 0 P4D 0
+ [ 37.357873] Oops: 0000 [#1] SMP NOPTI
+ [ 37.358143] CPU: 1 PID: 1005 Comm: modprobe Not tainted 5.15.0-135-generic
#146-Ubuntu
[ 37.358715] Hardware name: QEMU Standard PC (Q35 +
ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
+ [ 37.359333] RIP: 0010:blk_mq_cancel_work_sync+0x5/0x60
[ 37.359718] Code: 00 00 89 45 d0 89 de e8 d9 8b 09 00 8b 45 d0 e9 71 ff ff
ff b8 ea ff ff ff eb 94 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <48> 83 7f
30 00 74 49 55 48 89 e5 41
- 54 49 89 fc 48 8d bf 60 05 00
- [ 37.360912] RSP: 0018:ffffb9cb00b87d70 EFLAGS: 00010246
+ 54 49 89 fc 48 8d bf 60 05 00
+ [ 37.360912] RSP: 0018:ffffb9cb00b87d70 EFLAGS: 00010246
[ 37.361273] RAX: ffff95f905452908 RBX: ffff95f90d38c900 RCX:
0000000082000101
- [ 37.361746] RDX: 00000000820001bf RSI: ffffffffa8a92b36 RDI:
0000000000000000
- [ 37.362219] RBP: ffffb9cb00b87d80 R08: 0000000000000001 R09:
0000000000000000
+ [ 37.361746] RDX: 00000000820001bf RSI: ffffffffa8a92b36 RDI:
0000000000000000
+ [ 37.362219] RBP: ffffb9cb00b87d80 R08: 0000000000000001 R09:
0000000000000000
[ 37.362697] R10: 0000000000000001 R11: ffff000000000000 R12:
ffff95f9054525c0
- [ 37.363169] R13: 0000000000000000 R14: 0000000000000000 R15:
0000000000000000
- [ 37.363655] FS: 00007f0a711c4c40(0000) GS:ffff96005fc40000(0000)
knlGS:0000000000000000
- [ 37.364192] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+ [ 37.363169] R13: 0000000000000000 R14: 0000000000000000 R15:
0000000000000000
+ [ 37.363655] FS: 00007f0a711c4c40(0000) GS:ffff96005fc40000(0000)
knlGS:0000000000000000
+ [ 37.364192] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 37.364586] CR2: 0000000000000030 CR3: 000000010fcb0000 CR4:
0000000000750ee0
[ 37.365063] PKRU: 55555554
[ 37.365276] Call Trace:
[ 37.365474] <TASK>
[ 37.365649] ? show_trace_log_lvl+0x1d6/0x2ea
10:58:56 [30/49654]
[ 37.365961] ? show_trace_log_lvl+0x1d6/0x2ea
[ 37.366275] ? device_release+0x38/0xa0
[ 37.366555] ? show_regs.part.0+0x23/0x29
[ 37.366857] ? __die_body.cold+0x8/0xd
[ 37.367143] ? __die+0x2b/0x37
[ 37.367382] ? page_fault_oops+0x13b/0x170
[ 37.367682] ? do_user_addr_fault+0x313/0x640
[ 37.367991] ? fsnotify_destroy_marks+0x2a/0x150
[ 37.368322] ? __call_rcu+0xa8/0x270
[ 37.368592] ? exc_page_fault+0x77/0x170
[ 37.368882] ? asm_exc_page_fault+0x27/0x30
[ 37.369190] ? device_release+0x26/0xa0
[ 37.369471] ? blk_mq_cancel_work_sync+0x5/0x60
[ 37.369792] ? disk_release+0x31/0x80
[ 37.370060] device_release+0x38/0xa0
[ 37.370337] kobject_cleanup+0x3e/0x150
[ 37.370623] kobject_put+0x5b/0x80
[ 37.370881] put_device+0x13/0x20
[ 37.371133] put_disk+0x1b/0x30
[ 37.371379] floppy_module_exit+0x34b/0x105d [floppy]
[ 37.371740] __do_sys_delete_module.constprop.0+0x184/0x290
[ 37.372140] ? syscall_exit_to_user_mode+0x2c/0x50
[ 37.372492] ? x64_sys_call+0x1dba/0x1fa0
[ 37.372785] ? do_syscall_64+0x63/0xb0
[ 37.373058] __x64_sys_delete_module+0x12/0x20
[ 37.373421] x64_sys_call+0x16cf/0x1fa0
[ 37.373720] do_syscall_64+0x56/0xb0
[ 37.374001] ? syscall_exit_to_user_mode+0x2c/0x50
[ 37.374339] ? x64_sys_call+0x1a55/0x1fa0
[ 37.374624] ? do_syscall_64+0x63/0xb0
[ 37.374891] ? x64_sys_call+0x1de6/0x1fa0
[ 37.375180] ? clear_bhb_loop+0x45/0xa0
[ 37.375469] ? clear_bhb_loop+0x45/0xa0
[ 37.375741] ? clear_bhb_loop+0x45/0xa0
[ 37.376013] ? clear_bhb_loop+0x45/0xa0
[ 37.376292] ? clear_bhb_loop+0x45/0xa0
[ 37.376568] entry_SYSCALL_64_after_hwframe+0x6c/0xd6
[ 37.376913] RIP: 0033:0x7f0a712ecaeb
[ 37.377176] Code: 73 01 c3 48 8b 0d 45 33 0f 00 f7 d8 64 89 01 48 83 c8 ff
c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01
f0 ff ff 73 01 c3 48 8b 0d
- 15 33 0f 00 f7 d8 64 89 01 48
+ 15 33 0f 00 f7 d8 64 89 01 48
[ 37.378351] RSP: 002b:00007ffc33b3bc48 EFLAGS: 00000206 ORIG_RAX:
00000000000000b0
[ 37.378870] RAX: ffffffffffffffda RBX: 00005615695dbe30 RCX:
00007f0a712ecaeb
[ 37.379368] RDX: 0000000000000000 RSI: 0000000000000800 RDI:
00005615695dbe98
[ 37.379837] RBP: 00005615695dbe30 R08: 0000000000000000 R09:
0000000000000000
[ 37.380308] R10: 00007f0a71384ac0 R11: 0000000000000206 R12:
00005615695dbe98
[ 37.380785] R13: 0000000000000000 R14: 00005615695dbe98 R15:
00007ffc33b3df78
[ 37.381256] </TASK>
[ 37.381438] Modules linked in: floppy(-) isofs intel_rapl_msr
intel_rapl_common binfmt_misc nls_iso8859_1 kvm_intel kvm rapl joydev
input_leds serio_raw mac_hid qemu_fw_cfg sch_fq_c
odel dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua drm efi_pstore
ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress raid10 raid456
async_raid6_recov async_memcpy asyn
c_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear
crct10dif_pclmul crc32_pclmul ghash_clmulni_intel sha256_ssse3 sha1_ssse3
aesni_intel i2c_i801 crypto_simd x
hci_pci virtio_net ahci net_failover cryptd i2c_smbus psmouse libahci
virtio_scsi lpc_ich virtio_blk virtio_rng xhci_pci_renesas failover
[ 37.385136] CR2: 0000000000000030
[ 37.385412] ---[ end trace 09bc3a6935dc73e0 ]---
[ 37.385730] RIP: 0010:blk_mq_cancel_work_sync+0x5/0x60
[ 37.386080] Code: 00 00 89 45 d0 89 de e8 d9 8b 09 00 8b 45 d0 e9 71 ff ff
ff b8 ea ff ff ff eb 94 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <48> 83 7f
30 00 74 49 55 48 89 e5 41
- 54 49 89 fc 48 8d bf 60 05 00
+ 54 49 89 fc 48 8d bf 60 05 00
[ 37.387332] RSP: 0018:ffffb9cb00b87d70 EFLAGS: 00010246
[ 37.387702] RAX: ffff95f905452908 RBX: ffff95f90d38c900 RCX:
0000000082000101
[ 37.388179] RDX: 00000000820001bf RSI: ffffffffa8a92b36 RDI:
0000000000000000
[ 37.388646] RBP: ffffb9cb00b87d80 R08: 0000000000000001 R09:
0000000000000000
[ 37.389126] R10: 0000000000000001 R11: ffff000000000000 R12:
ffff95f9054525c0
[ 37.389607] R13: 0000000000000000 R14: 0000000000000000 R15:
0000000000000000
[ 37.390073] FS: 00007f0a711c4c40(0000) GS:ffff96005fc40000(0000)
knlGS:0000000000000000
[ 37.390620] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 37.391005] CR2: 0000000000000030 CR3: 000000010fcb0000 CR4:
0000000000750ee0
[ 37.391478] PKRU: 55555554
- This can be simply reproduced on a VM with a floppy disk added.
-
+ This can be simply reproduced on a VM with a floppy disk added and only
+ happens on 5.15 kernel, because of the change of kernel internal
+ structure.
[Fix]
This upstream commit fixes it:
commit 2598a2bb357d64baaa94368133ddbc900b9eb246
Author: Luis Chamberlain <[email protected]>
Date: Mon Sep 27 15:02:50 2021 -0700
- floppy: fix add_disk() assumption on exit due to new developments
-
- After the patch titled "floppy: use blk_mq_alloc_disk and
- blk_cleanup_disk" the floppy driver was modified to allocate
- the blk_mq_alloc_disk() which allocates the disk with the
- queue. This is further clarified later with the patch titled
- "block: remove alloc_disk and alloc_disk_node". This clarifies
- that:
-
- Most drivers should use and have been converted to use
- blk_alloc_disk and blk_mq_alloc_disk. Only the scsi
- ULPs and dasd still allocate a disk separately from the
- request_queue so don't bother with convenience macros for
- something that should not see significant new users and
- remove these wrappers.
-
- And then we have the patch titled, "block: hold a request_queue
- reference for the lifetime of struct gendisk" which ensures
- that a queue is *always* present for sure during the entire
- lifetime of a disk.
-
- In the floppy driver's case then the disk always comes with the
- queue. So even if even if the queue was cleaned up on exit, putting
- the disk *is* still required, and likewise, blk_cleanup_queue() on
- a null queue should not happen now as disk->queue is valid from
- disk allocation time on.
-
- Automatic backport code scrapers should hopefully not cherry pick
- this patch as a stable fix candidate without full due dilligence to
- ensure all the work done on the block layer to make this happen is
- merged first.
-
- Signed-off-by: Luis Chamberlain <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Jens Axboe <[email protected]>
+ floppy: fix add_disk() assumption on exit due to new developments
+
+ After the patch titled "floppy: use blk_mq_alloc_disk and
+ blk_cleanup_disk" the floppy driver was modified to allocate
+ the blk_mq_alloc_disk() which allocates the disk with the
+ queue. This is further clarified later with the patch titled
+ "block: remove alloc_disk and alloc_disk_node". This clarifies
+ that:
+
+ Most drivers should use and have been converted to use
+ blk_alloc_disk and blk_mq_alloc_disk. Only the scsi
+ ULPs and dasd still allocate a disk separately from the
+ request_queue so don't bother with convenience macros for
+ something that should not see significant new users and
+ remove these wrappers.
+
+ And then we have the patch titled, "block: hold a request_queue
+ reference for the lifetime of struct gendisk" which ensures
+ that a queue is *always* present for sure during the entire
+ lifetime of a disk.
+
+ In the floppy driver's case then the disk always comes with the
+ queue. So even if even if the queue was cleaned up on exit, putting
+ the disk *is* still required, and likewise, blk_cleanup_queue() on
+ a null queue should not happen now as disk->queue is valid from
+ disk allocation time on.
+
+ Automatic backport code scrapers should hopefully not cherry pick
+ this patch as a stable fix candidate without full due dilligence to
+ ensure all the work done on the block layer to make this happen is
+ merged first.
+
+ Signed-off-by: Luis Chamberlain <[email protected]>
+ Link: https://lore.kernel.org/r/[email protected]
+ Signed-off-by: Jens Axboe <[email protected]>
The floppy driver now uses blk_mq_alloc_disk(), which guarantees a valid
queue for the disk's lifetime. This change removes the need to
conditionally clean up the queue and ensures put_disk() is still
required on exit.
-
[Testcase]
Create a VM and add a floppy disk to it, remove the floppy module by
"modprobe -r floppy" to check if the null pointer deference occurs in
the kernel logs.
[Where problems can occur]
If there is something wrong in this commit, removing floppy module might
cause issues,
but it won't affect the whole system, and also floppy is rarely used nowadays.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2104326
Title:
Remove floppy kernel module causes null pointer deference
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2104326/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs