|
@@ -736,14 +736,10 @@ static int hidp_setup_hid(struct hidp_session *session,
|
|
struct hid_device *hid;
|
|
struct hid_device *hid;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
- session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
|
|
|
|
- if (!session->rd_data)
|
|
|
|
- return -ENOMEM;
|
|
|
|
|
|
+ session->rd_data = memdup_user(req->rd_data, req->rd_size);
|
|
|
|
+ if (IS_ERR(session->rd_data))
|
|
|
|
+ return PTR_ERR(session->rd_data);
|
|
|
|
|
|
- if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
|
|
|
|
- err = -EFAULT;
|
|
|
|
- goto fault;
|
|
|
|
- }
|
|
|
|
session->rd_size = req->rd_size;
|
|
session->rd_size = req->rd_size;
|
|
|
|
|
|
hid = hid_allocate_device();
|
|
hid = hid_allocate_device();
|