util/winutil/s4u: fix token handle leak

Fixes #14156

Signed-off-by: Aaron Klotz <aaron@tailscale.com>
This commit is contained in:
Aaron Klotz 2024-11-19 10:55:58 -07:00
parent 810da91a9e
commit 48343ee673

View File

@ -17,6 +17,7 @@
"slices"
"strconv"
"strings"
"sync"
"sync/atomic"
"unsafe"
@ -128,9 +129,10 @@ func Login(logf logger.Logf, srcName string, u *user.User, capLevel CapabilityLe
if err != nil {
return nil, err
}
tokenCloseOnce := sync.OnceFunc(func() { token.Close() })
defer func() {
if err != nil {
token.Close()
tokenCloseOnce()
}
}()
@ -162,6 +164,7 @@ func Login(logf logger.Logf, srcName string, u *user.User, capLevel CapabilityLe
sessToken.Close()
}
}()
tokenCloseOnce()
}
userProfile, err := winutil.LoadUserProfile(sessToken, u)