From c6397b941fe0c07795d8fd8615c37268c08082cd Mon Sep 17 00:00:00 2001 From: Ophestra Date: Wed, 20 Aug 2025 19:29:45 +0900 Subject: [PATCH] container/initproc: check path equivalence by value Fixes regression introduced while integrating Absolute. Signed-off-by: Ophestra --- container/initproc.go | 3 ++- container/initproc_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 container/initproc_test.go diff --git a/container/initproc.go b/container/initproc.go index 150702a..d3c3753 100644 --- a/container/initproc.go +++ b/container/initproc.go @@ -35,7 +35,8 @@ func (p *MountProcOp) apply(state *setupState) error { func (p *MountProcOp) Is(op Op) bool { vp, ok := op.(*MountProcOp) - return ok && ((p == nil && vp == nil) || p == vp) + return ok && ((p == nil && vp == nil) || + (p.Target != nil && vp.Target != nil && p.Target.Is(vp.Target))) } func (*MountProcOp) prefix() string { return "mounting" } func (p *MountProcOp) String() string { return fmt.Sprintf("proc on %q", p.Target) } diff --git a/container/initproc_test.go b/container/initproc_test.go new file mode 100644 index 0000000..fe37732 --- /dev/null +++ b/container/initproc_test.go @@ -0,0 +1,32 @@ +package container + +import "testing" + +func TestMountProcOp(t *testing.T) { + checkOpsBuilder(t, []opsBuilderTestCase{ + {"proc", new(Ops).Proc(MustAbs("/proc/")), Ops{ + &MountProcOp{Target: MustAbs("/proc/")}, + }}, + }) + + checkOpIs(t, []opIsTestCase{ + {"zero", new(MountProcOp), new(MountProcOp), false}, + + {"target differs", &MountProcOp{ + Target: MustAbs("/proc/nonexistent"), + }, &MountProcOp{ + Target: MustAbs("/proc/"), + }, false}, + + {"equals", &MountProcOp{ + Target: MustAbs("/proc/"), + }, &MountProcOp{ + Target: MustAbs("/proc/"), + }, true}, + }) + + checkOpMeta(t, []opMetaTestCase{ + {"proc", &MountProcOp{Target: MustAbs("/proc/")}, + "mounting", `proc on "/proc/"`}, + }) +}