From: <gregkh@linuxfoundation.org>
To: David.Laight@ACULAB.COM,David.Laight@aculab.com,agk@redhat.com,airlied@gmail.com,akpm@linux-foundation.org,alexander.deucher@amd.com,amd-gfx@lists.freedesktop.org,andriy.shevchenko@linux.intel.com,arnd@kernel.org,asad.kamal@amd.com,christian.koenig@amd.com,clm@fb.com,dm-devel@lists.linux.dev,dmitry.torokhov@gmail.com,dri-devel@lists.freedesktop.org,dsterba@suse.com,farbere@amazon.com,gregkh@linuxfoundation.org,jernej.skrabec@gmail.com,kenneth.feng@amd.com,kevinyang.wang@amd.com,lijo.lazar@amd.com,linus.walleij@linaro.org,linux-arm-kernel@lists.infradead.org,linux-sunxi@lists.linux.dev,linux@rasmusvillemoes.dk,luc.vanoostenryck@gmail.com,mpatocka@redhat.com,pmladek@suse.com,rostedt@goodmis.org,samuel@sholland.org,senozhatsky@chromium.org,simona@ffwll.ch,snitzer@kernel.org,tglx@linutronix.de,torvalds@linux-foundation.org,wens@csie.org
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "minmax: fix up min3() and max3() too" has been added to the 6.1-stable tree
Date: Mon, 06 Oct 2025 12:39:09 +0200 [thread overview]
Message-ID: <2025100609-exposable-subside-4c76@gregkh> (raw)
In-Reply-To: <20251003121520.8176-5-farbere@amazon.com>
This is a note to let you know that I've just added the patch titled
minmax: fix up min3() and max3() too
to the 6.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
minmax-fix-up-min3-and-max3-too.patch
and it can be found in the queue-6.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
From stable+bounces-183175-greg=kroah.com@vger.kernel.org Fri Oct 3 14:17:52 2025
From: Eliav Farber <farbere@amazon.com>
Date: Fri, 3 Oct 2025 12:15:13 +0000
Subject: minmax: fix up min3() and max3() too
To: <gregkh@linuxfoundation.org>, <kenneth.feng@amd.com>, <alexander.deucher@amd.com>, <christian.koenig@amd.com>, <airlied@gmail.com>, <simona@ffwll.ch>, <linus.walleij@linaro.org>, <dmitry.torokhov@gmail.com>, <tglx@linutronix.de>, <wens@csie.org>, <jernej.skrabec@gmail.com>, <samuel@sholland.org>, <agk@redhat.com>, <snitzer@kernel.org>, <mpatocka@redhat.com>, <clm@fb.com>, <dsterba@suse.com>, <luc.vanoostenryck@gmail.com>, <pmladek@suse.com>, <rostedt@goodmis.org>, <andriy.shevchenko@linux.intel.com>, <linux@rasmusvillemoes.dk>, <senozhatsky@chromium.org>, <akpm@linux-foundation.org>, <lijo.lazar@amd.com>, <asad.kamal@amd.com>, <kevinyang.wang@amd.com>, <David.Laight@ACULAB.COM>, <amd-gfx@lists.freedesktop.org>, <dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>, <linux-input@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <linux-sunxi@lists.linux.dev>, <dm-devel@lists.linux.dev>, <linux-btrfs@vger.kernel.org>, <linux-sparse@vger.kernel.org>, <stable@vger.
kernel.org>, <farbere@amazon.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>, David Laight <David.Laight@aculab.com>, Arnd Bergmann <arnd@kernel.org>
Message-ID: <20251003121520.8176-5-farbere@amazon.com>
From: Linus Torvalds <torvalds@linux-foundation.org>
[ Upstream commit 21b136cc63d2a9ddd60d4699552b69c214b32964 ]
David Laight pointed out that we should deal with the min3() and max3()
mess too, which still does excessive expansion.
And our current macros are actually rather broken.
In particular, the macros did this:
#define min3(x, y, z) min((typeof(x))min(x, y), z)
#define max3(x, y, z) max((typeof(x))max(x, y), z)
and that not only is a nested expansion of possibly very complex
arguments with all that involves, the typing with that "typeof()" cast
is completely wrong.
For example, imagine what happens in max3() if 'x' happens to be a
'unsigned char', but 'y' and 'z' are 'unsigned long'. The types are
compatible, and there's no warning - but the result is just random
garbage.
No, I don't think we've ever hit that issue in practice, but since we
now have sane infrastructure for doing this right, let's just use it.
It fixes any excessive expansion, and also avoids these kinds of broken
type issues.
Requested-by: David Laight <David.Laight@aculab.com>
Acked-by: Arnd Bergmann <arnd@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Eliav Farber <farbere@amazon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/minmax.h | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
--- a/include/linux/minmax.h
+++ b/include/linux/minmax.h
@@ -152,13 +152,20 @@
#define umax(x, y) \
__careful_cmp(max, (x) + 0u + 0ul + 0ull, (y) + 0u + 0ul + 0ull)
+#define __careful_op3(op, x, y, z, ux, uy, uz) ({ \
+ __auto_type ux = (x); __auto_type uy = (y);__auto_type uz = (z);\
+ BUILD_BUG_ON_MSG(!__types_ok3(x,y,z,ux,uy,uz), \
+ #op"3("#x", "#y", "#z") signedness error"); \
+ __cmp(op, ux, __cmp(op, uy, uz)); })
+
/**
* min3 - return minimum of three values
* @x: first value
* @y: second value
* @z: third value
*/
-#define min3(x, y, z) min((typeof(x))min(x, y), z)
+#define min3(x, y, z) \
+ __careful_op3(min, x, y, z, __UNIQUE_ID(x_), __UNIQUE_ID(y_), __UNIQUE_ID(z_))
/**
* max3 - return maximum of three values
@@ -166,7 +173,8 @@
* @y: second value
* @z: third value
*/
-#define max3(x, y, z) max((typeof(x))max(x, y), z)
+#define max3(x, y, z) \
+ __careful_op3(max, x, y, z, __UNIQUE_ID(x_), __UNIQUE_ID(y_), __UNIQUE_ID(z_))
/**
* min_not_zero - return the minimum that is _not_ zero, unless both are zero
Patches currently in stable-queue which might be from farbere@amazon.com are
queue-6.1/minmax-improve-macro-expansion-and-type-checking.patch
queue-6.1/minmax.h-simplify-the-variants-of-clamp.patch
queue-6.1/minmax.h-move-all-the-clamp-definitions-after-the-min-max-ones.patch
queue-6.1/minmax-don-t-use-max-in-situations-that-want-a-c-constant-expression.patch
queue-6.1/minmax.h-remove-some-defines-that-are-only-expanded-once.patch
queue-6.1/minmax.h-use-build_bug_on_msg-for-the-lo-hi-test-in-clamp.patch
queue-6.1/minmax-simplify-min-max-clamp-implementation.patch
queue-6.1/minmax.h-add-whitespace-around-operators-and-after-commas.patch
queue-6.1/minmax-fix-up-min3-and-max3-too.patch
queue-6.1/minmax.h-reduce-the-define-expansion-of-min-max-and-clamp.patch
queue-6.1/minmax.h-update-some-comments.patch
next prev parent reply other threads:[~2025-10-06 10:40 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-03 12:15 [PATCH v4 00/11 6.1.y] Backport minmax.h updates from v6.17-rc7 Eliav Farber
2025-10-03 12:15 ` [PATCH v4 01/11 6.1.y] minmax: don't use max() in situations that want a C constant expression Eliav Farber
2025-10-06 10:39 ` Patch "minmax: don't use max() in situations that want a C constant expression" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 02/11 6.1.y] minmax: simplify min()/max()/clamp() implementation Eliav Farber
2025-10-06 10:39 ` Patch "minmax: simplify min()/max()/clamp() implementation" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 03/11 6.1.y] minmax: improve macro expansion and type checking Eliav Farber
2025-10-06 10:39 ` Patch "minmax: improve macro expansion and type checking" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 04/11 6.1.y] minmax: fix up min3() and max3() too Eliav Farber
2025-10-06 10:39 ` gregkh [this message]
2025-10-03 12:15 ` [PATCH v4 05/11 6.1.y] minmax.h: add whitespace around operators and after commas Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: add whitespace around operators and after commas" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 06/11 6.1.y] minmax.h: update some comments Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: update some comments" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 07/11 6.1.y] minmax.h: reduce the #define expansion of min(), max() and clamp() Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: reduce the #define expansion of min(), max() and clamp()" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 08/11 6.1.y] minmax.h: use BUILD_BUG_ON_MSG() for the lo < hi test in clamp() Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: use BUILD_BUG_ON_MSG() for the lo < hi test in clamp()" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 09/11 6.1.y] minmax.h: move all the clamp() definitions after the min/max() ones Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: move all the clamp() definitions after the min/max() ones" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 10/11 6.1.y] minmax.h: simplify the variants of clamp() Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: simplify the variants of clamp()" has been added to the 6.1-stable tree gregkh
2025-10-03 12:15 ` [PATCH v4 11/11 6.1.y] minmax.h: remove some #defines that are only expanded once Eliav Farber
2025-10-06 10:39 ` Patch "minmax.h: remove some #defines that are only expanded once" has been added to the 6.1-stable tree gregkh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2025100609-exposable-subside-4c76@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=David.Laight@ACULAB.COM \
--cc=agk@redhat.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=arnd@kernel.org \
--cc=asad.kamal@amd.com \
--cc=christian.koenig@amd.com \
--cc=clm@fb.com \
--cc=dm-devel@lists.linux.dev \
--cc=dmitry.torokhov@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=dsterba@suse.com \
--cc=farbere@amazon.com \
--cc=jernej.skrabec@gmail.com \
--cc=kenneth.feng@amd.com \
--cc=kevinyang.wang@amd.com \
--cc=lijo.lazar@amd.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=linux@rasmusvillemoes.dk \
--cc=luc.vanoostenryck@gmail.com \
--cc=mpatocka@redhat.com \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=samuel@sholland.org \
--cc=senozhatsky@chromium.org \
--cc=simona@ffwll.ch \
--cc=snitzer@kernel.org \
--cc=stable-commits@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).