mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
bnxt: Handle errors from copyout() in ioctl handlers
This is in preparation for annotating copyin() and related functions with __result_use_check. MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D43178 (cherry picked from commit 243e3ab3d34ada9da4f202f8cab90da2d6c49e5e)
This commit is contained in:
parent
f0f93607ee
commit
b3ed2b8086
1 changed files with 44 additions and 68 deletions
|
|
@ -2569,15 +2569,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&find->fw_ver);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_READ:
|
||||
|
|
@ -2602,22 +2600,20 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
rd->offset + offset, csize, &dma_data);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
break;
|
||||
}
|
||||
else {
|
||||
copyout(dma_data.idi_vaddr,
|
||||
} else {
|
||||
rc = copyout(dma_data.idi_vaddr,
|
||||
rd->data + offset, csize);
|
||||
iod->hdr.rc = 0;
|
||||
iod->hdr.rc = rc;
|
||||
}
|
||||
remain -= csize;
|
||||
}
|
||||
if (iod->hdr.rc == 0)
|
||||
copyout(iod, ioh, iol);
|
||||
if (rc == 0)
|
||||
rc = copyout(iod, ioh, iol);
|
||||
|
||||
iflib_dma_free(&dma_data);
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_FW_RESET:
|
||||
|
|
@ -2629,15 +2625,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&rst->selfreset);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_FW_QSTATUS:
|
||||
|
|
@ -2649,15 +2643,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&qstat->selfreset);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_WRITE:
|
||||
|
|
@ -2671,15 +2663,14 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&wr->item_length, &wr->index);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_ERASE_DIR_ENTRY:
|
||||
|
|
@ -2690,15 +2681,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
rc = bnxt_hwrm_nvm_erase_dir_entry(softc, erase->index);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_GET_DIR_INFO:
|
||||
|
|
@ -2710,15 +2699,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&info->entry_length);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_GET_DIR_ENTRIES:
|
||||
|
|
@ -2735,18 +2722,17 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&get->entry_length, &dma_data);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
copyout(dma_data.idi_vaddr, get->data,
|
||||
} else {
|
||||
rc = copyout(dma_data.idi_vaddr, get->data,
|
||||
get->entry_length * get->entries);
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
iod->hdr.rc = rc;
|
||||
if (rc == 0)
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
iflib_dma_free(&dma_data);
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_VERIFY_UPDATE:
|
||||
|
|
@ -2758,15 +2744,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
vrfy->ordinal, vrfy->ext);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_INSTALL_UPDATE:
|
||||
|
|
@ -2780,15 +2764,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
&inst->reset_required);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_NVM_MODIFY:
|
||||
|
|
@ -2799,15 +2781,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
mod->offset, mod->data, true, mod->length);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_FW_GET_TIME:
|
||||
|
|
@ -2820,15 +2800,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
>m->second, >m->millisecond, >m->zone);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
case BNXT_HWRM_FW_SET_TIME:
|
||||
|
|
@ -2841,15 +2819,13 @@ bnxt_priv_ioctl(if_ctx_t ctx, u_long command, caddr_t data)
|
|||
stm->second, stm->millisecond, stm->zone);
|
||||
if (rc) {
|
||||
iod->hdr.rc = rc;
|
||||
copyout(&iod->hdr.rc, &ioh->rc,
|
||||
rc = copyout(&iod->hdr.rc, &ioh->rc,
|
||||
sizeof(ioh->rc));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
iod->hdr.rc = 0;
|
||||
copyout(iod, ioh, iol);
|
||||
rc = copyout(iod, ioh, iol);
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue