UPSTREAM: usb: gadget: rndis: check size of RNDIS_MSG_SET command
Check the size of the RNDIS_MSG_SET command given to us before attempting to respond to an invalid message size. Bug: 162326603 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> (cherry picked from commit 38ea1eac7d88072bbffb630e2b3db83ca649b826) Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I61168b48de4ca79a3a28dd4d3b81779bc25554c1
This commit is contained in:

committed by
Todd Kjos

parent
c7732dbce5
commit
16d19b6561
@@ -637,14 +637,17 @@ static int rndis_set_response(struct rndis_params *params,
|
|||||||
rndis_set_cmplt_type *resp;
|
rndis_set_cmplt_type *resp;
|
||||||
rndis_resp_t *r;
|
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));
|
r = rndis_add_response(params, sizeof(rndis_set_cmplt_type));
|
||||||
if (!r)
|
if (!r)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
resp = (rndis_set_cmplt_type *)r->buf;
|
resp = (rndis_set_cmplt_type *)r->buf;
|
||||||
|
|
||||||
BufLength = le32_to_cpu(buf->InformationBufferLength);
|
|
||||||
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
|
|
||||||
|
|
||||||
#ifdef VERBOSE_DEBUG
|
#ifdef VERBOSE_DEBUG
|
||||||
pr_debug("%s: Length: %d\n", __func__, BufLength);
|
pr_debug("%s: Length: %d\n", __func__, BufLength);
|
||||||
pr_debug("%s: Offset: %d\n", __func__, BufOffset);
|
pr_debug("%s: Offset: %d\n", __func__, BufOffset);
|
||||||
|
Reference in New Issue
Block a user