Bug 1814919 - SR-IOV Operator panic when numVfs set to 0
Summary: SR-IOV Operator panic when numVfs set to 0
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: OpenShift Container Platform
Classification: Red Hat
Component: Networking
Version: 4.4
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: ---
: 4.5.0
Assignee: Peng Liu
QA Contact: zhaozhanqi
URL:
Whiteboard:
Depends On:
Blocks: 1814921 1815319
TreeView+ depends on / blocked
 
Reported: 2020-03-19 02:31 UTC by zenghui.shi
Modified: 2020-07-13 17:23 UTC (History)
0 users

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
: 1814921 1815319 (view as bug list)
Environment:
Last Closed: 2020-07-13 17:22:38 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Github openshift sriov-network-operator pull 166 0 None closed Bug 1814919: Prevent user from setting numVfs to '0' 2020-05-19 10:23:02 UTC
Github openshift sriov-network-operator pull 171 0 None closed Revert "Bug 1814919: Prevent user from setting numVfs to '0'" 2020-05-19 10:23:02 UTC
Github openshift sriov-network-operator pull 172 0 None closed Bug 1814919: Prevent users from setting NumVf to 0 in policy by the operator webhook 2020-05-19 10:23:02 UTC
Red Hat Product Errata RHBA-2020:2409 0 None None None 2020-07-13 17:23:02 UTC

Description zenghui.shi 2020-03-19 02:31:59 UTC
Description of problem:

Reference of vfGroup will be nil when numVfs is set to 0 in SR-IOV Node Policy.

Version-Release number of selected component (if applicable):
4.4.rc-1

How reproducible:
always

Steps to Reproduce:
1.
2.
3.

Actual results:


Expected results:


Additional info:

E0318 13:34:51.746310       1 runtime.go:73] Observed a panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference)
goroutine 1566 [running]:
k8s.io/apimachinery/pkg/util/runtime.logPanic(0x150bc20, 0x2448700)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:69 +0x7b
k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:51 +0x82
panic(0x150bc20, 0x2448700)
	/opt/rh/go-toolset-1.13/root/usr/lib/go-toolset-1.13-golang/src/runtime/panic.go:679 +0x1b2
github.com/openshift/sriov-network-operator/pkg/apis/sriovnetwork/v1.(*SriovNetworkNodePolicy).Apply(0xc0008b4a38, 0xc000c0ca80)
	/go/src/github.com/openshift/sriov-network-operator/pkg/apis/sriovnetwork/v1/helper.go:121 +0x52a
github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy.(*ReconcileSriovNetworkNodePolicy).syncSriovNetworkNodeState(0xc000a80bc0, 0xc0006e41c0, 0xc00035a3f0, 0xc000c0c780, 0xc0008b5328, 0xc000af0560, 0x6, 0x1904da0, 0xc0001a6dc0)
	/go/src/github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy/sriovnetworknodepolicy_controller.go:334 +0x642
github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy.(*ReconcileSriovNetworkNodePolicy).syncAllSriovNetworkNodeStates(0xc000a80bc0, 0xc0006e41c0, 0xc00035a3f0, 0xc00035a540, 0x0, 0xc000705480)
	/go/src/github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy/sriovnetworknodepolicy_controller.go:269 +0x417
github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy.(*ReconcileSriovNetworkNodePolicy).Reconcile(0xc000a80bc0, 0xc000048d60, 0x20, 0xc000be69f0, 0x7, 0xc00012bcd8, 0xc000552510, 0xc000e0c3f8, 0x1908fc0)
	/go/src/github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy/sriovnetworknodepolicy_controller.go:189 +0xa2f
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler(0xc0001e34a0, 0x156d3a0, 0xc000a5a960, 0x0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:216 +0x162
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc0001e34a0, 0xc0010bb300)
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:192 +0xcb
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).worker(0xc0001e34a0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:171 +0x2b
k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1(0xc000705430)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152 +0x5e
k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc000705430, 0x3b9aca00, 0x0, 0x1, 0xc00015e6c0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153 +0xf8
k8s.io/apimachinery/pkg/util/wait.Until(0xc000705430, 0x3b9aca00, 0xc00015e6c0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x4d
created by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:157 +0x32e
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
	panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xb9f52a]
goroutine 1566 [running]:
k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:58 +0x105
panic(0x150bc20, 0x2448700)
	/opt/rh/go-toolset-1.13/root/usr/lib/go-toolset-1.13-golang/src/runtime/panic.go:679 +0x1b2
github.com/openshift/sriov-network-operator/pkg/apis/sriovnetwork/v1.(*SriovNetworkNodePolicy).Apply(0xc0008b4a38, 0xc000c0ca80)
	/go/src/github.com/openshift/sriov-network-operator/pkg/apis/sriovnetwork/v1/helper.go:121 +0x52a
github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy.(*ReconcileSriovNetworkNodePolicy).syncSriovNetworkNodeState(0xc000a80bc0, 0xc0006e41c0, 0xc00035a3f0, 0xc000c0c780, 0xc0008b5328, 0xc000af0560, 0x6, 0x1904da0, 0xc0001a6dc0)
	/go/src/github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy/sriovnetworknodepolicy_controller.go:334 +0x642
github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy.(*ReconcileSriovNetworkNodePolicy).syncAllSriovNetworkNodeStates(0xc000a80bc0, 0xc0006e41c0, 0xc00035a3f0, 0xc00035a540, 0x0, 0xc000705480)
	/go/src/github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy/sriovnetworknodepolicy_controller.go:269 +0x417
github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy.(*ReconcileSriovNetworkNodePolicy).Reconcile(0xc000a80bc0, 0xc000048d60, 0x20, 0xc000be69f0, 0x7, 0xc00012bcd8, 0xc000552510, 0xc000e0c3f8, 0x1908fc0)
	/go/src/github.com/openshift/sriov-network-operator/pkg/controller/sriovnetworknodepolicy/sriovnetworknodepolicy_controller.go:189 +0xa2f
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler(0xc0001e34a0, 0x156d3a0, 0xc000a5a960, 0x0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:216 +0x162
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc0001e34a0, 0xc0010bb300)
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:192 +0xcb
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).worker(0xc0001e34a0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:171 +0x2b
k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1(0xc000705430)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152 +0x5e
k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc000705430, 0x3b9aca00, 0x0, 0x1, 0xc00015e6c0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153 +0xf8
k8s.io/apimachinery/pkg/util/wait.Until(0xc000705430, 0x3b9aca00, 0xc00015e6c0)
	/go/src/github.com/openshift/sriov-network-operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x4d
created by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start
	/go/src/github.com/openshift/sriov-network-operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:157 +0x32e

Comment 1 Peng Liu 2020-03-19 02:39:16 UTC
Setting 'numVfs' set to 0 in the policy doesn't make sense. If users want to reset VF number to 0, they shall just remove the policy. So I will update the CRD to prevent users from setting 'numVfs' to 0 in the CR.

Comment 7 zhaozhanqi 2020-03-26 07:06:30 UTC
Verified this bug on 4.5.0-202003250931

cat vfnum0
`
apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: without-netdevice
  namespace: openshift-sriov-network-operator
spec:
  mtu: 1500
  nicSelector:
    pfNames:
      - ens3f1
    rootDevices:
      - '0000:5e:00.1'
    vendor: '15b3'
  nodeSelector:
    feature.node.kubernetes.io/sriov-capable: 'true'
  numVfs: 0
  resourceName: withoutnetdevice
`

#oc create -f vfnum0 
Error from server (numVfs(0) in CR without-netdevice is not allowed): error when creating "vfnum0": admission webhook "operator-webhook.sriovnetwork.openshift.io" denied the request: numVfs(0) in CR without-netdevice is not allowed

Comment 9 errata-xmlrpc 2020-07-13 17:22:38 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2020:2409


Note You need to log in before you can comment on or make changes to this bug.