Commit 9b0cb77
loop: Fix use-after-free issues
do_req_filebacked() calls blk_mq_complete_request() synchronously or
asynchronously when using asynchronous I/O unless memory allocation fails.
Hence, modify loop_handle_cmd() such that it does not dereference 'cmd' nor
'rq' after do_req_filebacked() finished unless we are sure that the request
has not yet been completed. This patch fixes the following kernel crash:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000054
Call trace:
css_put.42938+0x1c/0x1ac
loop_process_work+0xc8c/0xfd4
loop_rootcg_workfn+0x24/0x34
process_one_work+0x244/0x558
worker_thread+0x400/0x8fc
kthread+0x16c/0x1e0
ret_from_fork+0x10/0x20
Cc: Christoph Hellwig <hch@lst.de>
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Dan Schatzberg <schatzberg.dan@gmail.com>
Fixes: c74d40e ("loop: charge i/o to mem and blk cg")
Fixes: bc07c10 ("block: loop: support DIO & AIO")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20230314182155.80625-1-bvanassche@acm.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>1 parent 34e0a27 commit 9b0cb77
1 file changed
Lines changed: 17 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1859 | 1859 | | |
1860 | 1860 | | |
1861 | 1861 | | |
| 1862 | + | |
| 1863 | + | |
1862 | 1864 | | |
1863 | 1865 | | |
1864 | 1866 | | |
1865 | 1867 | | |
1866 | 1868 | | |
| 1869 | + | |
1867 | 1870 | | |
1868 | 1871 | | |
1869 | 1872 | | |
1870 | 1873 | | |
1871 | 1874 | | |
1872 | 1875 | | |
1873 | | - | |
1874 | | - | |
1875 | | - | |
| 1876 | + | |
| 1877 | + | |
| 1878 | + | |
1876 | 1879 | | |
1877 | | - | |
| 1880 | + | |
1878 | 1881 | | |
| 1882 | + | |
| 1883 | + | |
| 1884 | + | |
| 1885 | + | |
| 1886 | + | |
| 1887 | + | |
1879 | 1888 | | |
1880 | 1889 | | |
1881 | | - | |
| 1890 | + | |
1882 | 1891 | | |
1883 | 1892 | | |
1884 | | - | |
| 1893 | + | |
1885 | 1894 | | |
1886 | | - | |
| 1895 | + | |
1887 | 1896 | | |
1888 | 1897 | | |
1889 | 1898 | | |
1890 | | - | |
| 1899 | + | |
1891 | 1900 | | |
1892 | 1901 | | |
1893 | 1902 | | |
| |||
0 commit comments