From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754644AbdJLLHD (ORCPT ); Thu, 12 Oct 2017 07:07:03 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:50283 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752539AbdJLLHC (ORCPT ); Thu, 12 Oct 2017 07:07:02 -0400 X-AuditID: b6c32a49-99fff7000000104d-ef-59df4cd367c6 From: Ayush Mittal To: dmitry.kasatkin@gmail.com, linux-kernel@vger.kernel.org Cc: v.narang@samsung.com, a.sahrawat@samsung.com, pankaj.m@samsung.com, Ayush Mittal Subject: [PATCH 1/1] mpi: check for shift exponent greater than 31. Date: Thu, 12 Oct 2017 16:34:38 +0530 Message-Id: <1507806278-23611-1-git-send-email-ayush.m@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrIIsWRmVeSWpSXmKPExsWy7bCmuu5ln/uRBrcXc1pc3J1qceX3fnaL L0vrLC7vmsNmce/NViaLQyfnMjqweeycdZfdo2/LKkaPz5vkApijuGxSUnMyy1KL9O0SuDLO vc0qWChW8XjWPvYGxulCXYwcHBICJhKXjit1MXJxCAnsZpTYfn8ZM4TziVHiftd/NgjnG6PE koaHLF2MnGAdN/73QFXtZZTYPfsgE0hCSOALo0TnLVMQm01AQ+LAqqlgDSIC1hLTL2xhBbGZ BXIkrt2fzwZiCws4S0w7tgeshkVAVWLq+ddgNbxA8amdd9khlslJnDw2mRVkmYTAS1aJlpX7 2SHudpG4ccUDokZY4tXxLVD1UhKf3+1lg6hvZpRYfeM3E4TTwyjxp+s2E0SVvcSDG0fBBjEL aEqs36UPEbaVePF7CjvEoXwSvb+fMEHs4pXoaBOCKFGUWLXiHCOE7SExZ9pVZgjbUWJL7wFm kHIhgViJ+XsZJzDKzkKYv4CRcRWjZGpBcW56arFpgWFearlecWJucWleul5yfu4mRnBEa3nu YJx1zucQowAHoxIP7wSNe5FCrIllxZW5hxglOJiVRHgNLO9HCvGmJFZWpRblxxeV5qQWH2KU 5mBREuc9trM0UkggPbEkNTs1tSC1CCbLxMEp1cB4cOKf4q1RWhapzPWv97+IPtm0fUm/Ypbe PBaT9s2VXvxHKos93LhedMedKOJvWnJsz+bJO79J2ghP+RUoW+7dXlYwUXd++w9D9lA7n4a0 vitt+cJi05Y1BLBP4KmaebTzjX9c4dlSXZ5IXnWGDxoTLgUsV7X6JXyk8/WPsvlp25+4vZzI slmJpTgj0VCLuag4EQDuAZh75AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrFJMWRmVeSWpSXmKPExsWy7bCSnO4ln/uRBku7NS0u7k61uPJ7P7vF l6V1Fpd3zWGzuPdmK5PFoZNzGR3YPHbOusvu0bdlFaPH501yAcxRXDYpqTmZZalF+nYJXBnn 3mYVLBSreDxrH3sD43ShLkZODgkBE4kb/3uYuxi5OIQEdjNKPPj4hgUiIS7RfPwqM4QtLLHy 33N2iKJPjBI7GpaxgSTYBDQkDqyaCtYgImAr8e9qN1icWaBAYtKnjUwgtrCAs8S0Y3vAalgE VCWmnn/NCmLzAsWndt5lh1ggJ3Hy2GTWCYw8CxgZVjFKphYU56bnFhsWGOWllusVJ+YWl+al 6yXn525iBIeIltYOxhMn4g8xCnAwKvHwTtC4FynEmlhWXJl7iFGCg1lJhNfA8n6kEG9KYmVV alF+fFFpTmrxIUZpDhYlcV75/GORQgLpiSWp2ampBalFMFkmDk6pBkZNZ1aJqN/3LJZsPrac VayxdQWP62dnJ4YpexJlDeb9OJty7MuWx2sYz3ft+v4oQlVC8mZiZ7HmaoYontaXWSfUNitM ULroxfllEvuz+5JCO3Ldd7qrRMWr7zrs2HG/1r+gQle1bFb2zYXlE3+s8qv3CPp2gcGEb+M2 zX+itX8V3pU9UVi044cSS3FGoqEWc1FxIgB8o3bWDQIAAA== X-CMS-MailID: 20171012110658epcas5p14bf46cbbca920da1577ab0d58f06ad67 X-Msg-Generator: CA X-Sender-IP: 182.195.40.14 X-Local-Sender: =?UTF-8?B?QXl1c2ggTWl0dGFsG1NSSS1EZWxoaS1QbGF0Zm9ybSBTL1cg?= =?UTF-8?B?MSBUZWFtG+yCvOyEseyghOyekBtFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QXl1c2ggTWl0dGFsG1NSSS1EZWxoaS1QbGF0Zm9ybSBTL1cg?= =?UTF-8?B?MSBUZWFtG1NhbXN1bmcgRWxlY3Ryb25pY3MbRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1NXQUhRG0MxMElEMDJJRDAyODExNQ==?= Content-Type: text/plain; charset="utf-8" X-MTR: 20171012110658epcas5p14bf46cbbca920da1577ab0d58f06ad67 CMS-TYPE: 105P X-CMS-RootMailID: 20171012110658epcas5p14bf46cbbca920da1577ab0d58f06ad67 X-RootMTR: 20171012110658epcas5p14bf46cbbca920da1577ab0d58f06ad67 References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch check for shift exponent greater than 31, detected by UBSAN. 1)UBSAN: Undefined behaviour in lib/mpi/generic_mpih-lshift.c:57:22 shift exponent 32 is too large for 32-bit type 'long unsigned int' 2)UBSAN: Undefined behaviour in lib/mpi/generic_mpih-lshift.c:60:20 shift exponent 32 is too large for 32-bit type 'long unsigned int' 3)UBSAN: Undefined behaviour in lib/mpi/generic_mpih-rshift.c:57:21 shift exponent 32 is too large for 32-bit type 'long unsigned int' 4) UBSAN: Undefined behaviour in lib/mpi/generic_mpih-rshift.c:60:19 shift exponent 32 is too large for 32-bit type 'long unsigned int' So instead of undefined behaviour defining behaviour when shift exponent is greater than 31 then value will be Zero . Signed-off-by: Ayush Mittal Signed-off-by: Vaneet Narang --- lib/mpi/generic_mpih-lshift.c | 6 +++--- lib/mpi/generic_mpih-rshift.c | 6 +++--- lib/mpi/mpi-internal.h | 3 +++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/mpi/generic_mpih-lshift.c b/lib/mpi/generic_mpih-lshift.c index 8631892..1c8277e 100644 --- a/lib/mpi/generic_mpih-lshift.c +++ b/lib/mpi/generic_mpih-lshift.c @@ -50,14 +50,14 @@ sh_2 = BITS_PER_MPI_LIMB - sh_1; i = usize - 1; low_limb = up[i]; - retval = low_limb >> sh_2; + retval = MPI_RSHIFT(low_limb, sh_2); high_limb = low_limb; while (--i >= 0) { low_limb = up[i]; - wp[i] = (high_limb << sh_1) | (low_limb >> sh_2); + wp[i] = MPI_LSHIFT(high_limb, sh_1) | MPI_RSHIFT(low_limb, sh_2); high_limb = low_limb; } - wp[i] = high_limb << sh_1; + wp[i] = MPI_LSHIFT(high_limb, sh_1); return retval; } diff --git a/lib/mpi/generic_mpih-rshift.c b/lib/mpi/generic_mpih-rshift.c index ffa3288..3a28bdd 100644 --- a/lib/mpi/generic_mpih-rshift.c +++ b/lib/mpi/generic_mpih-rshift.c @@ -50,14 +50,14 @@ wp -= 1; sh_2 = BITS_PER_MPI_LIMB - sh_1; high_limb = up[0]; - retval = high_limb << sh_2; + retval = MPI_LSHIFT(high_limb, sh_2); low_limb = high_limb; for (i = 1; i < usize; i++) { high_limb = up[i]; - wp[i] = (low_limb >> sh_1) | (high_limb << sh_2); + wp[i] = MPI_RSHIFT(low_limb, sh_1) | MPI_LSHIFT(high_limb, sh_2); low_limb = high_limb; } - wp[i] = low_limb >> sh_1; + wp[i] = MPI_RSHIFT(low_limb, sh_1); return retval; } diff --git a/lib/mpi/mpi-internal.h b/lib/mpi/mpi-internal.h index 7eceedd..9c94a98 100644 --- a/lib/mpi/mpi-internal.h +++ b/lib/mpi/mpi-internal.h @@ -37,6 +37,9 @@ #include #include +#define MPI_LSHIFT(val, shift) (shift >= BITS_PER_MPI_LIMB ? 0 : (val << shift)) +#define MPI_RSHIFT(val, shift) (shift >= BITS_PER_MPI_LIMB ? 0 : (val >> shift)) + #define log_debug printk #define log_bug printk -- 1.9.1