Skip to content

Commit

Permalink
fix: fix "defer" leak in ResetUserDisks
Browse files Browse the repository at this point in the history
Also, print error if we failed to close the device.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
  • Loading branch information
DmitriyMV committed Feb 28, 2023
1 parent bfba367 commit 638dc91
Showing 1 changed file with 17 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1634,27 +1634,36 @@ func ResetSystemDisk(seq runtime.Sequence, data interface{}) (runtime.TaskExecut
}

// ResetUserDisks represents the task to reset the user disks.
func ResetUserDisks(seq runtime.Sequence, data interface{}) (runtime.TaskExecutionFunc, string) {
func ResetUserDisks(_ runtime.Sequence, data any) (runtime.TaskExecutionFunc, string) {
return func(ctx context.Context, logger *log.Logger, r runtime.Runtime) (err error) {
in, ok := data.(runtime.ResetOptions)
if !ok {
return fmt.Errorf("unexpected runtime data")
}

for _, deviceName := range in.GetUserDisksToWipe() {
var dev *blockdevice.BlockDevice

dev, err = blockdevice.Open(deviceName)
wipeDevice := func(deviceName string) error {
dev, err := blockdevice.Open(deviceName)
if err != nil {
return err
}

defer dev.Close() //nolint:errcheck
defer func() {
if closeErr := dev.Close(); closeErr != nil {
logger.Printf("failed to close device %s: %s", deviceName, closeErr)
}
}()

logger.Printf("wiping user disk %s", deviceName)

err = dev.FastWipe()
if err != nil {
if err = dev.FastWipe(); err != nil {
return err
}

return nil
}

for _, deviceName := range in.GetUserDisksToWipe() {
if err := wipeDevice(deviceName); err != nil {
return err
}
}
Expand Down

0 comments on commit 638dc91

Please sign in to comment.