lkml.org 
[lkml]   [2023]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 6.2 15/30] scsi: lpfc: Avoid usage of list iterator variable after loop
    Date
    From: Jakob Koschel <jkl820.git@gmail.com>

    [ Upstream commit 2850b23e9f9ae3696e472d2883ea1b43aafa884e ]

    If the &epd_pool->list is empty when executing
    lpfc_get_io_buf_from_expedite_pool() the function would return an invalid
    pointer. Even in the case if the list is guaranteed to be populated, the
    iterator variable should not be used after the loop to be more robust for
    future changes.

    Linus proposed to avoid any use of the list iterator variable after the
    loop, in the attempt to move the list iterator variable declaration into
    the macro to avoid any potential misuse after the loop [1].

    Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1]
    Signed-off-by: Jakob Koschel <jkl820.git@gmail.com>
    Link: https://lore.kernel.org/r/20230301-scsi-lpfc-avoid-list-iterator-after-loop-v1-1-325578ae7561@gmail.com
    Reviewed-by: Justin Tee <justin.tee@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/lpfc/lpfc_sli.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
    index 3aa7206537de7..c0ddf55676a1f 100644
    --- a/drivers/scsi/lpfc/lpfc_sli.c
    +++ b/drivers/scsi/lpfc/lpfc_sli.c
    @@ -21903,20 +21903,20 @@ lpfc_get_io_buf_from_private_pool(struct lpfc_hba *phba,
    static struct lpfc_io_buf *
    lpfc_get_io_buf_from_expedite_pool(struct lpfc_hba *phba)
    {
    - struct lpfc_io_buf *lpfc_ncmd;
    + struct lpfc_io_buf *lpfc_ncmd = NULL, *iter;
    struct lpfc_io_buf *lpfc_ncmd_next;
    unsigned long iflag;
    struct lpfc_epd_pool *epd_pool;

    epd_pool = &phba->epd_pool;
    - lpfc_ncmd = NULL;

    spin_lock_irqsave(&epd_pool->lock, iflag);
    if (epd_pool->count > 0) {
    - list_for_each_entry_safe(lpfc_ncmd, lpfc_ncmd_next,
    + list_for_each_entry_safe(iter, lpfc_ncmd_next,
    &epd_pool->list, list) {
    - list_del(&lpfc_ncmd->list);
    + list_del(&iter->list);
    epd_pool->count--;
    + lpfc_ncmd = iter;
    break;
    }
    }
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-03-27 01:07    [W:2.106 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site