Re: ubsan fails on 32bit builds
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: pgsql-hackers@postgresql.org, Fujii Masao <masao.fujii@oss.nttdata.com>, torikoshia <torikoshia@oss.nttdata.com>
Date: 2022-11-17T07:28:21Z
Lists: pgsql-hackers
Attachments
Hi, On 2022-11-16 17:42:30 -0800, Andres Freund wrote: > Afaict the problem is that > proc = (PGPROC *) &(waitQueue->links); > > is a gross gross hack - this isn't actually a PGPROC, it's pointing to an > SHM_QUEUE, but *not* one embedded in PGPROC. It kinda works because ->links > is at offset 0 in PGPROC, which means that > SHMQueueInsertBefore(&(proc->links), &(MyProc->links)); > will turn &proc->links back into waitQueue->links. Which we then can enqueue > again. > > I don't see the point of this hack, even leaving ubsan's valid complaints > aside. Why bother having this, sometimes, fake PGPROC pointer when we could > just use a SHM_QUEUE* to determine the insertion point? As done in the attached patch. With this ubsan passes both on 32bit and 64bit. Greetings, Andres Freund
Commits
-
Fix mislabeling of PROC_QUEUE->links as PGPROC, fixing UBSan on 32bit
- 140c80372327 11.19 landed
- 4cbcb7ed85b0 12.14 landed
- c13667b518e3 13.10 landed
- fc4154286e0e 14.7 landed
- a0d35ebcc570 15.2 landed
- 8c954168cff4 16.0 landed