usb: gadget: rndis: check size of RNDIS_MSG_SET command
commit 38ea1eac7d
upstream.
Check the size of the RNDIS_MSG_SET command given to us before
attempting to respond to an invalid message size.
Reported-by: Szymon Heidrich <szymon.heidrich@gmail.com>
Cc: stable@kernel.org
Tested-by: Szymon Heidrich <szymon.heidrich@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: samuelliao <samuelliao@tencent.com>
This commit is contained in:
parent
3425449eb4
commit
49dad487c9
|
@ -637,14 +637,17 @@ static int rndis_set_response(struct rndis_params *params,
|
|||
rndis_set_cmplt_type *resp;
|
||||
rndis_resp_t *r;
|
||||
|
||||
BufLength = le32_to_cpu(buf->InformationBufferLength);
|
||||
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
|
||||
if ((BufLength > RNDIS_MAX_TOTAL_SIZE) ||
|
||||
(BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE))
|
||||
return -EINVAL;
|
||||
|
||||
r = rndis_add_response(params, sizeof(rndis_set_cmplt_type));
|
||||
if (!r)
|
||||
return -ENOMEM;
|
||||
resp = (rndis_set_cmplt_type *)r->buf;
|
||||
|
||||
BufLength = le32_to_cpu(buf->InformationBufferLength);
|
||||
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
|
||||
|
||||
#ifdef VERBOSE_DEBUG
|
||||
pr_debug("%s: Length: %d\n", __func__, BufLength);
|
||||
pr_debug("%s: Offset: %d\n", __func__, BufOffset);
|
||||
|
|
Loading…
Reference in New Issue