From 354d9b5720c58e24f0e24378ffba05f3cdf94e8d Mon Sep 17 00:00:00 2001 From: Tender Wang Date: Thu, 7 Nov 2024 18:47:36 +0800 Subject: [PATCH] Fix unsafe access BufferDescriptors. --- src/backend/storage/buffer/bufmgr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 80b0d0c5ded6..d28b8270a1f8 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3981,10 +3981,10 @@ BufferIsPermanent(Buffer buffer) XLogRecPtr BufferGetLSNAtomic(Buffer buffer) { - BufferDesc *bufHdr = GetBufferDescriptor(buffer - 1); char *page = BufferGetPage(buffer); XLogRecPtr lsn; uint32 buf_state; + BufferDesc *bufHdr; /* * If we don't need locking for correctness, fastpath out. @@ -3996,6 +3996,7 @@ BufferGetLSNAtomic(Buffer buffer) Assert(BufferIsValid(buffer)); Assert(BufferIsPinned(buffer)); + bufHdr = GetBufferDescriptor(buffer - 1); buf_state = LockBufHdr(bufHdr); lsn = PageGetLSN(page); UnlockBufHdr(bufHdr, buf_state);