diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
index d72a7856d..b186d3aff 100644
--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
+++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
@@ -9,6 +9,7 @@ import "C"
 import (
 	"errors"
 	"fmt"
+	"os/exec"
 	"strconv"
 	"strings"
 	"sync"
@@ -48,6 +49,40 @@ func fetchMajorMinorVersion() (float64, error) {
 	if err != nil {
 		return 0, err
 	}
+
+	// For backward compatibility reasons, if code compiled against an SDK
+	// earlier than macOS 11 is run on macOS 11 or later, and then tries to read
+	// value of kern.osproductversion, the OS will return the value "10.16"
+	// instead of the real OS version string.  By contrast, the command `sw_vers
+	// -productVersion` will return the real OS version string unless the
+	// environment variable SYSTEM_VERSION_COMPAT is set to 1 or 2, in which
+	// case it will respectively return "10.16" and "15.7" (the latter is for
+	// some iOS compatibility reason).
+	//
+	// The only (currently) sure way to get the real OS version string
+	// regardless of SYSTEM_VERSION_COMPAT or the SDK compiled against is
+	// apparently to parse
+	// /System/Library/CoreServices/.SystemVersionPlatform.plist if it exists,
+	// and /System/Library/CoreServices/SystemVersion.plist otherwise.  Doing
+	// so, however, requires parsing XML plist files.
+	//
+	// Given what this library does, it doesn't seem likely that there would be
+	// a good reason to run its code with SYSTEM_VERSION_COMPAT set, so using
+	// `sw_vers` should be adequate until a proper parsing of plist files is
+	// added.
+	//
+	// See https://github.com/ziglang/zig/issues/7569,
+	// https://github.com/ziglang/zig/pull/7714 and
+	// https://eclecticlight.co/2020/08/13/macos-version-numbering-isnt-so-simple/
+	// for more information.
+	if osver == "10.16" {
+		out, err := exec.Command("sw_vers", "-productVersion").Output()
+		if err != nil {
+			return 0, err
+		}
+		osver = strings.TrimRight(string(out), "\r\n")
+	}
+
 	prefix := "v"
 	majorMinor := strings.TrimPrefix(semver.MajorMinor(prefix+osver), prefix)
 	version, err := strconv.ParseFloat(majorMinor, 64)