So I finally have an arm64 laptop that I'm playing with, and as a result building the kernel the way I usually do - with warnings as errors.
And I get this: drivers/net/wireguard/allowedips.c: In function ‘root_remove_peer_lists’: drivers/net/wireguard/allowedips.c:77:1: error: the frame size of 1040 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] 77 | } | ^ drivers/net/wireguard/allowedips.c: In function ‘root_free_rcu’: drivers/net/wireguard/allowedips.c:64:1: error: the frame size of 1040 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] 64 | } | ^ and clearly it only happens for me because it turns out Asahi has for some odd reason picked that low CONFIG_FRAME_WARN of just 1kB. So the fix for the warning was just to update my .config file, no biggie. But when I look at the code that generates that warning, it just worries me. It has that magical constant 128. Sure, that same constant is also in push_rcu(). And there it is randomly as a warning, and then it will happily overflow the stack frame. That's not ok. I think that (a) that constant should be a bit lower, so that we *can* use a 1kB stack frame warning on 64-bit architectures (b) it should be documented some way as a #define (c) push_rcu() should damn well not "warn and corrupt the stack". It should warn-and-not-corrupt the stack, even if that then means that the thing isn't pushed at all. Hmm? Linus