From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755013AbdC1KBf (ORCPT ); Tue, 28 Mar 2017 06:01:35 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:64008 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753702AbdC1KBD (ORCPT ); Tue, 28 Mar 2017 06:01:03 -0400 From: Arnd Bergmann To: Tom Lendacky , Gary Hook , Herbert Xu , "David S. Miller" Cc: Arnd Bergmann , linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] crypto: ccp - Reduce stack frame size with KASAN Date: Tue, 28 Mar 2017 11:58:04 +0200 Message-Id: <20170328095814.3734615-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:nc38Xy+sBbylv5NtuNSktzn12WlIyJ7WwnEi2ZohHY7yRyTQMgl NHlBG1aekauAY7wDAglvnLu33L6VMx+XtqJnbJurCQQXeTYoZUcehUKGXyzkMRmzVe/68aF GE2XfBlPjcYM1edlZacJcl5KD0OsTE/rJvyZqiktEMFrGbILax0JHnbUAdlelAwcP7kFy9G 0nt/AtGgWk5VU1DSPjz3A== X-UI-Out-Filterresults: notjunk:1;V01:K0:XbK1z00X0rk=:IyH7z7pLdqrdCFOCMiZLkz MT8l/7qxiWMmOLY0eCnk40HTx1g1bgAEIJGOC5PuuYgO0cAv4hhdJh+YUtS13X8UofeXXCcR3 Xn6Q2Pmuy5/WgWlRvMY+f1pWsrm3To3OW+V5ycYy7V45x9vl9TNxw+fMH+Ij2Mc/5r+yGh4nE bPf4WtWCkdj9nSP9e3WofPN2rgCGadeqtpjQ3NM48iYdlRwoGSrSs9cu6LqWJMkg7SouabXKC JcYXpKW7hDzx7L9udvw4Di4T9XWfPfqR06x96qb/P/RS8nI5TOFo2a0Bz/wnE7tD8eEGre9XA zSvz80Z5XJr2WX3/8Bol7bMZZVmjJ0m2iYrsWgHLgh+ucLoSOFYFbE0vufiktPlNFa66c8c03 Fxm/50cHEGlicVwsuaBDvtSfx4rjI9kg2eQ5W6UKDANOcpdXkOK10A3TtC5oW4PHVsyANsyzJ rwqmjF+cLZjjZSRjQPLq/oEw5L+CuJ6U4ftYCGhjcP+KYEiSMPh/I8ez70TeS0r/bUlpZBhcb 8ele4nPcCS2CpE4EgWs3+6Wgo7Tdd7Uiy248AWdWZrr3EJmGRW+Qrv2q45l/+773iUv/fU7/D +Qwli2zIgjY9vjl9sDg7rYCvHeV0AUlbBFiuFRNn1rKDUGd3enTavmLoZS/PCw5nAHcMoVI94 b5LjCJrzkaEOoedROYiMXbCCi3qR3Edt5AtqJ0/zGJROGglP7xcU690eGPeP4HSRbwSU= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The newly added AES GCM implementation uses one of the largest stack frames in the kernel, around 1KB on normal 64-bit kernels, and 1.6KB when CONFIG_KASAN is enabled: drivers/crypto/ccp/ccp-ops.c: In function 'ccp_run_aes_gcm_cmd': drivers/crypto/ccp/ccp-ops.c:851:1: error: the frame size of 1632 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] This is problematic for multiple reasons: - The crypto functions are often used in deep call chains, e.g. behind mm, fs and dm layers, making it more likely to run into an actual stack overflow - Using this much stack space is an indicator that the code is not written to be as efficient as it could be. - While this goes unnoticed at the moment in mainline with the frame size warning being disabled when KASAN is in use, I would like to enable the warning again, and the current code is slightly above my arbitrary pick for a limit of 1536 bytes (I already did patches for every other driver exceeding this). A more drastic refactoring of the driver might be needed to reduce the stack usage more substantially, but this patch is fairly simple and at least addresses the third one of the problems I mentioned, reducing the stack size by about 150 bytes and bringing it below the warning limit I picked. Fixes: 36cf515b9bbe ("crypto: ccp - Enable support for AES GCM on v5 CCPs") Signed-off-by: Arnd Bergmann --- drivers/crypto/ccp/ccp-dev.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h index 3a45c2af2fbd..c5ea0796a891 100644 --- a/drivers/crypto/ccp/ccp-dev.h +++ b/drivers/crypto/ccp/ccp-dev.h @@ -432,24 +432,24 @@ struct ccp_dma_info { unsigned int offset; unsigned int length; enum dma_data_direction dir; -}; +} __packed __aligned(4); struct ccp_dm_workarea { struct device *dev; struct dma_pool *dma_pool; - unsigned int length; u8 *address; struct ccp_dma_info dma; + unsigned int length; }; struct ccp_sg_workarea { struct scatterlist *sg; int nents; + unsigned int dma_count; struct scatterlist *dma_sg; struct device *dma_dev; - unsigned int dma_count; enum dma_data_direction dma_dir; unsigned int sg_used; -- 2.9.0