MPS issue job001785

TitleUnclear whether base or client pointer passed to pad method of format auto-header
Statusclosed
Priorityessential
Assigned userGareth Rees
OrganizationRavenbrook
DescriptionMPS AMC pool + auto-header format: reclaim makes bad pads on boarded segs?

RHSK 2008-03-07: Priority unknown (so "critical" until determined); see Analysis. Symptoms unknown; see Analysis.

RHSK 2008-03-11: May not actually be a defect. See Analysis.
AnalysisRHSK 2008-03-07: The auto-header format does not clearly define whether format methods deal with base pointers (the memory location of the first byte of the storage allocated for the object) or client pointers, which point mps_headerSize bytes after the start of the object storage).

In poolamc.c:
- to pad the unused end part of a segment, a base pointer is passed;
- to pad a reclaimed object on a boarded segment, a client pointer is passed. [NOT TRUE: see below]

Probably, de facto, client pad code currently expects a base pointer, so -- probably -- reclaim on boarded segs fails to pad, and just corrupts the (dead) object. It's not immediately clear whether this has any bad effect.

RHSK 2008-03-11: Actually, poolamc.c *is* consistently passing an base pointer (not a client pointer) to format->pad. Perhaps this is consistent across all pools. Needs to be thoroughly checked.

GDR 2012-10-29: The only pools in the open source MPS that call the pad method are AMC/AMCZ and SNC. These both pass base pointers to the pad method.
How foundinspection
Evidence//info.ravenbrook.com/project/mps/master/code/poolamc.c#26
Observed in1.108.1
Introduced in1.100.0
Created byRichard Kistruck
Created on2008-03-07 18:30:16
Last modified byGareth Rees
Last modified on2012-11-05 14:36:51
History2008-03-07 RHSK Created, from reading poolamc.c
2008-03-11 RHSK UPDATE: May not actually be a defect. See Analysis.
2012-10-29 GDR Use consistent terminology. Behaviour is OK if documented. Assign to me.

Fixes

Change Effect Date User Description
180330 closed 2012-11-05 14:36:51 Gareth Rees The padding method always receives a base pointer.