diff options
| author | David Herrmann <dh.herrmann@gmail.com> | 2013-12-19 06:32:24 -0500 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2014-02-17 15:18:35 -0500 |
| commit | 3ccfd0a8d7062a5590923578eea829ee582beba8 (patch) | |
| tree | 5b9ef9e48ef3964b36ab103964077cd84ee45e9b | |
| parent | a4b1b5877b514b276f0f31efe02388a9c2836728 (diff) | |
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>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
| -rw-r--r-- | drivers/hid/hid-hyperv.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c index 8fae6d1414cc..c24908f14934 100644 --- a/drivers/hid/hid-hyperv.c +++ b/drivers/hid/hid-hyperv.c | |||
| @@ -157,6 +157,7 @@ struct mousevsc_dev { | |||
| 157 | u32 report_desc_size; | 157 | u32 report_desc_size; |
| 158 | struct hv_input_dev_info hid_dev_info; | 158 | struct hv_input_dev_info hid_dev_info; |
| 159 | struct hid_device *hid_device; | 159 | struct hid_device *hid_device; |
| 160 | u8 input_buf[HID_MAX_BUFFER_SIZE]; | ||
| 160 | }; | 161 | }; |
| 161 | 162 | ||
| 162 | 163 | ||
| @@ -256,6 +257,7 @@ static void mousevsc_on_receive(struct hv_device *device, | |||
| 256 | struct synthhid_msg *hid_msg; | 257 | struct synthhid_msg *hid_msg; |
| 257 | struct mousevsc_dev *input_dev = hv_get_drvdata(device); | 258 | struct mousevsc_dev *input_dev = hv_get_drvdata(device); |
| 258 | struct synthhid_input_report *input_report; | 259 | struct synthhid_input_report *input_report; |
| 260 | size_t len; | ||
| 259 | 261 | ||
| 260 | pipe_msg = (struct pipe_prt_msg *)((unsigned long)packet + | 262 | pipe_msg = (struct pipe_prt_msg *)((unsigned long)packet + |
| 261 | (packet->offset8 << 3)); | 263 | (packet->offset8 << 3)); |
| @@ -300,9 +302,12 @@ static void mousevsc_on_receive(struct hv_device *device, | |||
| 300 | (struct synthhid_input_report *)pipe_msg->data; | 302 | (struct synthhid_input_report *)pipe_msg->data; |
| 301 | if (!input_dev->init_complete) | 303 | if (!input_dev->init_complete) |
| 302 | break; | 304 | break; |
| 303 | hid_input_report(input_dev->hid_device, | 305 | |
| 304 | HID_INPUT_REPORT, input_report->buffer, | 306 | len = min(input_report->header.size, |
| 305 | input_report->header.size, 1); | 307 | (u32)sizeof(input_dev->input_buf)); |
| 308 | memcpy(input_dev->input_buf, input_report->buffer, len); | ||
| 309 | hid_input_report(input_dev->hid_device, HID_INPUT_REPORT, | ||
| 310 | input_dev->input_buf, len, 1); | ||
| 306 | break; | 311 | break; |
| 307 | default: | 312 | default: |
| 308 | pr_err("unsupported hid msg type - type %d len %d", | 313 | pr_err("unsupported hid msg type - type %d len %d", |
