From patchwork Fri Nov 28 18:40:36 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tadeusz Struk X-Patchwork-Id: 5405781 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: X-Original-To: patchwork-linux-crypto@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 76BF49F443 for ; Fri, 28 Nov 2014 18:43:56 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B8E172015E for ; Fri, 28 Nov 2014 18:43:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DD16D20115 for ; Fri, 28 Nov 2014 18:43:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751216AbaK1Snu (ORCPT ); Fri, 28 Nov 2014 13:43:50 -0500 Received: from mga03.intel.com ([134.134.136.65]:19122 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751215AbaK1Snt (ORCPT ); Fri, 28 Nov 2014 13:43:49 -0500 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP; 28 Nov 2014 10:40:38 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,478,1413270000"; d="scan'208";a="615599273" Received: from tstruk-mobl1.intel.com (HELO [127.0.1.1]) ([134.134.171.50]) by orsmga001.jf.intel.com with ESMTP; 28 Nov 2014 10:43:30 -0800 Subject: [PATCH] crypto: algif - Mark sgl end at the end of data To: herbert@gondor.apana.org.au From: Tadeusz Struk Cc: linux-crypto@vger.kernel.org, davem@davemloft.net Date: Fri, 28 Nov 2014 10:40:36 -0800 Message-ID: <20141128184036.11421.36028.stgit@tstruk-mobl1> User-Agent: StGit/0.15 MIME-Version: 1.0 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi, algif_skcipher sends 127 sgl buffers for encryption regardless of how many buffers acctually have data to process, where the few first with valid len and the rest with zero len. This is not very eficient and may cause problems when algs do something like this without checking the buff lenght: for_each_sg(sgl, sg, sg_nents, i) sg_virt(sg) This patch marks the last one with data as the last one to process. Signed-off-by: Tadeusz Struk --- crypto/algif_skcipher.c | 6 ++++++ 1 file changed, 6 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c index f80e652..46a0758 100644 --- a/crypto/algif_skcipher.c +++ b/crypto/algif_skcipher.c @@ -441,6 +441,8 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock, char __user *from = iov->iov_base; while (seglen) { + int nents; + sgl = list_first_entry(&ctx->tsgl, struct skcipher_sg_list, list); sg = sgl->sg; @@ -468,6 +470,9 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock, if (!used) goto free; + nents = sg_nents(ctx->rsgl.sg); + sg_mark_end(&sg[nents - 1]); + ablkcipher_request_set_crypt(&ctx->req, sg, ctx->rsgl.sg, used, ctx->iv); @@ -477,6 +482,7 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock, crypto_ablkcipher_encrypt(&ctx->req) : crypto_ablkcipher_decrypt(&ctx->req), &ctx->completion); + sg_unmark_end(&sg[nents - 1]); free: af_alg_free_sg(&ctx->rsgl);