Skip to content

Commit 83f07f6

Browse files
authored
Merge pull request #18184 from hakman/azure-nil-pointer
azure: Fix possible nil pointer dereferences
2 parents 5650cf4 + 487ea54 commit 83f07f6

2 files changed

Lines changed: 31 additions & 9 deletions

File tree

pkg/resources/azure/azure.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,9 @@ func (g *resourceGetter) listVMScaleSetsAndRoleAssignments(ctx context.Context)
409409
}
410410
rs = append(rs, r)
411411

412-
principalIDs[*vmss.Identity.PrincipalID] = vmss
412+
if vmss.Identity != nil && vmss.Identity.PrincipalID != nil {
413+
principalIDs[*vmss.Identity.PrincipalID] = vmss
414+
}
413415
}
414416

415417
resourceGroupRAs, err := g.listRoleAssignments(ctx, principalIDs, g.resourceGroupID())
@@ -445,8 +447,17 @@ func (g *resourceGetter) toVMScaleSetResource(vmss *compute.VirtualMachineScaleS
445447
subnets := set.New[string]()
446448
asgs := set.New[string]()
447449
lbs := set.New[string]()
450+
if vmss.Properties == nil || vmss.Properties.VirtualMachineProfile == nil || vmss.Properties.VirtualMachineProfile.NetworkProfile == nil {
451+
return nil, fmt.Errorf("VMSS %s has no network profile", fi.ValueOf(vmss.Name))
452+
}
448453
for _, iface := range vmss.Properties.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations {
454+
if iface.Properties == nil {
455+
continue
456+
}
449457
for _, ip := range iface.Properties.IPConfigurations {
458+
if ip.Properties == nil || ip.Properties.Subnet == nil {
459+
continue
460+
}
450461
subnet, err := arm.ParseResourceID(*ip.Properties.Subnet.ID)
451462
if err != nil {
452463
return nil, err

upup/pkg/fi/cloudup/azuretasks/vmscaleset.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,12 @@ func (s *VMScaleSet) Find(c *fi.CloudupContext) (*VMScaleSet, error) {
175175
return nil, fmt.Errorf("expecting exactly 1 SSH key for %q, found %d: %+v", *s.Name, len(sshKeys), sshKeys)
176176
}
177177

178-
userData, err := base64.StdEncoding.DecodeString(*profile.UserData)
179-
if err != nil {
180-
return nil, fmt.Errorf("failed to decode user data: %w", err)
178+
var userData []byte
179+
if profile.UserData != nil {
180+
userData, err = base64.StdEncoding.DecodeString(*profile.UserData)
181+
if err != nil {
182+
return nil, fmt.Errorf("failed to decode user data: %w", err)
183+
}
181184
}
182185

183186
vmss := &VMScaleSet{
@@ -196,14 +199,18 @@ func (s *VMScaleSet) Find(c *fi.CloudupContext) (*VMScaleSet, error) {
196199
VirtualMachineScaleSetStorageProfile: profile.StorageProfile,
197200
},
198201
RequirePublicIP: to.Ptr(ipConfig.Properties.PublicIPAddressConfiguration != nil),
199-
SKUName: found.SKU.Name,
200-
Capacity: found.SKU.Capacity,
201202
ComputerNamePrefix: osProfile.ComputerNamePrefix,
202203
AdminUser: osProfile.AdminUsername,
203204
SSHPublicKey: sshKeys[0].KeyData,
204205
UserData: fi.NewBytesResource(userData),
205206
Tags: found.Tags,
206-
PrincipalID: found.Identity.PrincipalID,
207+
}
208+
if found.SKU != nil {
209+
vmss.SKUName = found.SKU.Name
210+
vmss.Capacity = found.SKU.Capacity
211+
}
212+
if found.Identity != nil {
213+
vmss.PrincipalID = found.Identity.PrincipalID
207214
}
208215
if ipConfig.Properties != nil && ipConfig.Properties.ApplicationSecurityGroups != nil {
209216
for _, asg := range ipConfig.Properties.ApplicationSecurityGroups {
@@ -220,7 +227,9 @@ func (s *VMScaleSet) Find(c *fi.CloudupContext) (*VMScaleSet, error) {
220227
if found.Zones != nil {
221228
vmss.Zones = found.Zones
222229
}
223-
s.PrincipalID = found.Identity.PrincipalID
230+
if found.Identity != nil {
231+
s.PrincipalID = found.Identity.PrincipalID
232+
}
224233
return vmss, nil
225234
}
226235

@@ -380,6 +389,8 @@ func (s *VMScaleSet) RenderAzure(t *azure.AzureAPITarget, a, e, changes *VMScale
380389
if err != nil {
381390
return err
382391
}
383-
e.PrincipalID = result.Identity.PrincipalID
392+
if result.Identity != nil {
393+
e.PrincipalID = result.Identity.PrincipalID
394+
}
384395
return nil
385396
}

0 commit comments

Comments
 (0)