git: cd4fa9258949 - stable/14 - ses: Add error checking for copyout() calls
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 02 Jan 2024 00:37:22 UTC
The branch stable/14 has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=cd4fa9258949b1a1a67a98022a350d4131faa6bd
commit cd4fa9258949b1a1a67a98022a350d4131faa6bd
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2023-12-26 01:40:33 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-01-02 00:29:50 +0000
ses: Add error checking for copyout() calls
This is in preparation for annotating copyin() and related functions
with __result_use_check.
Reviewed by: mav, imp, asomers
Tested by: asomers
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D43130
(cherry picked from commit 771501e96ffd7e314c338300a351ad76d28a2f69)
---
sys/cam/scsi/scsi_enc_ses.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/sys/cam/scsi/scsi_enc_ses.c b/sys/cam/scsi/scsi_enc_ses.c
index 767f4f0b7fa6..34e79b55ed51 100644
--- a/sys/cam/scsi/scsi_enc_ses.c
+++ b/sys/cam/scsi/scsi_enc_ses.c
@@ -2811,8 +2811,8 @@ ses_get_elm_desc(enc_softc_t *enc, encioc_elm_desc_t *elmd)
}
if (elmd->elm_desc_len > elmpriv->descr_len)
elmd->elm_desc_len = elmpriv->descr_len;
- copyout(elmpriv->descr, elmd->elm_desc_str, elmd->elm_desc_len);
- return (0);
+ return (copyout(elmpriv->descr, elmd->elm_desc_str,
+ elmd->elm_desc_len));
}
/**
@@ -2828,7 +2828,7 @@ static int
ses_get_elm_devnames(enc_softc_t *enc, encioc_elm_devnames_t *elmdn)
{
struct sbuf sb;
- int len;
+ int error, len;
len = elmdn->elm_names_size;
if (len < 0)
@@ -2840,10 +2840,13 @@ ses_get_elm_devnames(enc_softc_t *enc, encioc_elm_devnames_t *elmdn)
ses_elmdevname_callback, &sb);
sbuf_finish(&sb);
elmdn->elm_names_len = sbuf_len(&sb);
- copyout(sbuf_data(&sb), elmdn->elm_devnames, elmdn->elm_names_len + 1);
+ error = copyout(sbuf_data(&sb), elmdn->elm_devnames,
+ elmdn->elm_names_len + 1);
sbuf_delete(&sb);
cam_periph_lock(enc->periph);
- return (elmdn->elm_names_len > 0 ? 0 : ENODEV);
+ if (error == 0 && elmdn->elm_names_len == 0)
+ error = ENODEV;
+ return (error);
}
/**
@@ -2922,9 +2925,9 @@ ses_handle_string(enc_softc_t *enc, encioc_string_t *sstr, unsigned long ioc)
size = rsize;
if (size > sstr->bufsiz)
size = sstr->bufsiz;
- copyout(str, sstr->buf, size);
+ ret = copyout(str, sstr->buf, size);
sstr->bufsiz = rsize;
- return (size == rsize ? 0 : ENOMEM);
+ return (ret != 0 ? ret : (size == rsize ? 0 : ENOMEM));
case ENCIOC_GETENCID:
if (ses_cache->ses_nsubencs < 1)
return (ENODEV);
@@ -2936,9 +2939,9 @@ ses_handle_string(enc_softc_t *enc, encioc_string_t *sstr, unsigned long ioc)
size = rsize;
if (size > sstr->bufsiz)
size = sstr->bufsiz;
- copyout(str, sstr->buf, size);
+ ret = copyout(str, sstr->buf, size);
sstr->bufsiz = rsize;
- return (size == rsize ? 0 : ENOMEM);
+ return (ret != 0 ? ret : (size == rsize ? 0 : ENOMEM));
default:
return (EINVAL);
}