Re: BUG #14615: ReplicationOriginShmemInit Memory access cross-border

From: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
To: bret(dot)shao(at)outlook(dot)com
Cc: PostgreSQL mailing lists <pgsql-bugs(at)postgresql(dot)org>, Andres Freund <andres(at)anarazel(dot)de>
Subject: Re: BUG #14615: ReplicationOriginShmemInit Memory access cross-border
Date: 2017-04-10 06:38:56
Message-ID: CAB7nPqTOsW3WnxELtOAcs8vYB5o823DM3BTYwS2tuPEqKYcwOw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Mon, Apr 10, 2017 at 3:26 PM, <bret(dot)shao(at)outlook(dot)com> wrote:
> MemSet(replication_states, 0, ReplicationOriginShmemSize()); in function
> ReplicationOriginShmemInit cause cross-border,because that start address of
> the share memory allocated is replication_states_ctl, but call MemSet to
> initialize this memory start from replication_states which is variable
> states's address in struct ReplicationStateCtl.so call MemSet to set 0 with
> the total size of this share memory will cross border of this share memory.
>
> Although, this cross-border will not caused the system failure due to share
> memory allocation strategy after my analysis. but i still believe we
> shouldn't do like this.
>
> Fix suggestion:
> change to
> MemSet(replication_states_ctl, 0, ReplicationOriginShmemSize()); then move
> to the beginning of if statement.

Yes, there is a mistake here, but I don't agree with your solution. It
seems to me that using mul_size(max_replication_slots,
sizeof(ReplicationState)) is the way to go as you would reinitialize
what has been set in tranche_id. Per se the attached.
--
Michael

Attachment Content-Type Size
replorigin-shmem-fix.patch application/octet-stream 617 bytes

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message shao bret 2017-04-10 07:02:06 答复: [BUGS] BUG #14615: ReplicationOriginShmemInit Memory access cross-border
Previous Message bret.shao 2017-04-10 06:26:21 BUG #14615: ReplicationOriginShmemInit Memory access cross-border