Re: [PATCH v2] x32: Implement prctl in assembly
Florian Weimer <[email protected]> Mon, 08 Dec 2025 15:25:05 +0100
| Newsgroups | org.kernel.vger.util-linux |
|---|---|
| Message-ID | <[email protected]> |
* Adhemerval Zanella Netto: > On 08/12/25 06:09, Florian Weimer wrote: >> * H. J. Lu: >> >>> On Mon, Dec 8, 2025 at 4:11 PM Florian Weimer <[email protected]> wrote: >>>> >>>> * H. J. Lu: >>>>> Here is the v2 patch to implement prctl in assembly for x32. >>>>> >>>>> Since the variadic prctl function takes at most 5 integer arguments which >>>>> are passed in the same integer registers on x32 as the function with 5 >>>>> integer arguments, we can use assembly for prctl. Since upper 32-bits in >>>>> the last 4 arguments of prctl must be cleared to match the x32 prctl >>>>> syscall interface where the last 4 arguments are unsigned 64 bit longs, >>>>> implement prctl in assembly to clear upper 32-bits in the last 4 arguments >>>>> and add a test to verify it. >>>> >>>> What's the advantage of the assembler implementation over the C >>>> implementation? I'm missing the context for this change. >>>> >>> >>> It is inspired by >>> >>> commit 6a04404521ac4119ae36827eeb288ea84eee7cf6 >>> Author: Florian Weimer <[email protected]> >>> Date: Sat Feb 17 09:17:04 2024 +0100 >>> >>> Linux: Switch back to assembly syscall wrapper for prctl (bug 29770) >> >> The justification for that does not apply to x32, though, because prctl >> doesn't take floating point arguments. I don't have a strong opinion, >> the C and assembler versions are of similar complexity. > > The main justification is UB to va_args *all* the arguments without taking > in the consideration which option is passed. If x32 requires additional > argument handling to clear the upper 32-bits, there is no advantage of > using the assembly wrapper. I'm okay with making this change to avoid UB. Patch looks okay to me. Reviewed-by: Florian Weimer <[email protected]> Minor nit: +weak_alias (__prctl, __prctl_time64) +hidden_weak (__prctl_time64) This isn't necessary because there is no __prctl_time64 on x32. Thanks, Florian