Re: [PATCH 5/5] types: Add standard __ob_trap and __ob_wrap scalar types
From: Linus Torvalds
Date: Tue Mar 31 2026 - 19:57:26 EST
On Tue, 31 Mar 2026 at 14:50, Justin Stitt <justinstitt@xxxxxxxxxx> wrote:
>
> How do we feel about type-defined labels? We can specify sane default
> handlers where we define the types:
>
> typedef int __attribute__((overflow_behavior(trap, __handle_me)));
>
> ... and define specialized handlers later on
That sounds like an interesting interface, but I think it ends up
being kind of odd, because normally the type definition would be in
some global scope, while the 'handler' would be a local label name.
I think that in some situations - and certainly other projects - it
would make a lot of sense to have the trap handler be a global
function in that situation (ie "abort"), but with that being
explicitly *not* what the kernel would want, it seems a bit odd to
specify the name of a label that then is used in a totally different
context.
So in your example:
> int func()
> {
> ...
> u8 __attribute__((overflow_behavior(trap, __BOOOOM))) product = 5;
> ...
> product = a * b; // if store is truncated, goto __overflow
> ...
> return product;
>
> __BOOOOM:
> pr_info("%u\n", product); // shows "5"
> return -1;
> }
The above makes total sense, but imagine instead the code being
something more like this:
Some header file does this:
typedef unsigned int __attribute__((overflow_behavior(trap,
__BOOOOM))) u32_overflow_t;
struct some_random_struct {
u32_overflow_t usage_count;
...
};
The implementation for looking up those structs then looks something like this:
struct some_random_struct *get_entry(int hashval)
{
struct some_random_struct *n;
spin_lock(&hashlock);
n = find_entry(hashval);
if (n)
n->usage_count++;
spin_unlock(&hashlock);
return n;
__BOOOOM:
WARN_ON_ONCE("Entry 'n' overflowed\n", n->name);
spin_unlock(&hashlock);
return NULL;
}
does that still make sense?
Now, I'm not *opposed* to this kind of interface - we'd presumably
just use something like "overflow" for the label name anyway - and it
allows people to use whatever label names make sense for a project so
it's clearly a nice feature.
It just feels a bit odd. But maybe it makes perfect sense at a
compiler level as a "it's just declaring the token to be used for the
exception label".
Linus