|
|
Message-ID: <20260907235219.GF23438@brightrain.aerifal.cx> Date: Mon, 7 Sep 2026 19:52:20 -0400 From: Rich Felker <dalias@...c.org> To: Lukas Tribus <lukas@...i.eu> Cc: musl@...ts.openwall.com, rafamiga <rafamiga@...il.com> Subject: Re: Type confusion in include/sched.h (was: Discrepancy in include/sched.h – breaks haproxy's CPU topology discovery) On Sun, Mar 22, 2026 at 04:41:41PM +0100, Lukas Tribus wrote: > Dear list, > > > On Fri, 5 Sept 2025 at 21:23, rafamiga <rafamiga@...il.com> wrote: > > > > While working on a fix for haproxy load balancer running in a container built with musl a discrepancy was found in include/sched.h. Long story short, on a 48 CPU system haproxy was reporting just 32 CPUs. I'm forwarding findings to this list to let you know that a change might be considered. > > > > Original bug report: https://github.com/haproxy/haproxy/issues/3103 > > > > Citing the author (wtarreau): > > > > Oh I think I found it! The issue is here in sched.h: > > > > #define __CPU_op_S(i, size, set, op) ( (i)/8U >= (size) ? 0 : \ > > (((unsigned long *)(set))[(i)/8/sizeof(long)] op (1UL<<((i)%(8*sizeof(long))))) ) > > > > but CPU_ISSET() is defined as: > > > > #define CPU_ISSET(i, set) CPU_ISSET_S(i,sizeof(cpu_set_t),set) > > > > See ? It returns an unsigned long which is returned as-is by the macro. However the man says that CPU_ISSET() must return an int. So in our case it's returned as-is and truncated to the lowest 32 bits. > > > > The fix for the lib would be simple: > > > > -#define CPU_ISSET(i, set) CPU_ISSET_S(i,sizeof(cpu_set_t),set) > > +#define CPU_ISSET(i, set) (CPU_ISSET_S(i,sizeof(cpu_set_t),set) != 0) > > > > It should be reported to the project. > > > Any feedback on the above report regarding a unsigned long vs int type > mismatch and the change suggested by Willy Tarreau? Sorry this got overlooked. I'm fixing it now.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.