Skip to content

Commit

Permalink
misc: fastrpc: fix improper packet size calculation
Browse files Browse the repository at this point in the history
commit 3a1bf59 upstream.

The buffer list is sorted and this is not being considered while
calculating packet size. This would lead to improper copy length
calculation for non-dmaheap buffers which would eventually cause
sending improper buffers to DSP.

Fixes: c68cfb7 ("misc: fastrpc: Add support for context Invoke method")
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Jeya R <jeyr@codeaurora.org>
Link: https://lore.kernel.org/r/1637771481-4299-1-git-send-email-jeyr@codeaurora.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Jeya R authored and gregkh committed Dec 14, 2021
1 parent 62a8ee0 commit ee61046
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions drivers/misc/fastrpc.c
Expand Up @@ -719,16 +719,18 @@ static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx)
static u64 fastrpc_get_payload_size(struct fastrpc_invoke_ctx *ctx, int metalen)
{
u64 size = 0;
int i;
int oix;

size = ALIGN(metalen, FASTRPC_ALIGN);
for (i = 0; i < ctx->nscalars; i++) {
for (oix = 0; oix < ctx->nbufs; oix++) {
int i = ctx->olaps[oix].raix;

if (ctx->args[i].fd == 0 || ctx->args[i].fd == -1) {

if (ctx->olaps[i].offset == 0)
if (ctx->olaps[oix].offset == 0)
size = ALIGN(size, FASTRPC_ALIGN);

size += (ctx->olaps[i].mend - ctx->olaps[i].mstart);
size += (ctx->olaps[oix].mend - ctx->olaps[oix].mstart);
}
}

Expand Down

0 comments on commit ee61046

Please sign in to comment.