From patchwork Sat May 4 16:12:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin King X-Patchwork-Id: 10930485 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 25048933 for ; Mon, 6 May 2019 06:13:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1293427DA4 for ; Mon, 6 May 2019 06:13:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 070092863D; Mon, 6 May 2019 06:13:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D959928673 for ; Mon, 6 May 2019 06:13:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=8AYbxg3QxJdPbr5V0w+D6M7d0lZ9g4IRyYv3wCn9fts=; b=rsZAjTDXRFWXsv sE74RGq1QFFzi+jhB/jjSe+t1pzc2aWjTLM5UVchusBrAyZasXSo7B0mc0QGnLwK2lyjIBsp++rI1 1EiqNc/uFNH0O9NA+INQaMc5UqeFmFct1NvS8fxoMnk7S8bDJZp3H2G1wQRpXDA7dS6PMVuPSLat1 v9I206mJ+oe8eWcYW0jFzLTygQtiVNm10WEnZNUoVyc2MIa/4xQjXtbJYU6bWcAs1TPQY0//s0Mf4 AcSMadunqTezRnj0D7LuRXsroADk3NS6PvGoTJU8j7sICfZ23mChmD9iszd9Qthgwf/bVRTFsH8eO fnSSvtBuQz5gYpOhMSGQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNWsY-0000Sq-7e; Mon, 06 May 2019 06:13:34 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hMxHN-0001eg-CB for linux-i3c@lists.infradead.org; Sat, 04 May 2019 16:12:50 +0000 Received: from 1.general.cking.uk.vpn ([10.172.193.212] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1hMxHI-00035w-5A; Sat, 04 May 2019 16:12:44 +0000 From: Colin King To: Boris Brezillon , linux-i3c@lists.infradead.org Subject: [PATCH] i3c: fix undefined behaviour of a shift of an int by more than 31 places Date: Sat, 4 May 2019 17:12:43 +0100 Message-Id: <20190504161243.18879-1-colin.king@canonical.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190504_091249_546845_AC3DE309 X-CRM114-Status: UNSURE ( 7.45 ) X-CRM114-Notice: Please train this message. X-Mailman-Approved-At: Sun, 05 May 2019 23:13:27 -0700 X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux I3C List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org Sender: "linux-i3c" Errors-To: linux-i3c-bounces+linux-i3c=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Colin Ian King Currently the shift of two enum ints by more than 31 places on can result in undefined behaviour with 64 bit longs. Fix this by casting the ints to unsigned long before the shift. Addresses-Coverity: ("Bad shift operation") Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure") Signed-off-by: Colin Ian King --- drivers/i3c/master.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index 1412abcff010..752256d4078f 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -385,8 +385,9 @@ static void i3c_bus_set_addr_slot_status(struct i3c_bus *bus, u16 addr, return; ptr = bus->addrslots + (bitpos / BITS_PER_LONG); - *ptr &= ~(I3C_ADDR_SLOT_STATUS_MASK << (bitpos % BITS_PER_LONG)); - *ptr |= status << (bitpos % BITS_PER_LONG); + *ptr &= ~((unsigned long)I3C_ADDR_SLOT_STATUS_MASK << + (bitpos % BITS_PER_LONG)); + *ptr |= (unsigned long)status << (bitpos % BITS_PER_LONG); } static bool i3c_bus_dev_addr_is_avail(struct i3c_bus *bus, u8 addr)