Unsafe access BufferDescriptors array in BufferGetLSNAtomic()

Tender Wang <tndrwang@gmail.com>

From: Tender Wang <tndrwang@gmail.com>
To: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-11-07T11:07:35Z
Lists: pgsql-hackers

Attachments

Hi,

While learning gist index insert codes, I find a little issue with
BufferGetLSNAtomic().
At first, it wants to get bufHdr by accessing the buffer descriptor array,
as below:

BufferDesc *bufHdr = GetBufferDescriptor(buffer - 1);

However, it doesn't check whether the passed buffer is a local or shared
buffer.
If the buffer is local, then buffer < 0; it will be cast to uint32 when
passed to GetBufferDescriptor().
This may be unsafe, although no someone reports the problem.

I tweak a few codes; see the attached patch.
Any thoughts?


-- 
Thanks,
Tender Wang

Commits

  1. Fix unsafe access to BufferDescriptors