From patchwork Mon Mar 21 13:26:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolai Stange X-Patchwork-Id: 8633061 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.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id CAC8E9F372 for ; Mon, 21 Mar 2016 13:29:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id EC75C20304 for ; Mon, 21 Mar 2016 13:29:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1DF0C2026F for ; Mon, 21 Mar 2016 13:29:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755998AbcCUN0y (ORCPT ); Mon, 21 Mar 2016 09:26:54 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:36401 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755934AbcCUN0u (ORCPT ); Mon, 21 Mar 2016 09:26:50 -0400 Received: by mail-wm0-f66.google.com with SMTP id l68so21877330wml.3; Mon, 21 Mar 2016 06:26:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=eYmNJ7aQ+U+x9FVUHlgL4EjzOas3PecvEDrVtqNoOr4=; b=WvSfCd7+cWbB3A4KYQO35zF7ShcQWAX57W8fwCHn6lzeP5DUMuu+CDj8nARGHiaQau 35vFxwUCgG1sF8cWvnjtECPh3l6x8qSxO7r9KVmA3YQGJtRhfz51waD1kiorAMFi3sAM jszbLs/Cz+B8jJm3fffrYasAQW4XpyUtSs1BBhliy987FwnjTQR0zJyBGaeQFgqhp+tz ZwTXWvsLR+fQjEcM6kZHIfDq9XpplImXadRD1a+jX0s57nAJiX+OnUVHwI6ByXtRiUFF xYgKj9g22HbvcmY5xsKMTuD2MSwokjP6l1Mbr5FbvSNQS2zIJLThlBFc9CTR/6FFEfdr 5oTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=eYmNJ7aQ+U+x9FVUHlgL4EjzOas3PecvEDrVtqNoOr4=; b=Y3kkSZ629yPPhtZTW/8tC6vt0ny8w5CrA5ileC6nXQn5Jhw0CRe+aoAQwbCJS0hFZ1 S9NYN3er3ecSjisLKVXImSFxgX63XvuDr9I4MIkflAWYvwru+5gaaJgMp9VFq90CKJwq DliQ2hvpOIw6iaKzTATwGTmygU83faipk0wqL4yqF0Pheaj6bZzpQeEWI6HR6l/EYxpq mvxlR/MeQbMi8KaUObRQ4W8skj25n1o9ZWXFzBXKrV0n19RsNWnskKBlEcECHYVggdIh MrseCfq/GgNoyTkfSYF73Ad7cNHsP1DEuTCvyecnQdpkwcyuctN4/iWQWK6m3KyNMH5E gbBw== X-Gm-Message-State: AD7BkJIX2OCSJQ+ozMKE+Kp9HOg1y/xyfT2LNsa6HkTTzGzaM0DMA8TQZ+JWVI8WimESrg== X-Received: by 10.194.63.144 with SMTP id g16mr35059669wjs.149.1458566808464; Mon, 21 Mar 2016 06:26:48 -0700 (PDT) Received: from localhost (x55b18fc0.dyn.telefonica.de. [85.177.143.192]) by smtp.gmail.com with ESMTPSA id l135sm12527683wmb.13.2016.03.21.06.26.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Mar 2016 06:26:47 -0700 (PDT) From: Nicolai Stange To: Herbert Xu , "David S. Miller" Cc: Tadeusz Struk , Michal Marek , Andrzej Zaborowski , Stephan Mueller , Arnd Bergmann , linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, Nicolai Stange Subject: [PATCH RESEND v2 10/14] lib/mpi: mpi_read_raw_from_sgl(): don't include leading zero SGEs in nbytes Date: Mon, 21 Mar 2016 14:26:11 +0100 Message-Id: <1458566775-5239-11-git-send-email-nicstange@gmail.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1458566775-5239-1-git-send-email-nicstange@gmail.com> References: <1458566775-5239-1-git-send-email-nicstange@gmail.com> 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.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham 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 At the very beginning of mpi_read_raw_from_sgl(), the leading zeros of the input scatterlist are counted: lzeros = 0; for_each_sg(sgl, sg, ents, i) { ... if (/* sg contains nonzero bytes */) break; /* sg contains nothing but zeros here */ ents--; lzeros = 0; } Later on, the total number of trailing nonzero bytes is calculated by subtracting the number of leading zero bytes from the total number of input bytes: nbytes -= lzeros; However, since lzeros gets reset to zero for each completely zero leading sg in the loop above, it doesn't include those. Besides wasting resources by allocating a too large output buffer, this mistake propagates into the calculation of x, the number of leading zeros within the most significant output limb: x = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; What's more, the low order bytes of the output, equal in number to the extra bytes in nbytes, are left uninitialized. Fix this by adjusting nbytes for each completely zero leading scatterlist entry. Fixes: 2d4d1eea540b ("lib/mpi: Add mpi sgl helpers") Signed-off-by: Nicolai Stange --- lib/mpi/mpicoder.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index 2de2c7d..add9e81 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c @@ -447,16 +447,12 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes) break; ents--; + nbytes -= lzeros; lzeros = 0; } sgl = sg; - - if (!ents) - nbytes = 0; - else - nbytes -= lzeros; - + nbytes -= lzeros; nbits = nbytes * 8; if (nbits > MAX_EXTERN_MPI_BITS) { pr_info("MPI: mpi too large (%u bits)\n", nbits);