Re: Detecting pointer misalignment (was Re: pgsql: Implementation of subscripting for jsonb)
Alexander Korotkov <aekorotkov@gmail.com>
From: Alexander Korotkov <aekorotkov@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>,
Alexander Korotkov <akorotkov@postgresql.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-02-09T00:34:27Z
Lists: pgsql-hackers
Hi, Tom! Thank you for taking care of this. On Mon, Feb 8, 2021 at 3:47 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > [ redirecting to -hackers ] > > Alexander Korotkov <aekorotkov@gmail.com> writes: > >> BTW, I managed to reproduce the issue by compiling with CFLAGS="-O0 > >> -fsanitize=alignment -fsanitize-trap=alignment" and the patch > >> attached. > >> I can propose the following to catch such issues earlier. We could > >> finish (wrap attribute with macro and apply it to other places with > >> misalignment access if any) and apply the attached patch and make > >> commitfest.cputube.org check patches with CFLAGS="-O0 > >> -fsanitize=alignment -fsanitize-trap=alignment". What do you think? > > > The revised patch is attached. The attribute is wrapped into > > pg_attribute_no_sanitize_alignment() macro. I've checked it works for > > me with gcc-10 and clang-11. > > I found some time to experiment with this today. It is really nice > to be able to detect these problems without using obsolete hardware. > However, I have a few issues: > > * Why do you recommend -O0? Seems to me we want to test the code > as we'd normally use it, ie typically -O2. My idea was that with -O0 we can see some unaligned accesses, which would be optimized away with -O2. I mean with -O2 we might completely skip accessing some pointer, which would be accessed in -O0. However, this situation is probably very rare. > * I think the right place to run such a check is in some buildfarm > animals. The cfbot only sees portions of what goes into our tree. Could we have both cfbot + buildfarm animals? ------ Regards, Alexander Korotkov
Commits
-
pg_attribute_no_sanitize_alignment() macro
- cc7ea0717b12 9.6.22 landed
- c86eae39ce1e 13.3 landed
- c3dc311ffd64 12.7 landed
- 22001684623b 11.12 landed
- 02e7da01a436 10.17 landed
- 993bdb9f935a 14.0 landed
-
Tweak compiler version cutoff for no_sanitize("alignment") support.
- ad2ad698ac16 14.0 landed
-
Implementation of subscripting for jsonb
- 676887a3b0b8 14.0 cited