From nobody Tue Dec 26 02:04:17 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4SzdPF2q99z55KgC; Tue, 26 Dec 2023 02:04:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4SzdPF1V7Qz4K9g; Tue, 26 Dec 2023 02:04:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1703556257; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ggi34wTfuVCcW/MPjLRyY20/c8O80lQ2nqN4blAt7zc=; b=BA1gvCSdd15h2ipfHGhjpNriS0fzmMQ3L32DBW+Wr5dSaH0Bn93xizIwBPjE4Fn5wlmiP5 y5BCI11cyTGwu2el3J7e4FXfn4sLQvQVAwJo0FBLlua3tXyau1KPtnbxyrdrUj8suxC15C fnd+UR9VmOwJ5skj/OsKTtfiWPr13nNZj6qwvwdqc+ZIpP6k6eRvPHzpZrD92N5eV2tvMs Px0XTvNfUYwMWt7VxbMWd8CJws6UU83/OOurHH4X0Qxxxuo/x4FpBsRBXeJJgCxUEYt6db Iz2HZRKS7F6oJbllfT4rHjk4kSGrNw3RuBkbX8vqHOlh3LeHRVDcPBwkj7qIDg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1703556257; a=rsa-sha256; cv=none; b=WzEd0HJ56aw2uCuw6Do7OlTH7GsXDQwV0r1hITgqq6qjp1atBriKAomhLK9lTryKx8aEhL eYT54WQYBirQ/p5qJyTWWFuvoItQh+dS6NtQY15aCsS9Y4mz7xK3sDg2nMsznXh3H0qWjk oN/Nb1sCmgAt6azrXIw6GvxKjAt9JgK3khz6tz1MKklOI2410zNH12ix8eNiunKhCZR8uh zOvXocLurnUOQADW3G7eR/eD6wbAOzllIjFiAQ5+/SHeX/nkJtrTuX8m4a0s6XEzSLgQuQ W1ABLf0WNMGdul6NwaKERvF2yiCDnBJnnUy2crk29tP92868FudmEeUUtLRRdA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1703556257; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ggi34wTfuVCcW/MPjLRyY20/c8O80lQ2nqN4blAt7zc=; b=WY+hxNQNvJqfsJmf0FVwQuXznU3/pWwsiNwspOFtuwLMiIVfljikRmjmhBMobflATBB/Dm RE7ULINkj3BwYo0oIfq5srbU7RZbVUfxZpMfPHGviKtMX0jKJjMcwFr1JZ8yIo4wdgs1Yr O2JBJiNgUff+16fa6UzYW20myUULRk0sFwRPTOO2yXsfR0wQ5PhdiUiY8WSNdIymshY+mn nduRHDDuODCb3FBfwM9PSxXv/qFqbAjhnxdc32OW30rK4SCZkr2h8oqaUwHhEYmz2iEXrg bjJze1AJa+zbXsiC8n7x/eT8J2dnvPW7Gq/ba0Lfp9PF1/NqT6iJQ6rW9ctvew== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4SzdPF0bXPzbv6; Tue, 26 Dec 2023 02:04:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3BQ24H74002905; Tue, 26 Dec 2023 02:04:17 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3BQ24HMt002902; Tue, 26 Dec 2023 02:04:17 GMT (envelope-from git) Date: Tue, 26 Dec 2023 02:04:17 GMT Message-Id: <202312260204.3BQ24HMt002902@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: a01ff11cb73d - main - ocs: Check for copyin errors in the ioctl handler List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a01ff11cb73d7a1988f6241f63d141371ff23717 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=a01ff11cb73d7a1988f6241f63d141371ff23717 commit a01ff11cb73d7a1988f6241f63d141371ff23717 Author: Mark Johnston AuthorDate: 2023-12-26 01:38:57 +0000 Commit: Mark Johnston CommitDate: 2023-12-26 02:04:00 +0000 ocs: Check for copyin errors in the ioctl handler If copyin() fails, the driver will blindly proceed with whatever had been in the uninitialized DMA buffer. This is not what we want. Check for copyin failures. This is in preparation for annotating copyin() and related functions with __result_use_check. Reviewed by: ram MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D43097 --- sys/dev/ocs_fc/ocs_ioctl.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/sys/dev/ocs_fc/ocs_ioctl.c b/sys/dev/ocs_fc/ocs_ioctl.c index 6021ddf5c0d6..71ba17d5f72a 100644 --- a/sys/dev/ocs_fc/ocs_ioctl.c +++ b/sys/dev/ocs_fc/ocs_ioctl.c @@ -86,6 +86,7 @@ static int ocs_process_sli_config (ocs_t *ocs, ocs_ioctl_elxu_mbox_t *mcmd, ocs_dma_t *dma) { sli4_cmd_sli_config_t *sli_config = (sli4_cmd_sli_config_t *)mcmd->payload; + int error; if (sli_config->emb) { sli4_req_hdr_t *req = (sli4_req_hdr_t *)sli_config->payload.embed; @@ -127,7 +128,13 @@ ocs_process_sli_config (ocs_t *ocs, ocs_ioctl_elxu_mbox_t *mcmd, ocs_dma_t *dma) wrobj->host_buffer_descriptor[0].u.data.buffer_address_high = ocs_addr32_hi(dma->phys); /* copy the data into the DMA buffer */ - copyin((void *)(uintptr_t)mcmd->in_addr, dma->virt, mcmd->in_bytes); + error = copyin((void *)(uintptr_t)mcmd->in_addr, dma->virt, mcmd->in_bytes); + if (error != 0) { + device_printf(ocs->dev, "%s: COMMON_WRITE_OBJECT - copyin failed: %d\n", + __func__, error); + ocs_dma_free(ocs, dma); + return error; + } } break; case SLI4_OPC_COMMON_DELETE_OBJECT: @@ -170,7 +177,13 @@ ocs_process_sli_config (ocs_t *ocs, ocs_ioctl_elxu_mbox_t *mcmd, ocs_dma_t *dma) return ENXIO; } - copyin((void *)(uintptr_t)mcmd->in_addr, dma->virt, mcmd->in_bytes); + error = copyin((void *)(uintptr_t)mcmd->in_addr, dma->virt, mcmd->in_bytes); + if (error != 0) { + device_printf(ocs->dev, "%s: non-embedded - copyin failed: %d\n", + __func__, error); + ocs_dma_free(ocs, dma); + return error; + } sli_config->payload.mem.address_low = ocs_addr32_lo(dma->phys); sli_config->payload.mem.address_high = ocs_addr32_hi(dma->phys); @@ -184,6 +197,9 @@ static int ocs_process_mbx_ioctl(ocs_t *ocs, ocs_ioctl_elxu_mbox_t *mcmd) { ocs_dma_t dma = { 0 }; + int error; + + error = 0; if ((ELXU_BSD_MAGIC != mcmd->magic) || (sizeof(ocs_ioctl_elxu_mbox_t) != mcmd->size)) { @@ -238,13 +254,13 @@ ocs_process_mbx_ioctl(ocs_t *ocs, ocs_ioctl_elxu_mbox_t *mcmd) if( SLI4_MBOX_COMMAND_SLI_CONFIG == ((sli4_mbox_command_header_t *)mcmd->payload)->command && mcmd->out_bytes && dma.virt) { - copyout(dma.virt, (void *)(uintptr_t)mcmd->out_addr, mcmd->out_bytes); + error = copyout(dma.virt, (void *)(uintptr_t)mcmd->out_addr, mcmd->out_bytes); } no_support: ocs_dma_free(ocs, &dma); - return 0; + return error; } /**