• Douglas Gilbert's avatar
    scsi: scsi_debug: Parser tables and code interaction · b6ff8ca7
    Douglas Gilbert authored
    This patch is in response to a static analyser report from Dan Carpenter
    titled: "[bug report] scsi: scsi_debug: Add per_host_store option".  This
    code may not clear the static analyzer reports, but may shed light on why
    they occur. Amongst other things this driver has a table driven SCSI
    command parser which also involves some C code. There are some invariants
    between the table entries and the corresponding C code (i.e. the resp_*()
    functions) that, if broken, may lead to a NULL dereference.  And the report
    is valid, at least in the case of the PRE-FETCH command.  Alas, that is not
    one of the cases that the static analyzer reported.
    
    In this particular corner case: when the fake_rw flag is set and the table
    entry for a "store"-accessing command does not have the required F_FAKE_RW
    flag set, do the following. Call BUG_ON() in the devip2sip() very close to
    a comment block explaining why it was called and how to fix it.
    checkpatch.pl complains about the BUG_ON() but there is no reasonable
    remedial action that can be taken at run time.
    
    This change allows the code reported by the static analyzer to be
    simplified. Comments were also added to the table flags (e.g.  F_FAKE_RW)
    so developers who add commands might be more inclined to use them
    (properly).
    
    Link: https://lore.kernel.org/r/20200513013943.25285-1-dgilbert@interlog.comReported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    b6ff8ca7
scsi_debug.c 212 KB