Skip to content

Commit 735a877

Browse files
boylee1111Elliot Li
authored and
Elliot Li
committed
cross-namespace owner references should be disallowed in SetControllerReference()
1 parent 81842d0 commit 735a877

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

pkg/controller/controllerutil/controllerutil.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ func SetControllerReference(owner, object metav1.Object, scheme *runtime.Scheme)
6060
return fmt.Errorf("%T is not a runtime.Object, cannot call SetControllerReference", owner)
6161
}
6262

63+
if owner.GetNamespace() != "" && owner.GetNamespace() != object.GetNamespace() {
64+
return fmt.Errorf("cross-namespace owner references are disallowed, owner's namespace %s, obj's namespace %s", owner.GetNamespace(), object.GetNamespace())
65+
}
66+
6367
gvk, err := apiutil.GVKForObject(ro, scheme)
6468
if err != nil {
6569
return err

pkg/controller/controllerutil/controllerutil_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,15 @@ var _ = Describe("Controllerutil", func() {
115115
BlockOwnerDeletion: &t,
116116
}))
117117
})
118+
119+
It("should return an error if it's setting a cross-namespace owner reference", func() {
120+
rs := &appsv1.ReplicaSet{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "namespace1"}}
121+
dep := &extensionsv1beta1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "namespace2", UID: "foo-uid"}}
122+
123+
err := controllerutil.SetControllerReference(dep, rs, scheme.Scheme)
124+
125+
Expect(err).To(HaveOccurred())
126+
})
118127
})
119128

120129
Describe("CreateOrUpdate", func() {

0 commit comments

Comments
 (0)