Unsafe access BufferDescriptors array in BufferGetLSNAtomic()

From: Tender Wang <tndrwang(at)gmail(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Unsafe access BufferDescriptors array in BufferGetLSNAtomic()
Date: 2024-11-07 11:07:35
Message-ID: CAHewXNku-o46-9cmUgyv6LkSZ25doDrWq32p=oz9kfD8ovVJMg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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

Attachment Content-Type Size
0001-Fix-unsafe-access-BufferDescriptors.patch application/octet-stream 1.1 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2024-11-07 11:10:51 Re: Linkify mentions of the primary/subscriber's max_replication_slots
Previous Message Alena Rybakina 2024-11-07 11:06:37 Re: Incremental Sort Cost Estimation Instability