• Andrew Morton's avatar
    [PATCH] Fix BLKPREP_KILL · 2cba47a2
    Andrew Morton authored
    From: Jens Axboe <axboe@suse.de>
    
    Samuel Rydh wrote:
    
    If a MODE_SENSE(6) command is sent to an IDE cd using the CDROM_SEND_PACKET
    ioctl, then the kernel freezes solidly. To reproduce this, one can take the
    SCSI cmd [1a 08 31 00 10 00] and a 16 byte data buffer.
    
    After some bug hunting, I found out that the following is what happens:
    
    - ide-cd recognizes that MODE_SENSE(6) isn't supported and tries
      to abort the request from ide_cdrom_prep_pc by returning BLKPREP_KILL.
    
    - in elv_next_request(), the kill request is handled by
      the following code:
    
    	while (end_that_request_first(rq, 0, rq->nr_sectors))
    		;
    	end_that_request_last(rq);
    
    The while loop never exits. The end_that_request_first() doesn't do anything
    since rq->nr_sectors is 0; it just returns "not-done" after handling those 0
    bytes (rq->bio->bi_size is 16).
    2cba47a2
elevator.c 7.84 KB