git: c620dfb037e7 - stable/14 - hidraw(4): update hgd_actlen in HIDRAW_GET_REPORT ioctl
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 22 Dec 2024 03:37:50 UTC
The branch stable/14 has been updated by wulf:
URL: https://cgit.FreeBSD.org/src/commit/?id=c620dfb037e7cdcbc26f33edf8afa4764c3757ac
commit c620dfb037e7cdcbc26f33edf8afa4764c3757ac
Author: Matthew Nygard Dodd <Matthew.Nygard.Dodd@gmail.com>
AuthorDate: 2024-11-18 04:25:10 +0000
Commit: Vladimir Kondratyev <wulf@FreeBSD.org>
CommitDate: 2024-12-22 03:33:27 +0000
hidraw(4): update hgd_actlen in HIDRAW_GET_REPORT ioctl
HIDRAW_GET_REPORT ioctl is documented to update hgd_actlen on return
with the number of bytes copied. It does not do this.
Reviewed by: wulf
PR: 282790
MFC after: 1 week
(cherry picked from commit f4f46a2eef3be6d19c65a4ca4ee70f365dd5be4f)
---
sys/dev/hid/hidraw.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/sys/dev/hid/hidraw.c b/sys/dev/hid/hidraw.c
index 618a6d2d5c31..45ef1995063e 100644
--- a/sys/dev/hid/hidraw.c
+++ b/sys/dev/hid/hidraw.c
@@ -570,6 +570,7 @@ hidraw_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag,
struct hidraw_devinfo *hd;
const char *devname;
uint32_t size;
+ hid_size_t actsize;
int id, len;
int error = 0;
@@ -747,16 +748,16 @@ hidraw_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag,
}
size = MIN(hgd->hgd_maxlen, size);
buf = HIDRAW_LOCAL_ALLOC(local_buf, size);
- error = hid_get_report(sc->sc_dev, buf, size, NULL,
+ actsize = 0;
+ error = hid_get_report(sc->sc_dev, buf, size, &actsize,
hgd->hgd_report_type, id);
if (!error)
- error = copyout(buf, hgd->hgd_data, size);
+ error = copyout(buf, hgd->hgd_data, actsize);
HIDRAW_LOCAL_FREE(local_buf, buf);
+ hgd->hgd_actlen = actsize;
#ifdef COMPAT_FREEBSD32
- /*
- * HIDRAW_GET_REPORT is declared _IOWR, but hgd is not written
- * so we don't call update_hgd32().
- */
+ if (hgd32 != NULL)
+ update_hgd32(hgd, hgd32);
#endif
return (error);