Skip to content

Commit 9df1d2c

Browse files
authored
Fix nil pointer dereference when checking if auto mode enabled (#8378)
1 parent dac2cd2 commit 9df1d2c

File tree

2 files changed

+40
-19
lines changed

2 files changed

+40
-19
lines changed

pkg/actions/podidentityassociation/migrator.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,19 +234,21 @@ func IsPodIdentityAgentInstalled(ctx context.Context, eksAPI awsapi.EKS, cluster
234234
}
235235

236236
func IsAutoModeEnabled(ctx context.Context, eksAPI awsapi.EKS, clusterName string) (bool, error) {
237-
clstrDescribeResponse, err := eksAPI.DescribeCluster(ctx, &awseks.DescribeClusterInput{
237+
cluster, err := eksAPI.DescribeCluster(ctx, &awseks.DescribeClusterInput{
238238
Name: aws.String(clusterName),
239239
})
240240

241241
if err != nil {
242242
return false, fmt.Errorf("calling EKS::DescribeCluster: %w", err)
243243
}
244244

245-
if *clstrDescribeResponse.Cluster.ComputeConfig.Enabled {
246-
return true, nil
245+
if cluster.Cluster == nil ||
246+
cluster.Cluster.ComputeConfig == nil ||
247+
cluster.Cluster.ComputeConfig.Enabled == nil {
248+
return false, nil
247249
}
248250

249-
return false, nil
251+
return *cluster.Cluster.ComputeConfig.Enabled, nil
250252
}
251253

252254
type IRSAv1StackNameResolver map[string]IRSAv1StackSummary

pkg/actions/podidentityassociation/migrator_test.go

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,18 @@ var _ = Describe("Create", func() {
6666
genericErr = fmt.Errorf("ERR")
6767
)
6868

69-
mockDescribeAddon := func(provider *mockprovider.MockProvider, err error, autoMode bool) {
69+
mockDescribeAddon := func(provider *mockprovider.MockProvider, err error, autoMode bool, nilComputeConfig bool) {
70+
describeClusterOutput := &awseks.DescribeClusterOutput{
71+
Cluster: &ekstypes.Cluster{},
72+
}
73+
if !nilComputeConfig {
74+
describeClusterOutput.Cluster.ComputeConfig = &ekstypes.ComputeConfigResponse{
75+
Enabled: aws.Bool(autoMode),
76+
}
77+
}
7078
mockProvider.MockEKS().
7179
On("DescribeCluster", mock.Anything, mock.Anything).
72-
Return(&awseks.DescribeClusterOutput{
73-
Cluster: &ekstypes.Cluster{
74-
ComputeConfig: &ekstypes.ComputeConfigResponse{
75-
Enabled: aws.Bool(autoMode),
76-
},
77-
},
78-
}, nil).
80+
Return(describeClusterOutput, nil).
7981
Once()
8082
if !autoMode {
8183
mockProvider.MockEKS().
@@ -152,14 +154,14 @@ var _ = Describe("Create", func() {
152154
},
153155
Entry("[API errors] describing pod identity agent addon fails", migrateToPodIdentityAssociationEntry{
154156
mockEKS: func(provider *mockprovider.MockProvider) {
155-
mockDescribeAddon(provider, genericErr, false)
157+
mockDescribeAddon(provider, genericErr, false, false)
156158
},
157159
expectedErr: fmt.Sprintf("calling %q", fmt.Sprintf("EKS::DescribeAddon::%s", api.PodIdentityAgentAddon)),
158160
}),
159161

160162
Entry("[API errors] fetching iamserviceaccounts fails", migrateToPodIdentityAssociationEntry{
161163
mockEKS: func(provider *mockprovider.MockProvider) {
162-
mockDescribeAddon(provider, nil, false)
164+
mockDescribeAddon(provider, nil, false, false)
163165
},
164166
mockCFN: func(stackUpdater *fakes.FakeStackUpdater) {
165167
stackUpdater.GetIAMServiceAccountsReturns(nil, genericErr)
@@ -171,7 +173,24 @@ var _ = Describe("Create", func() {
171173
mockEKS: func(provider *mockprovider.MockProvider) {
172174
mockDescribeAddon(provider, &ekstypes.ResourceNotFoundException{
173175
Message: aws.String(genericErr.Error()),
174-
}, false)
176+
}, false, false)
177+
},
178+
mockCFN: func(stackUpdater *fakes.FakeStackUpdater) {
179+
stackUpdater.GetIAMServiceAccountsReturns([]*api.ClusterIAMServiceAccount{}, nil)
180+
},
181+
mockK8s: func(clientSet *fake.Clientset) {
182+
createFakeServiceAccount(clientSet, nsDefault, sa1, roleARN1)
183+
},
184+
validateCustomLoggerOutput: func(output string) {
185+
Expect(output).To(ContainSubstring(fmt.Sprintf("install %s addon", api.PodIdentityAgentAddon)))
186+
},
187+
}),
188+
189+
Entry("[taskTree] assumes auto mode is disabled and contains a task to create pod identity agent addon if DescribeCluster returns nil computeConfig field", migrateToPodIdentityAssociationEntry{
190+
mockEKS: func(provider *mockprovider.MockProvider) {
191+
mockDescribeAddon(provider, &ekstypes.ResourceNotFoundException{
192+
Message: aws.String(genericErr.Error()),
193+
}, false, true)
175194
},
176195
mockCFN: func(stackUpdater *fakes.FakeStackUpdater) {
177196
stackUpdater.GetIAMServiceAccountsReturns([]*api.ClusterIAMServiceAccount{}, nil)
@@ -186,7 +205,7 @@ var _ = Describe("Create", func() {
186205

187206
Entry("[taskTree] contains tasks to remove IRSAv1 EKS Role annotation if remove trust option is specified", migrateToPodIdentityAssociationEntry{
188207
mockEKS: func(provider *mockprovider.MockProvider) {
189-
mockDescribeAddon(provider, nil, false)
208+
mockDescribeAddon(provider, nil, false, false)
190209
},
191210
mockCFN: func(stackUpdater *fakes.FakeStackUpdater) {
192211
stackUpdater.GetIAMServiceAccountsReturns([]*api.ClusterIAMServiceAccount{}, nil)
@@ -204,7 +223,7 @@ var _ = Describe("Create", func() {
204223

205224
Entry("[taskTree] contains all other expected tasks", migrateToPodIdentityAssociationEntry{
206225
mockEKS: func(provider *mockprovider.MockProvider) {
207-
mockDescribeAddon(provider, nil, false)
226+
mockDescribeAddon(provider, nil, false, false)
208227
},
209228
mockCFN: func(stackUpdater *fakes.FakeStackUpdater) {
210229
stackUpdater.GetIAMServiceAccountsReturns([]*api.ClusterIAMServiceAccount{
@@ -233,7 +252,7 @@ var _ = Describe("Create", func() {
233252

234253
Entry("completes all tasks successfully", migrateToPodIdentityAssociationEntry{
235254
mockEKS: func(provider *mockprovider.MockProvider) {
236-
mockDescribeAddon(provider, nil, false)
255+
mockDescribeAddon(provider, nil, false, false)
237256

238257
mockProvider.MockEKS().
239258
On("CreatePodIdentityAssociation", mock.Anything, mock.Anything).
@@ -314,7 +333,7 @@ var _ = Describe("Create", func() {
314333

315334
Entry("completes all tasks successfully for auto-mode", migrateToPodIdentityAssociationEntry{
316335
mockEKS: func(provider *mockprovider.MockProvider) {
317-
mockDescribeAddon(provider, nil, true)
336+
mockDescribeAddon(provider, nil, true, false)
318337

319338
mockProvider.MockEKS().
320339
On("CreatePodIdentityAssociation", mock.Anything, mock.Anything).

0 commit comments

Comments
 (0)