tailscale/util/winutil
Nick Khyl f0db47338e
Some checks are pending
checklocks / checklocks (push) Waiting to run
CodeQL / Analyze (go) (push) Waiting to run
Dockerfile build / deploy (push) Waiting to run
CI / race-root-integration (1/4) (push) Waiting to run
CI / race-root-integration (2/4) (push) Waiting to run
CI / race-root-integration (3/4) (push) Waiting to run
CI / race-root-integration (4/4) (push) Waiting to run
CI / test (-coverprofile=/tmp/coverage.out, amd64) (push) Waiting to run
CI / test (-race, amd64, 1/3) (push) Waiting to run
CI / test (-race, amd64, 2/3) (push) Waiting to run
CI / test (-race, amd64, 3/3) (push) Waiting to run
CI / test (386) (push) Waiting to run
CI / windows (push) Waiting to run
CI / privileged (push) Waiting to run
CI / vm (push) Waiting to run
CI / race-build (push) Waiting to run
CI / cross (386, linux) (push) Waiting to run
CI / cross (amd64, darwin) (push) Waiting to run
CI / cross (amd64, freebsd) (push) Waiting to run
CI / cross (amd64, openbsd) (push) Waiting to run
CI / cross (amd64, windows) (push) Waiting to run
CI / cross (arm, 5, linux) (push) Waiting to run
CI / cross (arm, 7, linux) (push) Waiting to run
CI / cross (arm64, darwin) (push) Waiting to run
CI / cross (arm64, linux) (push) Waiting to run
CI / cross (arm64, windows) (push) Waiting to run
CI / cross (loong64, linux) (push) Waiting to run
CI / ios (push) Waiting to run
CI / crossmin (amd64, illumos) (push) Waiting to run
CI / crossmin (amd64, plan9) (push) Waiting to run
CI / crossmin (amd64, solaris) (push) Waiting to run
CI / crossmin (ppc64, aix) (push) Waiting to run
CI / android (push) Waiting to run
CI / wasm (push) Waiting to run
CI / tailscale_go (push) Waiting to run
CI / fuzz (push) Waiting to run
CI / depaware (push) Waiting to run
CI / go_generate (push) Waiting to run
CI / go_mod_tidy (push) Waiting to run
CI / licenses (push) Waiting to run
CI / staticcheck (386, windows) (push) Waiting to run
CI / staticcheck (amd64, darwin) (push) Waiting to run
CI / staticcheck (amd64, linux) (push) Waiting to run
CI / staticcheck (amd64, windows) (push) Waiting to run
CI / notify_slack (push) Blocked by required conditions
CI / check_mergeability (push) Blocked by required conditions
cmd/tailscaled,util/syspolicy/source,util/winutil/gp: disallow acquiring the GP lock during service startup
In v1.78, we started acquiring the GP lock when reading policy settings. This led to a deadlock during
Tailscale installation via Group Policy Software Installation because the GP engine holds the write lock
for the duration of policy processing, which in turn waits for the installation to complete, which in turn
waits for the service to enter the running state.

In this PR, we prevent the acquisition of GP locks (aka EnterCriticalPolicySection) during service startup
and update the Windows Registry-based util/syspolicy/source.PlatformPolicyStore to handle this failure
gracefully. The GP lock is somewhat optional; it’s safe to read policy settings without it, but acquiring
the lock is recommended when reading multiple values to prevent the Group Policy engine from modifying
settings mid-read and to avoid inconsistent results.

Fixes #14416

Signed-off-by: Nick Khyl <nickk@tailscale.com>
2025-01-23 15:06:47 -06:00
..
authenticode all: add test for package comments, fix, add comments as needed 2024-07-10 09:57:00 -07:00
conpty util/winutil: add conpty package and helper for building windows.StartupInfoEx 2024-06-06 14:18:36 -06:00
gp cmd/tailscaled,util/syspolicy/source,util/winutil/gp: disallow acquiring the GP lock during service startup 2025-01-23 15:06:47 -06:00
policy
s4u util/winutil/s4u: fix token handle leak 2024-11-19 14:11:50 -05:00
testdata/testrestartableprocesses all: add test for package comments, fix, add comments as needed 2024-07-10 09:57:00 -07:00
winenv all: add test for package comments, fix, add comments as needed 2024-07-10 09:57:00 -07:00
mksyscall.go util/winutil: ensure domain controller address is used when retrieving remote profile information 2024-06-26 13:10:10 -06:00
restartmgr_windows_test.go all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
restartmgr_windows.go util/winutil: add package for logging into Windows via Service-for-User (S4U) 2024-06-25 22:05:52 -06:00
startupinfo_windows.go util/winutil: add constants from Win32 SDK for dll blocking mitigation policies 2024-08-19 13:33:48 -06:00
subprocess_windows_test.go all: cleanup unused code, part 2 (#10670) 2023-12-21 17:40:03 -08:00
svcdiag_windows.go util/winutil: publicize existing functions for opening read-only connections to the Windows Service Control Manager 2023-12-22 10:52:50 -08:00
userprofile_windows_test.go util/winutil: ensure domain controller address is used when retrieving remote profile information 2024-06-26 13:10:10 -06:00
userprofile_windows.go util/winutil: ensure domain controller address is used when retrieving remote profile information 2024-06-26 13:10:10 -06:00
winutil_notwindows.go util/syspolicy: add ReadStringArray interface (#11857) 2024-04-23 22:23:48 -07:00
winutil_windows_test.go util/winutil: add AllocateContiguousBuffer and SetNTString helper funcs 2024-06-10 09:39:37 -06:00
winutil_windows.go util/winutil: add GetRegUserString/SetRegUserString accessors for storage and retrieval of string values in HKEY_CURRENT_USER 2024-08-20 08:07:57 -06:00
winutil.go util/syspolicy: add ReadStringArray interface (#11857) 2024-04-23 22:23:48 -07:00
zsyscall_windows.go util/winutil: ensure domain controller address is used when retrieving remote profile information 2024-06-26 13:10:10 -06:00