Re: glibc qsort() vulnerability
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>, Mats Kindahl <mats@timescale.com>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@lists.postgresql.org
Date: 2024-02-08T00:42:07Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Use new overflow-safe integer comparison functions.
- 3b42bdb47169 17.0 landed
-
Introduce overflow-safe integer comparison functions.
- 6b80394781c8 17.0 landed
-
Replace calls to pg_qsort() with the qsort() macro.
- 5497daf3aa2a 17.0 landed
-
Switch over to using our own qsort() all the time, as has been proposed
- 6edd2b4a91bd 8.2.0 cited
Hi, On 2024-02-07 16:21:24 -0600, Nathan Bossart wrote: > On Wed, Feb 07, 2024 at 01:48:57PM -0800, Andres Freund wrote: > > Now, in most cases this won't matter, the sorting isn't performance > > critical. But I don't think it's a good idea to standardize on a generally > > slower pattern. > > > > Not that that's a good test, but I did quickly benchmark [1] this with > > intarray. There's about a 10% difference in performance between using the > > existing compASC() and one using > > return (int64) *(const int32 *) a - (int64) *(const int32 *) b; > > > > > > Perhaps we could have a central helper for this somewhere? > > Maybe said helper could use __builtin_sub_overflow() and fall back to the > slow "if" version only if absolutely necessary. I suspect that'll be worse code in the common case, given the cmov generated by gcc & clang for the typical branch-y formulation. But it's worth testing. > The assembly for that looks encouraging, but I still need to actually test > it... Possible. For 16bit upcasting to 32bit is clearly the best way. For 32 bit that doesn't work, given the 32bit return, so we need something more. Greetings, Andres Freund