Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp508588pxv; Thu, 15 Jul 2021 09:08:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyoLENhkI969M/jhkGpjAzBjit/Xd+Wmw1pNjBTSVYjt+Q/1mUYhM5xDtXN7/mtwcRPSM+n X-Received: by 2002:a5e:d512:: with SMTP id e18mr3695528iom.149.1626365307342; Thu, 15 Jul 2021 09:08:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626365307; cv=none; d=google.com; s=arc-20160816; b=L9KkDSKy40zsRFCbPOuftHY0+fFZP6XWOv0LzsMkL8aN/10mN76M5s/BqUETu4+xM9 umX9Za8TH2uOMKSfL1TJyDSlDuFmw+KvbHIadLHrOPvTeG2AJPCh6Ztd0evAQuuH05a9 bHJe/UIzqBhXLXvBnWZY6UvJIiWKqSX8xCTCHZ58Li5ywBXauxU60mJPuLRf2wV7LZuf L+j68Ix9FoDdHiJMOp1juoIjnMEnk7rCiBkt8CR4UhWSW/7k2E8oLsvb+Jcx+JA3H58i eVVqQfHg5xyPz8m0MJloxFFJLcdzk0/iQKybs7p4qlimszmDbQLYER8N2UxVPbrjWmcQ cnmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :mime-version:user-agent:date:message-id:subject:from:cc:to :dkim-signature; bh=eLZW1fDEYy3o3BzwoAbd7HnBiJwGnZCewM6cIAUrDkQ=; b=JVIK7tAmFIxMIrPWDpLC+V16NVqmNCpOS8mGdaZywY5FFJsWubxz9rMMZXZ0GmkcuK dvUY2+jgBBmpYiU8YntscHZEVrJjgc4TSN91cfhMQoBIDZRgB0xOVXZ6AgFidgW6rMfI jiVkxBLtlj/VbCfq6bljZgHRg1MJ1S1i1/eCvIsXBHi+jIO+mK6E+vIS9sYqQO8SboNE JiyhJfE/CcQiTnaNmTUkCC1jrxVSXwvXEHbJbcXBo3W6JXhuQ3/GROxcIwVDpebsT+Mn Fyl9vD9Mr25Q9fKXBj2sEsST4AA/jtHcAj4SZZ667511XrBbyBNEhX9L/LX+DdW5/rLt nHzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b="LK/mkR/X"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a21si6969295jam.67.2021.07.15.09.08.12; Thu, 15 Jul 2021 09:08:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b="LK/mkR/X"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232160AbhGOMFH (ORCPT + 99 others); Thu, 15 Jul 2021 08:05:07 -0400 Received: from smtp-relay-canonical-1.canonical.com ([185.125.188.121]:55998 "EHLO smtp-relay-canonical-1.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232003AbhGOMFG (ORCPT ); Thu, 15 Jul 2021 08:05:06 -0400 Received: from [10.172.193.212] (1.general.cking.uk.vpn [10.172.193.212]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-1.canonical.com (Postfix) with ESMTPSA id 9CE604057E; Thu, 15 Jul 2021 12:02:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1626350530; bh=eLZW1fDEYy3o3BzwoAbd7HnBiJwGnZCewM6cIAUrDkQ=; h=To:Cc:From:Subject:Message-ID:Date:MIME-Version:Content-Type; b=LK/mkR/XWswD5xktMcKiF+M0Ts8qYjSryqqeSKK6Yebc4XU1RMG2ZaxWjsBLfdkfl APLyrU007ZJQLRwj77d86a1cI1WjYAoOx/C15W166FFYNFcMu4bvdtNzpdDX/Tkvrv QXhYHn85xjMCE9yDQ/at5n+DMWDMshreFF96Z8YOmv/a7SeEHFVfQ1MdTvUI2KmxqT zfOFZrote6kf/nqf3n7t6QVafUe/Mj3UFHmXaxT/qLQrnorASC1ioIMLZP/5BOG2sX vx+4mQawrYAZSQtbCQYSL+tTGu6pwsogA9bKhJ14ix1zF/UZi046DPjepIwYxKvj4T 88QdMaynRGVfA== To: Michael Holzheu , Martin Schwidefsky Cc: Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Ilya Leoshkevich , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , linux-s390@vger.kernel.org, "netdev@vger.kernel.org" , bpf@vger.kernel.org, "linux-kernel@vger.kernel.org" From: Colin Ian King Subject: Range checking on r1 in function reg_set_seen in arch/s390/net/bpf_jit_comp.c Message-ID: <845025d4-11b9-b16d-1dd6-1e0bd66b0e20@canonical.com> Date: Thu, 15 Jul 2021 13:02:10 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Static analysis with cppcheck picked up an interesting issue with the following inline helper function in arch/s390/net/bpf_jit_comp.c : static inline void reg_set_seen(struct bpf_jit *jit, u32 b1) { u32 r1 = reg2hex[b1]; if (!jit->seen_reg[r1] && r1 >= 6 && r1 <= 15) jit->seen_reg[r1] = 1; } Although I believe r1 is always within range, the range check on r1 is being performed before the more cache/memory expensive lookup on jit->seen_reg[r1]. I can't see why the range change is being performed after the access of jit->seen_reg[r1]. The following seems more correct: if (r1 >= 6 && r1 <= 15 && !jit->seen_reg[r1]) jit->seen_reg[r1] = 1; ..since the check on r1 are less expensive than !jit->seen_reg[r1] and also the range check ensures the array access is not out of bounds. I was just wondering if I'm missing something deeper to why the order is the way it is. Colin