• Justin Tee's avatar
    scsi: lpfc: Fix use-after-free KFENCE violation during sysfs firmware write · 21681b81
    Justin Tee authored
    During the sysfs firmware write process, a use-after-free read warning is
    logged from the lpfc_wr_object() routine:
    
      BUG: KFENCE: use-after-free read in lpfc_wr_object+0x235/0x310 [lpfc]
      Use-after-free read at 0x0000000000cf164d (in kfence-#111):
      lpfc_wr_object+0x235/0x310 [lpfc]
      lpfc_write_firmware.cold+0x206/0x30d [lpfc]
      lpfc_sli4_request_firmware_update+0xa6/0x100 [lpfc]
      lpfc_request_firmware_upgrade_store+0x66/0xb0 [lpfc]
      kernfs_fop_write_iter+0x121/0x1b0
      new_sync_write+0x11c/0x1b0
      vfs_write+0x1ef/0x280
      ksys_write+0x5f/0xe0
      do_syscall_64+0x59/0x90
      entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    The driver accessed wr_object pointer data, which was initialized into
    mailbox payload memory, after the mailbox object was released back to the
    mailbox pool.
    
    Fix by moving the mailbox free calls to the end of the routine ensuring
    that we don't reference internal mailbox memory after release.
    Signed-off-by: default avatarJustin Tee <justin.tee@broadcom.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    21681b81
lpfc_sli.c 681 KB