James Smart 4e57e0b9f3 lpfc: fix axchg pointer reference after free and double frees
The axchg structure is a structure allocated early in the
lpfc_nvme_unsol_ls_handler() to represent the newly received exchange.
Upon error, the out_fail path in the routine unconditionally frees the
pointer, yet subsequently passes the pointer to the abort routine.
Additionally, the abort routine, lpfc_nvme_unsol_ls_issue_abort(), also
has a failure path that will attempt to delete the pointer on error.

Fix these errors by:
- Removing the unconditional free so that it stays valid if passed
  to the abort routine.
- Revise the abort routine to not free the pointer. Instead, return
  a success/failure status. Note: if success, the later completion of
  the abort frees the structure.
- Back in the unsol_ls_handler() error path, if the abort routine was
  skipped (thus no possible reference) or the abort routine returned
  error, free the pointer.

Fixes: 3a8070c567aa ("lpfc: Refactor NVME LS receive handling")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
2020-05-27 07:12:41 +02:00
..
2020-04-10 12:21:11 -07:00
2020-04-10 12:21:11 -07:00
2020-04-02 17:03:53 -07:00
2019-09-30 23:59:53 -04:00
2020-01-29 18:16:16 -08:00
2019-12-27 17:28:41 -08:00
2019-12-02 13:37:02 -08:00
2019-11-07 06:43:18 -07:00
2020-03-11 23:07:59 -04:00
2019-09-21 10:50:15 -07:00
2020-04-02 17:03:53 -07:00
2020-04-10 12:21:11 -07:00
2020-04-02 17:03:53 -07:00
2020-03-05 17:36:24 -08:00
2020-04-10 12:21:11 -07:00
2019-03-02 11:39:54 -08:00
2018-06-19 22:02:25 -04:00
2019-11-12 22:21:35 -05:00
2020-04-02 17:03:53 -07:00
2020-02-24 14:54:25 -05:00
2020-03-11 23:07:59 -04:00
2020-03-11 23:07:59 -04:00
2019-01-08 21:58:35 -05:00
2020-02-28 20:54:52 -05:00
2019-07-11 15:14:01 -07:00
2019-06-18 19:46:18 -04:00
2019-07-11 15:17:41 -07:00
2020-04-02 17:03:53 -07:00
2020-04-02 17:03:53 -07:00
2018-11-06 21:31:28 -05:00
2020-04-02 17:03:53 -07:00
2019-07-11 15:14:01 -07:00
2020-03-24 07:57:07 -06:00
2019-07-11 15:17:41 -07:00
2019-07-11 15:14:01 -07:00
2018-06-19 22:02:25 -04:00
2020-03-30 11:20:13 -07:00
2019-12-08 12:23:42 -08:00
2019-07-11 15:14:01 -07:00
2018-12-18 23:19:21 -05:00
2020-02-24 15:01:57 -05:00
2020-02-10 22:46:55 -05:00
2019-07-11 15:14:01 -07:00