From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E3A044D01F for ; Tue, 20 Jan 2026 18:59:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768935543; cv=none; b=PoKbisj6jKKJOIS8uruXh3rcJqID0x8VncYtXwuf3Iv//3V8XaIAmGlJhsRr8O4Cdz/lcnTD+pfe4TJU3HsC0plV6hfWc+FLYL3AlJ+p2vO+5cOHlaS38W3sMmi+o6G6a+IjeaIeRAcFUOe0Oqx+Za1NiDZw9FEmD/a05mjSzPo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768935543; c=relaxed/simple; bh=mmRevhqJD2cqtOBzRHccadkYNjXrmt2vmmQodRBnNDA=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oxkaXiJh8cdlXhOWA+AJxm31ILB0ACAta4zBphIBKFmzKpqYo6si+/XPPsP8GqWMs+lvlER7lE13aL1S1BpCwLHbxrMjZsIndpub5drs3gtiQ/Q9A6LxnRNmKTry38WQ65wruBVrkaJZR0HnKWOEOKB1mPhkt5+CKzgr4k+fmPY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=m97Ej+Ps; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="m97Ej+Ps" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4801bc32725so28448675e9.0 for ; Tue, 20 Jan 2026 10:58:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768935538; x=1769540338; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=cAPCu/RpKENOOTOnO4UW+aE2Qt4dXEKMCwvAFOt9SCI=; b=m97Ej+PsOEI1IhO5EfevQ9qo3YvElXJiawe3+/3A58BtMVpHf5mzMrfDD69lszQstn hLAUGDp92jtX5GfU0SMfq/3HiCcjq6wjAAmKqWxcJD2pb/N8E+H5/7l5mPtswybpis3L 091AAzNY9WbWi958dZ3bfSN9GaK5H4W8jbdXXt1nKWaM8MdVWi8lrJZ94vKl0H41dQ1e eVMnxInawrocQRSeAVhhCxL+W7c5rVdaj0boOUbrrqjuhX2BRlHWFDjo2+ki4IMgMZGE D+aOq8IAXUdkUaPWr/SVTQ74KYsRIW31c4FJCgdWDtsEg58hhNi2MIdAvYZvhyVq6P9q H8oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768935538; x=1769540338; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cAPCu/RpKENOOTOnO4UW+aE2Qt4dXEKMCwvAFOt9SCI=; b=kXY7A7wEWtwYEAQ+WxPcp0f8q6ww2YHPHJLsjgmaVhXkVFJHf69s/zwXxdky/ZR03D gocb+grbGwGkU1BiMIQ5rMc1oowMWhIwVUt9fK+CV9EEBOeLGwX3TD6a+A/zud4IEd62 9IuoiQIVUuP3tlyejAbGUNjEScF5WIqEXsV2dAl031/ZH50aVxfCtZjEdfvQD03gdJDy 7n5sNaV0iMP9iLLAwXoN2e+vHbSAfPQ2YC4lE+9/3YpQehrpdD/fNySuZ+hRjQvC7ss+ IP3M7OE63ttfdu1A7F+FJHSG6ftxEVdjLNW1kbCNssx5swraegaFnDV28FhbrhH7j5OK 73HQ== X-Forwarded-Encrypted: i=1; AJvYcCVIsZxLTAUGn1LGKgjUtd0Ak25tIY3GzAxGmZy+ZDwhqbl8V1nY5PIKF9Xtjnq1QGP2U4fTlTdMsdIgUSw=@vger.kernel.org X-Gm-Message-State: AOJu0YwhzwavClvFzVPxZNx9kEw4Ry4aZcKKBVefIVgjnKEuCoWhnK7t 3jU8zasL/VtDXbnzprhsYpTueBat9tmYVT2t8Nm3ZPgQf+E89EC6aLTa X-Gm-Gg: AY/fxX4kjsUd21dRs8DEu4tvEitvhDLlRupOT7KN/AW+B6YfzCdB+y3y4J5eNd7AlRB sp4Ay1rM8ch1zs2qgJXsc5g5oPaT/lhzrZpLGnnXbgrtBgwTk/OTf6Px/xJckCtZqOxdbG0hyum XHio05j/j3O1H9PkfMOPScTJo4wD8LacpYT4PVKm3SUd3wx8NbuihuLiV8DERVQk2blECGKX3sj SmteaRhDiEhQk/rjDE0J/eHkmjHHHryCAMes+Ew+CjyqNOc1BF69uzZliFnvD0HzUUB3A1cnDhD mK7aJXpK0/xzMtPIma1PESjCHdRUU+r1BACfe6RRCTYeDCeXxHadcbGUuGTJ11cK8IFgvchA/sf RsxW45UuC6Km4ER81FsKUBtF1xki41867eyt7p72IQyXqpHFu5oD53x0SDrKwuYg70Nx8LnIt7A 5419eMaaHymDnFjWVEFjmDg+Ssq6jT1KRQZ7Fi0zV5gvm2pl0eCLvNom6DtAYAouE= X-Received: by 2002:a05:600c:8106:b0:480:1c2f:b003 with SMTP id 5b1f17b1804b1-4801eb09208mr178689305e9.20.1768935538383; Tue, 20 Jan 2026 10:58:58 -0800 (PST) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-480424961b8sm1696585e9.4.2026.01.20.10.58.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 10:58:58 -0800 (PST) Date: Tue, 20 Jan 2026 18:58:56 +0000 From: David Laight To: "H. Peter Anvin" Cc: David Desobry , tglx@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] x86/lib: Fix num_digits() signed overflow for INT_MIN Message-ID: <20260120185856.3d74efcb@pumpkin> In-Reply-To: <53DB5B87-BA96-44B1-AE1B-9055CB7B9350@zytor.com> References: <20260120094258.41313-1-david.desobry@formalgen.com> <53DB5B87-BA96-44B1-AE1B-9055CB7B9350@zytor.com> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Tue, 20 Jan 2026 08:23:16 -0800 "H. Peter Anvin" wrote: > On January 20, 2026 1:42:58 AM PST, David Desobry wrote: > >In num_digits(), the negation of the input value "val = -val" > >causes undefined behavior when val is INT_MIN, as its absolute > >value cannot be represented as a signed 32-bit integer. > > > >This leads to incorrect results (returning 2 instead of 11). > >By promoting the value to long long before negation, we ensure > >the absolute value is correctly handled. > > > >Signed-off-by: David Desobry > >--- > > arch/x86/lib/misc.c | 7 ++++--- > > 1 file changed, 4 insertions(+), 3 deletions(-) > > > >diff --git a/arch/x86/lib/misc.c b/arch/x86/lib/misc.c > >index 40b81c338ae5..c975db6ccb9f 100644 > >--- a/arch/x86/lib/misc.c > >+++ b/arch/x86/lib/misc.c > >@@ -8,15 +8,16 @@ > > */ > > int num_digits(int val) > > { > >+ long long v = val; > > long long m = 10; > > int d = 1; > > > >- if (val < 0) { > >+ if (v < 0) { > > d++; > >- val = -val; > >+ v = -v; > > } > > > >- while (val >= m) { > >+ while (v >= m) { > > m *= 10; > > d++; > > } > > That has got to be the dumbest possible implementation of that task, bug or no bug. And you really don't want to be doing 64bit maths on a 32bit system. > A switch statement would be simpler and faster. I think you mean a chain of if statement - you'd need a lot of them. But you could have: if (val < 0) { if (val < -999999999) return 11; val = -val; d++; } else { if (val > 999999999) return 10; } then use whatever scheme looks best. David