rsxx: Fix possible kernel panic with invalid config.
authorPhilip J Kelleher <pjk1939@linux.vnet.ibm.com>
Fri, 18 Oct 2013 22:12:35 +0000 (17:12 -0500)
committerJens Axboe <axboe@kernel.dk>
Fri, 8 Nov 2013 16:10:29 +0000 (09:10 -0700)
This patch fixes a possible Kernel Panic on driver load if
the configuration on the card is messed up or not yet set.
The driver could possible give a 32 bit unsigned all Fs to
the kernel as the device's block size.

Now we only write the block size to the kernel if the
configuration from the card is valid.

Also, driver version is being updated.

Signed-off-by: Philip J Kelleher <pjk1939@linux.vnet.ibm.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/rsxx/dev.c
drivers/block/rsxx/rsxx_priv.h

index d7af441880befc1c6aeb7cdd4dbfc128a8014bb8..2284f5d3a54ad00dd05c512b30b7bfed30411482 100644 (file)
@@ -295,13 +295,15 @@ int rsxx_setup_dev(struct rsxx_cardinfo *card)
                return -ENOMEM;
        }
 
-       blk_size = card->config.data.block_size;
+       if (card->config_valid) {
+               blk_size = card->config.data.block_size;
+               blk_queue_dma_alignment(card->queue, blk_size - 1);
+               blk_queue_logical_block_size(card->queue, blk_size);
+       }
 
        blk_queue_make_request(card->queue, rsxx_make_request);
        blk_queue_bounce_limit(card->queue, BLK_BOUNCE_ANY);
-       blk_queue_dma_alignment(card->queue, blk_size - 1);
        blk_queue_max_hw_sectors(card->queue, blkdev_max_hw_sectors);
-       blk_queue_logical_block_size(card->queue, blk_size);
        blk_queue_physical_block_size(card->queue, RSXX_HW_BLK_SIZE);
 
        queue_flag_set_unlocked(QUEUE_FLAG_NONROT, card->queue);
index 23fa05630fef6d5f89736da5c30c108a4c102ee9..6bbc64d0f69042033614e05f15f5d2dd2d878768 100644 (file)
@@ -52,7 +52,7 @@ struct proc_cmd;
 #define RS70_PCI_REV_SUPPORTED 4
 
 #define DRIVER_NAME "rsxx"
-#define DRIVER_VERSION "4.0.2.2510"
+#define DRIVER_VERSION "4.0.3.2516"
 
 /* Block size is 4096 */
 #define RSXX_HW_BLK_SHIFT              12