Message ID | 1387452744-8860-1-git-send-email-dh.herrmann@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Jiri Kosina |
Headers | show |
> -----Original Message----- > From: David Herrmann [mailto:dh.herrmann@gmail.com] > Sent: Thursday, December 19, 2013 3:32 AM > To: linux-input@vger.kernel.org > Cc: Jiri Kosina; Dan Carpenter; Joseph Salisbury; KY Srinivasan; Haiyang Zhang; > linux-kernel@vger.kernel.org; David Herrmann > Subject: [PATCH] HID: hyperv: make sure input buffer is big enough > > We need at least HID_MAX_BUFFER_SIZE (4096) bytes as input buffer. HID > core depends on this as it requires every input report to be at least as > big as advertised. > > Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> > --- > Hi > > Same as for the HIDP patch, if there's a way to avoid the extra copy, please > provide a better patch. > > Thanks > David > > drivers/hid/hid-hyperv.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c > index 8fae6d1..c24908f 100644 > --- a/drivers/hid/hid-hyperv.c > +++ b/drivers/hid/hid-hyperv.c > @@ -157,6 +157,7 @@ struct mousevsc_dev { > u32 report_desc_size; > struct hv_input_dev_info hid_dev_info; > struct hid_device *hid_device; > + u8 input_buf[HID_MAX_BUFFER_SIZE]; > }; > > > @@ -256,6 +257,7 @@ static void mousevsc_on_receive(struct hv_device > *device, > struct synthhid_msg *hid_msg; > struct mousevsc_dev *input_dev = hv_get_drvdata(device); > struct synthhid_input_report *input_report; > + size_t len; > > pipe_msg = (struct pipe_prt_msg *)((unsigned long)packet + > (packet->offset8 << 3)); > @@ -300,9 +302,12 @@ static void mousevsc_on_receive(struct hv_device > *device, > (struct synthhid_input_report *)pipe_msg->data; > if (!input_dev->init_complete) > break; > - hid_input_report(input_dev->hid_device, > - HID_INPUT_REPORT, input_report->buffer, > - input_report->header.size, 1); > + > + len = min(input_report->header.size, > + (u32)sizeof(input_dev->input_buf)); > + memcpy(input_dev->input_buf, input_report->buffer, len); > + hid_input_report(input_dev->hid_device, HID_INPUT_REPORT, > + input_dev->input_buf, len, 1); > break; > default: > pr_err("unsupported hid msg type - type %d len %d", > -- > 1.8.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 19 Dec 2013, KY Srinivasan wrote: > > We need at least HID_MAX_BUFFER_SIZE (4096) bytes as input buffer. HID > > core depends on this as it requires every input report to be at least as > > big as advertised. > > > > Signed-off-by: David Herrmann <dh.herrmann@gmail.com> > > Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Now applied.
diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c index 8fae6d1..c24908f 100644 --- a/drivers/hid/hid-hyperv.c +++ b/drivers/hid/hid-hyperv.c @@ -157,6 +157,7 @@ struct mousevsc_dev { u32 report_desc_size; struct hv_input_dev_info hid_dev_info; struct hid_device *hid_device; + u8 input_buf[HID_MAX_BUFFER_SIZE]; }; @@ -256,6 +257,7 @@ static void mousevsc_on_receive(struct hv_device *device, struct synthhid_msg *hid_msg; struct mousevsc_dev *input_dev = hv_get_drvdata(device); struct synthhid_input_report *input_report; + size_t len; pipe_msg = (struct pipe_prt_msg *)((unsigned long)packet + (packet->offset8 << 3)); @@ -300,9 +302,12 @@ static void mousevsc_on_receive(struct hv_device *device, (struct synthhid_input_report *)pipe_msg->data; if (!input_dev->init_complete) break; - hid_input_report(input_dev->hid_device, - HID_INPUT_REPORT, input_report->buffer, - input_report->header.size, 1); + + len = min(input_report->header.size, + (u32)sizeof(input_dev->input_buf)); + memcpy(input_dev->input_buf, input_report->buffer, len); + hid_input_report(input_dev->hid_device, HID_INPUT_REPORT, + input_dev->input_buf, len, 1); break; default: pr_err("unsupported hid msg type - type %d len %d",
We need at least HID_MAX_BUFFER_SIZE (4096) bytes as input buffer. HID core depends on this as it requires every input report to be at least as big as advertised. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> --- Hi Same as for the HIDP patch, if there's a way to avoid the extra copy, please provide a better patch. Thanks David drivers/hid/hid-hyperv.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)