lkml.org 
[lkml]   [2010]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 21/26] cciss: sanitize max commands
    From
    Date
    From: Stephen M. Cameron <scameron@beardog.cce.hp.com>

    cciss: sanitize max commands
    Some controllers might try to tell us they support 0 commands
    in performant mode. This is a lie told by buggy firmware.
    We have to be wary of this lest we try to allocate a negative
    number of command blocks, which will be treated as unsigned,
    and get an out of memory condition.

    Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
    ---
    drivers/block/cciss.c | 14 +++++++++++++-
    1 files changed, 13 insertions(+), 1 deletions(-)

    diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
    index b3060ec..6d4c4f2 100644
    --- a/drivers/block/cciss.c
    +++ b/drivers/block/cciss.c
    @@ -4112,13 +4112,25 @@ static int __devinit cciss_find_cfgtables(ctlr_info_t *h)
    return 0;
    }

    +static void __devinit cciss_get_max_perf_mode_cmds(struct ctlr_info *h)
    +{
    + h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands));
    + if (h->max_commands < 16) {
    + dev_warn(&h->pdev->dev, "Controller reports "
    + "max supported commands of %d, an obvious lie. "
    + "Using 16. Ensure that firmware is up to date.\n",
    + h->max_commands);
    + h->max_commands = 16;
    + }
    +}
    +
    /* Interrogate the hardware for some limits:
    * max commands, max SG elements without chaining, and with chaining,
    * SG chain block size, etc.
    */
    static void __devinit cciss_find_board_params(ctlr_info_t *h)
    {
    - h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands));
    + cciss_get_max_perf_mode_cmds(h);
    h->nr_cmds = h->max_commands - 4; /* Allow room for some ioctls */
    h->maxsgentries = readl(&(h->cfgtable->MaxSGElements));
    /*


    \
     
     \ /
      Last update: 2010-07-19 20:47    [W:0.023 / U:181.600 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site