From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751396AbdJXF3p (ORCPT ); Tue, 24 Oct 2017 01:29:45 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:50738 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750783AbdJXF3o (ORCPT ); Tue, 24 Oct 2017 01:29:44 -0400 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20171024052942epoutp0326fa3a69fc1372b752fb6108c8019304~waoI0GqJy1928919289epoutp03Y X-AuditID: b6c32a49-343ff70000001169-95-59eecfc6ad73 From: Ayush Mittal To: aryabinin@virtuozzo.com, dhowells@redhat.com, james.l.morris@oracle.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: Tue, 24 Oct 2017 10:57:03 +0530 Message-Id: <1508822823-31231-1-git-send-email-ayush.m@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOIsWRmVeSWpSXmKPExsWy7bCmuu6x8+8iDWa/Ere4uDvV4sukd+wW V37vZ7d41/SbxaLvcZDF5V1z2CzuvdnKZHHo5FxGBw6Pj09vsXi833eVzaNvyypGj8+b5Dxe 7z/EGMAaxWWTkpqTWZZapG+XwJVx7m1WwUKxisez9rE3ME4X6mLk5JAQMJFoOLmIqYuRi0NI YDejxNl9zewQzidGiY1n5jJCON8YJX4u3cncxcgO1rJcAyK8l1HiUet0FgjnC6PEtd5rzCBj 2QQ0JA6smsoCYosIZEvMP9LDDmIzC+RIXLs/nw3EFhZwlph2bA9YDYuAqsTtd9sZQWxeoPij z2/YIM6Tkzh5bDIryAIJgUY2ianzNjJDJFwkTs2EaJAQEJZ4dXwLO4QtJfGyv40doqGZUWL1 jd9MEE4Po8SfrttMEFX2Eg9uHAWq4gA6SVNi/S59iLCtxMIrE1ggLuWT6P39hAmkREKAV6Kj DRpeihKrVpyD2ushsfvJS6iJjhK/G7rBjhYSiJXY+bmVZQKj7CyEBQsYGVcxSqYWFOempxab FhjmpZbrFSfmFpfmpesl5+duYgRHv5bnDsZZ53wOMQpwMCrx8DaYv4sUYk0sK67MPcQowcGs JMK7bzdQiDclsbIqtSg/vqg0J7X4EKM0B4uSOO+xnaWRQgLpiSWp2ampBalFMFkmDk6pBsaK UxwGiVZHL21SWccevpP726btjPcPvg/Ylm2RJnfiAEesvYVsncLm/iVmhyKi9/Dn1DXPjlzf y+bSGf7Zb9XBY38nfUq9ncFao5Lh/LQkuLA5Sb9Oj4HhTveT14p/eq7Gxtsp//Nu4f11pPj7 UtkD2iUbr4uofDAKcwviS7wf9n3esSkPvymxFGckGmoxFxUnAgAzFkPK+gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuphluLIzCtJLcpLzFFi42LZdlhJXvfY+XeRBhdOs1hc3J1q8WXSO3aL K7/3s1u8a/rNYtH3OMji8q45bBb33mxlsjh0ci6jA4fHx6e3WDze77vK5tG3ZRWjx+dNch6v 9x9iDGCN4rJJSc3JLEst0rdL4Mo49zarYKFYxeNZ+9gbGKcLdTGyc0gImEgs1+hi5OIQEtjN KLFy0wbmLkZOoLC4RPPxq1C2sMTKf8/ZIYo+MUpMfX4HLMEmoCFxYNVUFhBbRCBfYsHL3WBx ZoECiUmfNjKB2MICzhLTju0Bq2ERUJW4/W47I4jNCxR/9PkNG8QCOYmTxyazTmDkWcDIsIpR MrWgODc9t9iwwCgvtVyvODG3uDQvXS85P3cTIziMtLR2MJ44EX+IUYCDUYmH94blu0gh1sSy 4srcQ4wSHMxKIrz7dgOFeFMSK6tSi/Lji0pzUosPMUpzsCiJ88rnH4sUEkhPLEnNTk0tSC2C yTJxcEo1MAbFyC9U7djVIHHhSvzxjxOLjVXPvBUzZz/ocEIxdvI9sXMKDtnqMjGbF5zV14s0 8NXSd97YLWso4sMaU/0/tHzW9Dt+DnlCIU82ZPg8+K/A8F64VsTllKWtZqTo3TUm2m+Pn1iq uNj+9aeam08K3H9Me/bsnDa329aMYzcft6x8Vh7FO/3QISWW4oxEQy3mouJEAPBMpKwfAgAA X-CMS-MailID: 20171024052942epcas5p48384a3861fbfa90a37a03236828b9b67 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-MTR: 20171024052942epcas5p48384a3861fbfa90a37a03236828b9b67 CMS-TYPE: 105P X-CMS-RootMailID: 20171024052942epcas5p48384a3861fbfa90a37a03236828b9b67 X-RootMTR: 20171024052942epcas5p48384a3861fbfa90a37a03236828b9b67 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