Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp2600445pxb; Tue, 21 Sep 2021 03:37:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy+lHAQPF8xl/q3+UwWIkVAjVyC77xCklKqC30Xx7DASc5iaf6Da5RX+yC8TBWPkJO3j/cB X-Received: by 2002:a05:6402:299:: with SMTP id l25mr34475863edv.343.1632220669903; Tue, 21 Sep 2021 03:37:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632220669; cv=none; d=google.com; s=arc-20160816; b=jpxcCwxz5OwXJLrLoKC/oMZx9uI/oEHwT+df3XctexaVp0Nw9zBmGaXipXuRvH2sd7 xCIqLIF2HcvTM037E2y1CYWh5p+w/Gq7h+W9ytBF0Z+tDLBUnFcizxQNIcUgdC2kzg13 NAyqWFOSiL08/VcTkn47sN3ZpZ69GHpkH96SPKJx6PcNI6V8775Sg5bvzd07y1pzP9qf chKldj7WLEba/CaAhUPwxFxCiQk6KfVosZ/EJzyWx7kMbUASb2URt+Ac4Uxg5VEy6giI Y2dGQIuUXSSkr9cOv1xXc7ZFRSGZiKFA9wIk5Ibt4r9NJidGqMHJaxXOWTjSmMmbnbZ+ dUvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=5gTyU4GuGCCqcnsmmiNIbX4jgeU1KkVx6kvZGt1qY8A=; b=f5s+EdBtm02/mQ2gxaI5GcHeyOixciNe0RlPP5Dlvcz7RLui8hHK7/SpMNaVvuzhdb DxK1XH4RzmpGQ+dMM7RO3b9zr1DdVhmanNWvSneKE1gKrdbWEkM6uQM16k0z+LkXZG1q e37JCLWq6Jg3tllcYXsf8HIjpcn3xxmhXKWvO480jk1IcPPA6nTTHMqgstyzND5AeBwQ qxM+glkXxebP7yM9MCdkqWzeT/hsc3bmWErFbi45UV7SWK5aROVCnvkojF5E5qy3RhoR MrgtCIIvfFv2BeMkQVQvDknzCDf/v1E6qE82zSM10ZGJBlrpnuRhQs5G7KcNpBfEJomg jJ7w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g29si8874180edf.308.2021.09.21.03.37.25; Tue, 21 Sep 2021 03:37:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232029AbhIUKhL (ORCPT + 99 others); Tue, 21 Sep 2021 06:37:11 -0400 Received: from alexa-out.qualcomm.com ([129.46.98.28]:26496 "EHLO alexa-out.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231797AbhIUKhL (ORCPT ); Tue, 21 Sep 2021 06:37:11 -0400 Received: from ironmsg07-lv.qualcomm.com ([10.47.202.151]) by alexa-out.qualcomm.com with ESMTP; 21 Sep 2021 03:35:43 -0700 X-QCInternal: smtphost Received: from ironmsg02-blr.qualcomm.com ([10.86.208.131]) by ironmsg07-lv.qualcomm.com with ESMTP/TLS/AES256-SHA; 21 Sep 2021 03:35:41 -0700 X-QCInternal: smtphost Received: from ekangupt-linux.qualcomm.com ([10.204.67.11]) by ironmsg02-blr.qualcomm.com with ESMTP; 21 Sep 2021 16:05:31 +0530 Received: by ekangupt-linux.qualcomm.com (Postfix, from userid 2319895) id AA5BC428F; Tue, 21 Sep 2021 16:05:29 +0530 (IST) From: Jeya R To: linux-arm-msm@vger.kernel.org, srinivas.kandagatla@linaro.org Cc: Jeya R , gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, fastrpc.upstream@qti.qualcomm.com Subject: [PATCH] misc: fastrpc: fix improper packet size calculation Date: Tue, 21 Sep 2021 16:05:27 +0530 Message-Id: <1632220527-29547-1-git-send-email-jeyr@codeaurora.org> X-Mailer: git-send-email 2.7.4 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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: c68cfb718c8f ("misc: fastrpc: Add support for context Invoke method") Signed-off-by: Jeya R --- drivers/misc/fastrpc.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index beda610..a7e550f 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -719,16 +719,21 @@ 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 = 0; 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].length == 0) + continue; + 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); } } -- 2.7.4