Skip to content

Commit

Permalink
hidraw(4): update hgd_actlen in HIDRAW_GET_REPORT ioctl
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mndodd authored and wulf7 committed Nov 18, 2024
1 parent 0b5d86b commit f4f46a2
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions sys/dev/hid/hidraw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit f4f46a2

Please sign in to comment.