From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936560AbcLMRRd (ORCPT ); Tue, 13 Dec 2016 12:17:33 -0500 Received: from foss.arm.com ([217.140.101.70]:57130 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933227AbcLMRR3 (ORCPT ); Tue, 13 Dec 2016 12:17:29 -0500 Date: Tue, 13 Dec 2016 17:16:32 +0000 From: Mark Rutland To: Colin King Cc: Boqun Feng , "Paul E . McKenney" , Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , linux-kernel@vger.kernel.org Subject: Re: [PATCH] rcu: shift by 1UL rather than 1 to fix sign extension error Message-ID: <20161213171632.GA32535@leverpostej> References: <20161213105646.9598-1-colin.king@canonical.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161213105646.9598-1-colin.king@canonical.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Tue, Dec 13, 2016 at 10:56:46AM +0000, Colin King wrote: > From: Colin Ian King > > mask and bit are unsigned longs, so if bit is 31 we end up sign > extending the 1 and mask ends up as 0xffffffff80000000. Fix this > by explicitly adding integer suffix UL ensure 1 is a unsigned long > rather than an signed int. > > Issue found with static analysis with CoverityScan, CID 1388564 > > Fixes: 8965c3ce4718754db ("rcu: Use leaf_node_for_each_mask_possible_cpu() in force_qs_rnp()") > Signed-off-by: Colin Ian King > --- > kernel/rcu/tree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 10162ac..6ecedd8 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -3051,7 +3051,7 @@ static void force_qs_rnp(struct rcu_state *rsp, > > leaf_node_for_each_mask_possible_cpu(rnp, rnp->qsmask, bit, cpu) > if (f(per_cpu_ptr(rsp->rda, cpu), isidle, maxj)) > - mask |= 1 << bit; > + mask |= 1UL << bit; So as to match the rest of the code altered in commit bc75e99983df1efd ("rcu: Correctly handle sparse possible cpus"), and regardless of naming, I think it'd be nicer to use leaf_node_cpu_bit(), e.g. leaf_node_for_each_mask_possible_cpu(rnp, rnp->qsmask, bit, cpu) if (f(per_cpu_ptr(rsp->rda, cpu), isidle, maxj)) mask |= leaf_node_cpu_bit(rnp, cpu); IMO, it would be nice to hide the iterator bit somehow, to match for_each_leaf_node_possible_cpu(), which this largely looks similar to otherwise. Thanks, Mark.