git: 163e0066ff1e - stable/13 - ath: Handle errors from copyout() in ath_rate_fetch_node_stats()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 02 Jan 2024 01:12:53 UTC
The branch stable/13 has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=163e0066ff1e28c83a53ad2ab5c2804daa662c1b
commit 163e0066ff1e28c83a53ad2ab5c2804daa662c1b
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2023-12-26 01:35:43 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-01-02 01:12:44 +0000
ath: Handle errors from copyout() in ath_rate_fetch_node_stats()
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D43096
(cherry picked from commit 711880597c6c4ac971eb2aba6a2dadb5933d38dd)
---
sys/dev/ath/ath_rate/sample/sample.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/sys/dev/ath/ath_rate/sample/sample.c b/sys/dev/ath/ath_rate/sample/sample.c
index 39ca5d1e9f31..8e70699f708d 100644
--- a/sys/dev/ath/ath_rate/sample/sample.c
+++ b/sys/dev/ath/ath_rate/sample/sample.c
@@ -1433,11 +1433,13 @@ ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
const HAL_RATE_TABLE *rt = sc->sc_currates;
struct ath_rateioctl_tlv av;
struct ath_rateioctl_rt *tv;
- int y;
+ int error, y;
int o = 0;
ATH_NODE_LOCK_ASSERT(an);
+ error = 0;
+
/*
* Ensure there's enough space for the statistics.
*/
@@ -1478,9 +1480,13 @@ ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
*/
av.tlv_id = ATH_RATE_TLV_RATETABLE;
av.tlv_len = sizeof(struct ath_rateioctl_rt);
- copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv));
+ error = copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv));
+ if (error != 0)
+ goto out;
o += sizeof(struct ath_rateioctl_tlv);
- copyout(tv, rs->buf + o, sizeof(struct ath_rateioctl_rt));
+ error = copyout(tv, rs->buf + o, sizeof(struct ath_rateioctl_rt));
+ if (error != 0)
+ goto out;
o += sizeof(struct ath_rateioctl_rt);
/*
@@ -1488,18 +1494,22 @@ ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
*/
av.tlv_id = ATH_RATE_TLV_SAMPLENODE;
av.tlv_len = sizeof(struct sample_node);
- copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv));
+ error = copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv));
+ if (error != 0)
+ goto out;
o += sizeof(struct ath_rateioctl_tlv);
/*
* Copy the statistics over to the provided buffer.
*/
- copyout(sn, rs->buf + o, sizeof(struct sample_node));
+ error = copyout(sn, rs->buf + o, sizeof(struct sample_node));
+ if (error != 0)
+ goto out;
o += sizeof(struct sample_node);
+out:
free(tv, M_TEMP);
-
- return (0);
+ return (error);
}
static void