Re: Detection of hadware feature => please do not use signal

Bastien Roucariès <rouca@debian.org>

From: Bastien Roucariès <rouca@debian.org>
To: pgsql-bugs@lists.postgresql.org, Heikki Linnakangas <hlinnaka@iki.fi>, pgsql-bugs@lists.postgresql.org, Heikki Linnakangas <hlinnaka@iki.fi>
Date: 2024-10-31T17:42:09Z
Lists: pgsql-bugs
Le jeudi 31 octobre 2024, 17:29:45 UTC Heikki Linnakangas a écrit :
> On 31/10/2024 17:41, Bastien Roucariès wrote:
> > Hi,
> > 
> > On debian side we will like to avoid use of sigill to detect feature.
> > 
> > https://sources.debian.org/src/postgresql-17/17.0-1/src/port/pg_crc32c_armv8_choose.c/#L55
> > 
> > is really bad.
> 
> Why is it bad?

for a binary it is maybe safe for a library it is unsafe in Multi thread context to capture signal...
And we are burned by a recent CVE in ssh due to signal handling.
> 
> > Could you use the canonical way under linux
> > 
> > #include <sys/auxv.h>
> > #include <asm/hwcap.h>
> > 
> >   #if defined(__aarch64__)
> >     return !(getauxval(AT_HWCAP) &  HWCAP_CRC32);
> >   #else
> >     return !(getauxval(AT_HWCAP2) & HWCAP2_CRC32);
> >   #endif
> 
> We used to do that, but it was changed in commit 1c72ec6f. Looking at 
> the discussion that led to it, it's not clear to me why we switched [1]. 
> Portablity to non-glibc systems maybe?

Yes I suppose but a
#ifdef __GLIBC__

#else

#endif

Will be safe
> 
> If there's a handy, portable way to check CPU capabilities, I agree it 
> seem less hacky than catching SIGILL...

unfortunatly no
> 
> [1] 
> https://www.postgresql.org/message-id/CAEepm%3D02Run-Pk3xyt%2BRV3p1N%2B7cKZxN95_MamaJw8Cnw%2BDwjQ%40mail.gmail.com
> 
> 

Commits

  1. Update configure probes for CFLAGS needed for ARM CRC instructions.

  2. Support runtime CRC feature probing on NetBSD/ARM using sysctl().

  3. Use auxv to check for CRC32 instructions on ARM.

  4. Improve our method for probing the availability of ARM CRC instructions.