Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package runc for openSUSE:Factory checked in 
at 2024-02-01 18:04:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/runc (Old)
 and      /work/SRC/openSUSE:Factory/.runc.new.1815 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "runc"

Thu Feb  1 18:04:09 2024 rev:60 rq:1143139 version:1.1.12

Changes:
--------
--- /work/SRC/openSUSE:Factory/runc/runc.changes        2024-01-04 
15:57:48.769429235 +0100
+++ /work/SRC/openSUSE:Factory/.runc.new.1815/runc.changes      2024-02-01 
18:04:13.720620622 +0100
@@ -1,0 +2,22 @@
+Wed Jan 31 00:00:33 UTC 2024 - Aleksa Sarai <asa...@suse.com>
+
+- Update to runc v1.1.12. Upstream changelog is available from
+  <https://github.com/opencontainers/runc/releases/tag/v1.1.12>. bsc#1218894
+
+  * This release fixes a container breakout vulnerability (CVE-2024-21626). For
+    more details, see the upstream security advisory:
+    
<https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv>
+  * Remove upstreamed patches:
+    - CVE-2024-21626.patch
+  * Update runc.keyring to match upstream changes.
+
+-------------------------------------------------------------------
+Thu Jan 18 00:37:01 UTC 2024 - Aleksa Sarai <asa...@suse.com>
+
+[ This was only ever released for SLES. ]
+
+- Add upstream patch to fix embargoed issue CVE-2024-21626. bsc#1218894
+  
<https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv>
+  + CVE-2024-21626.patch
+
+-------------------------------------------------------------------

Old:
----
  runc-1.1.11.tar.xz
  runc-1.1.11.tar.xz.asc

New:
----
  runc-1.1.12.tar.xz
  runc-1.1.12.tar.xz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ runc.spec ++++++
--- /var/tmp/diff_new_pack.rLt7tn/_old  2024-02-01 18:04:14.228639039 +0100
+++ /var/tmp/diff_new_pack.rLt7tn/_new  2024-02-01 18:04:14.228639039 +0100
@@ -18,13 +18,13 @@
 
 
 # MANUAL: Make sure you update this each time you update runc.
-%define git_version 4bccb38cc9cf198d52bebf2b3a90cd14e7af8c06
-%define git_short   4bccb38cc9cf
+%define git_version 51d5e94601ceffbbd85688df1c928ecccbfa4685
+%define git_short   51d5e94601ce
 
 %define project github.com/opencontainers/runc
 
 Name:           runc
-Version:        1.1.11
+Version:        1.1.12
 Release:        0
 Summary:        Tool for spawning and running OCI containers
 License:        Apache-2.0

++++++ runc-1.1.11.tar.xz -> runc-1.1.12.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/CHANGELOG.md new/runc-1.1.12/CHANGELOG.md
--- old/runc-1.1.11/CHANGELOG.md        2024-01-02 03:34:16.000000000 +0100
+++ new/runc-1.1.12/CHANGELOG.md        2024-01-23 14:12:48.000000000 +0100
@@ -6,6 +6,24 @@
 
 ## [Unreleased 1.1.z]
 
+## [1.1.12] - 2024-01-31
+
+> Now you're thinking with Portals™!
+
+### Security
+
+* Fix [CVE-2024-21626][cve-2024-21626], a container breakout attack that took
+  advantage of a file descriptor that was leaked internally within runc (but
+  never leaked to the container process). In addition to fixing the leak,
+  several strict hardening measures were added to ensure that future internal
+  leaks could not be used to break out in this manner again. Based on our
+  research, while no other container runtime had a similar leak, none had any
+  of the hardening steps we've introduced (and some runtimes would not check
+  for any file descriptors that a calling process may have leaked to them,
+  allowing for container breakouts due to basic user error).
+
+[cve-2024-21626]: 
https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv
+
 ## [1.1.11] - 2024-01-01
 
 > Happy New Year!
@@ -493,7 +511,8 @@
 [1.0.1]: https://github.com/opencontainers/runc/compare/v1.0.0...v1.0.1
 
 <!-- 1.1.z patch releases -->
-[Unreleased 1.1.z]: 
https://github.com/opencontainers/runc/compare/v1.1.11...release-1.1
+[Unreleased 1.1.z]: 
https://github.com/opencontainers/runc/compare/v1.1.12...release-1.1
+[1.1.12]: https://github.com/opencontainers/runc/compare/v1.1.11...v1.1.12
 [1.1.11]: https://github.com/opencontainers/runc/compare/v1.1.10...v1.1.11
 [1.1.10]: https://github.com/opencontainers/runc/compare/v1.1.9...v1.1.10
 [1.1.9]: https://github.com/opencontainers/runc/compare/v1.1.8...v1.1.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/VERSION new/runc-1.1.12/VERSION
--- old/runc-1.1.11/VERSION     2024-01-02 03:34:16.000000000 +0100
+++ new/runc-1.1.12/VERSION     2024-01-23 14:12:48.000000000 +0100
@@ -1 +1 @@
-1.1.11
+1.1.12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/cgroups/file.go 
new/runc-1.1.12/libcontainer/cgroups/file.go
--- old/runc-1.1.11/libcontainer/cgroups/file.go        2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/cgroups/file.go        2024-01-23 
14:12:48.000000000 +0100
@@ -77,16 +77,16 @@
        // TestMode is set to true by unit tests that need "fake" cgroupfs.
        TestMode bool
 
-       cgroupFd     int = -1
-       prepOnce     sync.Once
-       prepErr      error
-       resolveFlags uint64
+       cgroupRootHandle *os.File
+       prepOnce         sync.Once
+       prepErr          error
+       resolveFlags     uint64
 )
 
 func prepareOpenat2() error {
        prepOnce.Do(func() {
                fd, err := unix.Openat2(-1, cgroupfsDir, &unix.OpenHow{
-                       Flags: unix.O_DIRECTORY | unix.O_PATH,
+                       Flags: unix.O_DIRECTORY | unix.O_PATH | unix.O_CLOEXEC,
                })
                if err != nil {
                        prepErr = &os.PathError{Op: "openat2", Path: 
cgroupfsDir, Err: err}
@@ -97,15 +97,16 @@
                        }
                        return
                }
+               file := os.NewFile(uintptr(fd), cgroupfsDir)
+
                var st unix.Statfs_t
-               if err = unix.Fstatfs(fd, &st); err != nil {
+               if err := unix.Fstatfs(int(file.Fd()), &st); err != nil {
                        prepErr = &os.PathError{Op: "statfs", Path: 
cgroupfsDir, Err: err}
                        logrus.Warnf("falling back to securejoin: %s", prepErr)
                        return
                }
 
-               cgroupFd = fd
-
+               cgroupRootHandle = file
                resolveFlags = unix.RESOLVE_BENEATH | unix.RESOLVE_NO_MAGICLINKS
                if st.Type == unix.CGROUP2_SUPER_MAGIC {
                        // cgroupv2 has a single mountpoint and no 
"cpu,cpuacct" symlinks
@@ -132,7 +133,7 @@
                return openFallback(path, flags, mode)
        }
 
-       fd, err := unix.Openat2(cgroupFd, relPath,
+       fd, err := unix.Openat2(int(cgroupRootHandle.Fd()), relPath,
                &unix.OpenHow{
                        Resolve: resolveFlags,
                        Flags:   uint64(flags) | unix.O_CLOEXEC,
@@ -140,20 +141,20 @@
                })
        if err != nil {
                err = &os.PathError{Op: "openat2", Path: path, Err: err}
-               // Check if cgroupFd is still opened to cgroupfsDir
+               // Check if cgroupRootHandle is still opened to cgroupfsDir
                // (happens when this package is incorrectly used
                // across the chroot/pivot_root/mntns boundary, or
                // when /sys/fs/cgroup is remounted).
                //
                // TODO: if such usage will ever be common, amend this
-               // to reopen cgroupFd and retry openat2.
-               fdStr := strconv.Itoa(cgroupFd)
+               // to reopen cgroupRootHandle and retry openat2.
+               fdStr := strconv.Itoa(int(cgroupRootHandle.Fd()))
                fdDest, _ := os.Readlink("/proc/self/fd/" + fdStr)
                if fdDest != cgroupfsDir {
-                       // Wrap the error so it is clear that cgroupFd
+                       // Wrap the error so it is clear that cgroupRootHandle
                        // is opened to an unexpected/wrong directory.
-                       err = fmt.Errorf("cgroupFd %s unexpectedly opened to %s 
!= %s: %w",
-                               fdStr, fdDest, cgroupfsDir, err)
+                       err = fmt.Errorf("cgroupRootHandle %d unexpectedly 
opened to %s != %s: %w",
+                               cgroupRootHandle.Fd(), fdDest, cgroupfsDir, err)
                }
                return nil, err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/cgroups/fs/paths.go 
new/runc-1.1.12/libcontainer/cgroups/fs/paths.go
--- old/runc-1.1.11/libcontainer/cgroups/fs/paths.go    2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/cgroups/fs/paths.go    2024-01-23 
14:12:48.000000000 +0100
@@ -83,6 +83,7 @@
        if err != nil {
                return ""
        }
+       defer dir.Close()
        names, err := dir.Readdirnames(1)
        if err != nil {
                return ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/container_linux.go 
new/runc-1.1.12/libcontainer/container_linux.go
--- old/runc-1.1.11/libcontainer/container_linux.go     2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/container_linux.go     2024-01-23 
14:12:48.000000000 +0100
@@ -353,6 +353,15 @@
                }()
        }
 
+       // Before starting "runc init", mark all non-stdio open files as 
O_CLOEXEC
+       // to make sure we don't leak any files into "runc init". Any files to 
be
+       // passed to "runc init" through ExtraFiles will get dup2'd by the Go
+       // runtime and thus their O_CLOEXEC flag will be cleared. This is some
+       // additional protection against attacks like CVE-2024-21626, by making
+       // sure we never leak files to "runc init" we didn't intend to.
+       if err := utils.CloseExecFrom(3); err != nil {
+               return fmt.Errorf("unable to mark non-stdio fds as cloexec: 
%w", err)
+       }
        if err := parent.start(); err != nil {
                return fmt.Errorf("unable to start container process: %w", err)
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/init_linux.go 
new/runc-1.1.12/libcontainer/init_linux.go
--- old/runc-1.1.11/libcontainer/init_linux.go  2024-01-02 03:34:16.000000000 
+0100
+++ new/runc-1.1.12/libcontainer/init_linux.go  2024-01-23 14:12:48.000000000 
+0100
@@ -8,6 +8,7 @@
        "io"
        "net"
        "os"
+       "path/filepath"
        "strings"
        "unsafe"
 
@@ -135,6 +136,32 @@
        return nil
 }
 
+// verifyCwd ensures that the current directory is actually inside the mount
+// namespace root of the current process.
+func verifyCwd() error {
+       // getcwd(2) on Linux detects if cwd is outside of the rootfs of the
+       // current mount namespace root, and in that case prefixes 
"(unreachable)"
+       // to the returned string. glibc's getcwd(3) and Go's Getwd() both 
detect
+       // when this happens and return ENOENT rather than returning a 
non-absolute
+       // path. In both cases we can therefore easily detect if we have an 
invalid
+       // cwd by checking the return value of getcwd(3). See getcwd(3) for more
+       // details, and CVE-2024-21626 for the security issue that motivated 
this
+       // check.
+       //
+       // We have to use unix.Getwd() here because os.Getwd() has a workaround 
for
+       // $PWD which involves doing stat(.), which can fail if the current
+       // directory is inaccessible to the container process.
+       if wd, err := unix.Getwd(); errors.Is(err, unix.ENOENT) {
+               return errors.New("current working directory is outside of 
container mount namespace root -- possible container breakout detected")
+       } else if err != nil {
+               return fmt.Errorf("failed to verify if current working 
directory is safe: %w", err)
+       } else if !filepath.IsAbs(wd) {
+               // We shouldn't ever hit this, but check just in case.
+               return fmt.Errorf("current working directory is not absolute -- 
possible container breakout detected: cwd is %q", wd)
+       }
+       return nil
+}
+
 // finalizeNamespace drops the caps, sets the correct user
 // and working dir, and closes any leaked file descriptors
 // before executing the command inside the namespace
@@ -193,6 +220,10 @@
                        return fmt.Errorf("chdir to cwd (%q) set in config.json 
failed: %w", config.Cwd, err)
                }
        }
+       // Make sure our final working directory is inside the container.
+       if err := verifyCwd(); err != nil {
+               return err
+       }
        if err := system.ClearKeepCaps(); err != nil {
                return fmt.Errorf("unable to clear keep caps: %w", err)
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/integration/seccomp_test.go 
new/runc-1.1.12/libcontainer/integration/seccomp_test.go
--- old/runc-1.1.11/libcontainer/integration/seccomp_test.go    2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/integration/seccomp_test.go    2024-01-23 
14:12:48.000000000 +0100
@@ -13,7 +13,7 @@
        libseccomp "github.com/seccomp/libseccomp-golang"
 )
 
-func TestSeccompDenyGetcwdWithErrno(t *testing.T) {
+func TestSeccompDenySyslogWithErrno(t *testing.T) {
        if testing.Short() {
                return
        }
@@ -25,7 +25,7 @@
                DefaultAction: configs.Allow,
                Syscalls: []*configs.Syscall{
                        {
-                               Name:     "getcwd",
+                               Name:     "syslog",
                                Action:   configs.Errno,
                                ErrnoRet: &errnoRet,
                        },
@@ -39,7 +39,7 @@
        buffers := newStdBuffers()
        pwd := &libcontainer.Process{
                Cwd:    "/",
-               Args:   []string{"pwd"},
+               Args:   []string{"dmesg"},
                Env:    standardEnvironment,
                Stdin:  buffers.Stdin,
                Stdout: buffers.Stdout,
@@ -65,17 +65,17 @@
        }
 
        if exitCode == 0 {
-               t.Fatalf("Getcwd should fail with negative exit code, instead 
got %d!", exitCode)
+               t.Fatalf("dmesg should fail with negative exit code, instead 
got %d!", exitCode)
        }
 
-       expected := "pwd: getcwd: No such process"
+       expected := "dmesg: klogctl: No such process"
        actual := strings.Trim(buffers.Stderr.String(), "\n")
        if actual != expected {
                t.Fatalf("Expected output %s but got %s\n", expected, actual)
        }
 }
 
-func TestSeccompDenyGetcwd(t *testing.T) {
+func TestSeccompDenySyslog(t *testing.T) {
        if testing.Short() {
                return
        }
@@ -85,7 +85,7 @@
                DefaultAction: configs.Allow,
                Syscalls: []*configs.Syscall{
                        {
-                               Name:   "getcwd",
+                               Name:   "syslog",
                                Action: configs.Errno,
                        },
                },
@@ -98,7 +98,7 @@
        buffers := newStdBuffers()
        pwd := &libcontainer.Process{
                Cwd:    "/",
-               Args:   []string{"pwd"},
+               Args:   []string{"dmesg"},
                Env:    standardEnvironment,
                Stdin:  buffers.Stdin,
                Stdout: buffers.Stdout,
@@ -124,10 +124,10 @@
        }
 
        if exitCode == 0 {
-               t.Fatalf("Getcwd should fail with negative exit code, instead 
got %d!", exitCode)
+               t.Fatalf("dmesg should fail with negative exit code, instead 
got %d!", exitCode)
        }
 
-       expected := "pwd: getcwd: Operation not permitted"
+       expected := "dmesg: klogctl: Operation not permitted"
        actual := strings.Trim(buffers.Stderr.String(), "\n")
        if actual != expected {
                t.Fatalf("Expected output %s but got %s\n", expected, actual)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/setns_init_linux.go 
new/runc-1.1.12/libcontainer/setns_init_linux.go
--- old/runc-1.1.11/libcontainer/setns_init_linux.go    2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/setns_init_linux.go    2024-01-23 
14:12:48.000000000 +0100
@@ -4,6 +4,7 @@
        "errors"
        "fmt"
        "os"
+       "os/exec"
        "strconv"
 
        "github.com/opencontainers/selinux/go-selinux"
@@ -14,6 +15,7 @@
        "github.com/opencontainers/runc/libcontainer/keys"
        "github.com/opencontainers/runc/libcontainer/seccomp"
        "github.com/opencontainers/runc/libcontainer/system"
+       "github.com/opencontainers/runc/libcontainer/utils"
 )
 
 // linuxSetnsInit performs the container's initialization for running a new 
process
@@ -82,6 +84,21 @@
        if err := apparmor.ApplyProfile(l.config.AppArmorProfile); err != nil {
                return err
        }
+
+       // Check for the arg before waiting to make sure it exists and it is
+       // returned as a create time error.
+       name, err := exec.LookPath(l.config.Args[0])
+       if err != nil {
+               return err
+       }
+       // exec.LookPath in Go < 1.20 might return no error for an executable
+       // residing on a file system mounted with noexec flag, so perform this
+       // extra check now while we can still return a proper error.
+       // TODO: remove this once go < 1.20 is not supported.
+       if err := eaccess(name); err != nil {
+               return &os.PathError{Op: "eaccess", Path: name, Err: err}
+       }
+
        // Set seccomp as close to execve as possible, so as few syscalls take
        // place afterward (reducing the amount of syscalls that users need to
        // enable in their seccomp profiles).
@@ -101,5 +118,23 @@
                return &os.PathError{Op: "close log pipe", Path: "fd " + 
strconv.Itoa(l.logFd), Err: err}
        }
 
-       return system.Execv(l.config.Args[0], l.config.Args[0:], os.Environ())
+       // Close all file descriptors we are not passing to the container. This 
is
+       // necessary because the execve target could use internal runc fds as 
the
+       // execve path, potentially giving access to binary files from the host
+       // (which can then be opened by container processes, leading to 
container
+       // escapes). Note that because this operation will close any open file
+       // descriptors that are referenced by (*os.File) handles from underneath
+       // the Go runtime, we must not do any file operations after this point
+       // (otherwise the (*os.File) finaliser could close the wrong file). See
+       // CVE-2024-21626 for more information as to why this protection is
+       // necessary.
+       //
+       // This is not needed for runc-dmz, because the extra execve(2) step 
means
+       // that all O_CLOEXEC file descriptors have already been closed and thus
+       // the second execve(2) from runc-dmz cannot access internal file
+       // descriptors from runc.
+       if err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != 
nil {
+               return err
+       }
+       return system.Exec(name, l.config.Args[0:], os.Environ())
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/standard_init_linux.go 
new/runc-1.1.12/libcontainer/standard_init_linux.go
--- old/runc-1.1.11/libcontainer/standard_init_linux.go 2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/standard_init_linux.go 2024-01-23 
14:12:48.000000000 +0100
@@ -17,6 +17,7 @@
        "github.com/opencontainers/runc/libcontainer/keys"
        "github.com/opencontainers/runc/libcontainer/seccomp"
        "github.com/opencontainers/runc/libcontainer/system"
+       "github.com/opencontainers/runc/libcontainer/utils"
 )
 
 type linuxStandardInit struct {
@@ -258,5 +259,23 @@
                return err
        }
 
+       // Close all file descriptors we are not passing to the container. This 
is
+       // necessary because the execve target could use internal runc fds as 
the
+       // execve path, potentially giving access to binary files from the host
+       // (which can then be opened by container processes, leading to 
container
+       // escapes). Note that because this operation will close any open file
+       // descriptors that are referenced by (*os.File) handles from underneath
+       // the Go runtime, we must not do any file operations after this point
+       // (otherwise the (*os.File) finaliser could close the wrong file). See
+       // CVE-2024-21626 for more information as to why this protection is
+       // necessary.
+       //
+       // This is not needed for runc-dmz, because the extra execve(2) step 
means
+       // that all O_CLOEXEC file descriptors have already been closed and thus
+       // the second execve(2) from runc-dmz cannot access internal file
+       // descriptors from runc.
+       if err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != 
nil {
+               return err
+       }
        return system.Exec(name, l.config.Args[0:], os.Environ())
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/libcontainer/utils/utils_unix.go 
new/runc-1.1.12/libcontainer/utils/utils_unix.go
--- old/runc-1.1.11/libcontainer/utils/utils_unix.go    2024-01-02 
03:34:16.000000000 +0100
+++ new/runc-1.1.12/libcontainer/utils/utils_unix.go    2024-01-23 
14:12:48.000000000 +0100
@@ -7,6 +7,7 @@
        "fmt"
        "os"
        "strconv"
+       _ "unsafe" // for go:linkname
 
        "golang.org/x/sys/unix"
 )
@@ -23,9 +24,11 @@
        return nil
 }
 
-// CloseExecFrom applies O_CLOEXEC to all file descriptors currently open for
-// the process (except for those below the given fd value).
-func CloseExecFrom(minFd int) error {
+type fdFunc func(fd int)
+
+// fdRangeFrom calls the passed fdFunc for each file descriptor that is open in
+// the current process.
+func fdRangeFrom(minFd int, fn fdFunc) error {
        fdDir, err := os.Open("/proc/self/fd")
        if err != nil {
                return err
@@ -50,15 +53,60 @@
                if fd < minFd {
                        continue
                }
-               // Intentionally ignore errors from unix.CloseOnExec -- the 
cases where
-               // this might fail are basically file descriptors that have 
already
-               // been closed (including and especially the one that was 
created when
-               // os.ReadDir did the "opendir" syscall).
-               unix.CloseOnExec(fd)
+               // Ignore the file descriptor we used for readdir, as it will 
be closed
+               // when we return.
+               if uintptr(fd) == fdDir.Fd() {
+                       continue
+               }
+               // Run the closure.
+               fn(fd)
        }
        return nil
 }
 
+// CloseExecFrom sets the O_CLOEXEC flag on all file descriptors greater or
+// equal to minFd in the current process.
+func CloseExecFrom(minFd int) error {
+       return fdRangeFrom(minFd, unix.CloseOnExec)
+}
+
+//go:linkname runtime_IsPollDescriptor internal/poll.IsPollDescriptor
+
+// In order to make sure we do not close the internal epoll descriptors the Go
+// runtime uses, we need to ensure that we skip descriptors that match
+// "internal/poll".IsPollDescriptor. Yes, this is a Go runtime internal thing,
+// unfortunately there's no other way to be sure we're only keeping the file
+// descriptors the Go runtime needs. Hopefully nothing blows up doing this...
+func runtime_IsPollDescriptor(fd uintptr) bool //nolint:revive
+
+// UnsafeCloseFrom closes all file descriptors greater or equal to minFd in the
+// current process, except for those critical to Go's runtime (such as the
+// netpoll management descriptors).
+//
+// NOTE: That this function is incredibly dangerous to use in most Go code, as
+// closing file descriptors from underneath *os.File handles can lead to very
+// bad behaviour (the closed file descriptor can be re-used and then any
+// *os.File operations would apply to the wrong file). This function is only
+// intended to be called from the last stage of runc init.
+func UnsafeCloseFrom(minFd int) error {
+       // We must not close some file descriptors.
+       return fdRangeFrom(minFd, func(fd int) {
+               if runtime_IsPollDescriptor(uintptr(fd)) {
+                       // These are the Go runtimes internal netpoll file 
descriptors.
+                       // These file descriptors are operated on deep in the 
Go scheduler,
+                       // and closing those files from underneath Go can 
result in panics.
+                       // There is no issue with keeping them because they are 
not
+                       // executable and are not useful to an attacker anyway. 
Also we
+                       // don't have any choice.
+                       return
+               }
+               // There's nothing we can do about errors from close(2), and the
+               // only likely error to be seen is EBADF which indicates the fd 
was
+               // already closed (in which case, we got what we wanted).
+               _ = unix.Close(fd)
+       })
+}
+
 // NewSockPair returns a new unix socket pair
 func NewSockPair(name string) (parent *os.File, child *os.File, err error) {
        fds, err := unix.Socketpair(unix.AF_LOCAL, 
unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/runc.keyring new/runc-1.1.12/runc.keyring
--- old/runc-1.1.11/runc.keyring        2024-01-02 03:34:16.000000000 +0100
+++ new/runc-1.1.12/runc.keyring        2024-01-23 14:12:48.000000000 +0100
@@ -72,18 +72,18 @@
 pub   ed25519 2019-06-21 [C]
       C9C370B246B09F6DBCFC744C34401015D1D2D386
 uid           [ultimate] Aleksa Sarai <cyp...@cyphar.com>
-sub   ed25519 2022-09-30 [S] [expires: 2024-09-29]
-sub   cv25519 2022-09-30 [E] [expires: 2024-09-29]
-sub   ed25519 2022-09-30 [A] [expires: 2024-09-29]
+sub   ed25519 2022-09-30 [S] [expires: 2030-03-25]
+sub   cv25519 2022-09-30 [E] [expires: 2030-03-25]
+sub   ed25519 2022-09-30 [A] [expires: 2030-03-25]
 
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Comment: github=cyphar
 
 mDMEXQxvLxYJKwYBBAHaRw8BAQdArRQoZs9YzYtQIiPA1qdvUT8Q0wbPZyRV65Tz
 QNTIZla0IEFsZWtzYSBTYXJhaSA8Y3lwaGFyQGN5cGhhci5jb20+iJAEExYIADgF
-CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTJw3CyRrCfbbz8dEw0QBAV0dLThgUC
-XQzCHwIbAQAKCRA0QBAV0dLThvUpAP9SwyOijLqEBz1A9pTqRAB0l/r+ABq+iUmH
-UjMHO34LZAD/biRuAadaxIYJtmn7nKA55doyN2fQXhjArqypJ1SQywi4MwRdDMJS
+CwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGwEWIQTJw3CyRrCfbbz8dEw0QBAV0dLT
+hgUCZa3xwQAKCRA0QBAV0dLThpQyAQDGzjZyyWWmd6Ykg5/lymp2MLIg1f2jG6ew
+AiPT4ATkBAD/RgdLDf1IQStEH7pHmQa1qvqyRq1jeEgF23KruXbbdQ64MwRdDMJS
 FgkrBgEEAdpHDwEBB0B2IGusH7LuDH3hNT6JYM30S7G92FGogA6a9WQzKRlqvIh4
 BCgWCgAgFiEEycNwskawn228/HRMNEAQFdHS04YFAmM2ukUCHQEACgkQNEAQFdHS
 04ZTQAEAjAT0fXVJHdRL6UMCxDYsgjG+QyH1mr7gKgbPvB8A5LgBAN4QDqCxIY3b
@@ -106,20 +106,20 @@
 FdHS04YFAl0Mwo0CGyAACgkQNEAQFdHS04ajxQEAsZf1yDORUVYicREc/7z0U+51
 DJzeAexeJTYM+N+x13EA/0Ex+o7qQ7dZLGDn7x4LSbd39C+++suHsEaE4XwlX6cH
 uDMEYza6SxYJKwYBBAHaRw8BAQdAE3s7dZQFuImQX2tWshIdGjeUKZc7rlMcrZ6+
-q25gaH2I9QQYFgoAJhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJjNrpLAhsCBQkD
-wmcAAIEJEDRAEBXR0tOGdiAEGRYKAB0WIQS2TklVsp+j1GPyqQYol/rSt+lEbwUC
-Yza6SwAKCRAol/rSt+lEb9obAQC8ij4yJTU7ZcAtTx2ZMjj8EoruGb3ku6VpRyx1
-+pyQQgD/QgQ7X1G7xtwuVpY0kHYga1yoKLA2ycT8F8PrVtF7pAMWkgD9EWe1E77C
-BVd//i3ib+h9ikCeJ+gaxc6aU24ZBcN2tfUBAJmCmYQ0VEbXyvCqkdJEQ4qk5Y9C
-2V4w83dj4a5RYKUGuDgEYza6YBIKKwYBBAGXVQEFAQEHQKECW5Y7nUGCka0/WcCM
-OerRY95Pm2DQVL76QzvhXD8tAwEIB4h+BBgWCgAmFiEEycNwskawn228/HRMNEAQ
-FdHS04YFAmM2umACGwwFCQPCZwAACgkQNEAQFdHS04bkuwEA7AEL+iSPlA8/YILp
-0sFMzmtRqTDMqx2BY8K5wEk9fusA/jAhbeJw57bZYvK4MghfUa9tRocyII84UmOA
-cgDbPPIFuDMEYza6bhYJKwYBBAHaRw8BAQdAgHXd0yf6MPXJZCZ3TFz8xLymyPsD
-TF2SQwwqM4+nYbeIfgQYFgoAJhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJjNrpu
-AhsgBQkDwmcAAAoJEDRAEBXR0tOGB8UA/0wf8uECKMmXGQ4DNi+ei2E9Ft6GL8qw
-UGjwM/EKH2RoAP9HNRRKBjDxs/AZ3pBx1Q8hnHELLo0kXPc+3BG6Pht5BA==
-=KN4V
+q25gaH2I9QQYFgoAJgIbAhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJlrfJcBQkO
+EpjFAIF2IAQZFgoAHRYhBLZOSVWyn6PUY/KpBiiX+tK36URvBQJjNrpLAAoJECiX
++tK36URv2hsBALyKPjIlNTtlwC1PHZkyOPwSiu4ZveS7pWlHLHX6nJBCAP9CBDtf
+UbvG3C5WljSQdiBrXKgosDbJxPwXw+tW0XukAwkQNEAQFdHS04bMkQEA9elVwA0A
++ywDw+jnifIc98XqLI+KF3Xl0A9+lMuwthMBAO00DeAEjkryFMGp62GPNHqr/r6p
++6DIeUjWgK4Sh8IMuDgEYza6YBIKKwYBBAGXVQEFAQEHQKECW5Y7nUGCka0/WcCM
+OerRY95Pm2DQVL76QzvhXD8tAwEIB4h+BBgWCgAmAhsMFiEEycNwskawn228/HRM
+NEAQFdHS04YFAmWt8lwFCQ4SmLAACgkQNEAQFdHS04apHgD+MIRj2kujpxtQt04D
+ZB+hofBtHIEMo2tplFBYvhZ6KOMA/1q3aRv6jnWAv8woc50KitP4/+iPmfyzaBA/
+8XA5DdIKuDMEYza6bhYJKwYBBAHaRw8BAQdAgHXd0yf6MPXJZCZ3TFz8xLymyPsD
+TF2SQwwqM4+nYbeIfgQYFgoAJgIbIBYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJl
+rfJcBQkOEpiiAAoJEDRAEBXR0tOGAUwA/jbaz04OXnV3PYC/yQUsUJsihCTqz4Ne
+lxxclgJYU604APsFzpoLD0oUlfMn5Fh75ftkKPrwiHpTj4rRU6oIQu1/Bg==
+=Ab7w
 -----END PGP PUBLIC KEY BLOCK-----
 
 pub   rsa2048 2020-04-28 [SC] [expires: 2025-04-18]
@@ -159,11 +159,11 @@
 =GkpD
 -----END PGP PUBLIC KEY BLOCK-----
 
-pub   rsa3072 2019-07-25 [SC] [expires: 2023-11-02]
+pub   rsa3072 2019-07-25 [SC] [expires: 2025-07-27]
       C020EA876CE4E06C7AB95AEF49524C6F9F638F1A
 uid           [ultimate] Akihiro Suda <akihiro.suda...@hco.ntt.co.jp>
 uid           [ultimate] Akihiro Suda <suda.ky...@gmail.com>
-sub   rsa3072 2019-07-25 [E] [expires: 2023-11-02]
+sub   rsa3072 2019-07-25 [E] [expires: 2025-07-27]
 
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Comment: github=AkihiroSuda
@@ -178,26 +178,26 @@
 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
-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
+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
-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
+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
@@ -206,16 +206,16 @@
 bP7SoXx3qRhr993BDSP32r44hy+kYLhZP5K5oXivcITJZuGcJh49P4QuYGrnODIL
 gEhedWeePcJXFcEz09teizlWKGzd+EA3uwYd/bQelflwXkGuCLaoNv4qcH3oJDp1
 vYI0zT7hGvnz3thRLg3SOWFq5cBhnfNGXPLsoNZBzWGn2cm5MJYSKjIM470AEQEA
-AYkBvAQYAQoAJgIbDBYhBMAg6ods5OBserla70lSTG+fY48aBQJhgNRTBQkICSI0
-AAoJEElSTG+fY48a3YML/3snhGBx/Xd0EcK0pzyvyivZwavlGsQPAF2c1Rj7Lr1i
-eUrp6CZ/yW7/oAvlk6Ngc0SoWba/pgnz7bVQEc21JTY86M1bRLLh3fmYCx8YFbsR
-43zVr2bxDledzKV3bIuWStWbljHECuNTT91907pc3r4jv+jN4ZaXVUQ9pXj0DrV+
-MTJVCo7nrEXiq6q1WqaUAV9dMQE3rWGFa2u45QCZGLckOu3cuSCU8CVxSScmxgII
-bUBu17xDzQnDkdcEQzzkZtDOrwF76dPdlrW69PXtC9oElRJbGCERivqlrpKDagXI
-h4eZYfcFb2gc0qZjblvfVHiot65WM9bUsSAUAEfskYqIGLshzV9MrxFYQYvgt3ym
-Qs7D8ORJiphjaOvDeqVyGdPm/rN5SVMVGYpJX6EkZkHinV/kRChtuLAD7NQ3YH5O
-5l+Ehze9Nm4laEXQC/tme9B1XH0PUBJk1x8NeoVrYCTnypVFfRw37mC9XBu5TF6U
-ix7vx45U/EvZrqmkDrEFOQ==
-=4+1P
+AYkBvAQYAQoAJgIbDBYhBMAg6ods5OBserla70lSTG+fY48aBQJkw8uyBQkLTBmT
+AAoJEElSTG+fY48ayhsL+gLvKlfkYgxodyWKR5hOiUMKWE5tqfQY6kqrgssPYw+u
+Fn69AamQLt4I2AHRg0AHjoZEsMfR19uXZ24XwwcWwgWU6yRJgMSIK67bLvL+d686
+m2KQ2PpmfDrizUgY4J0sY+tzwNZeWxQiFy/Ni6AdEqJvJQDsrKYJ2GGWm6JMZCPw
+y3h5ouueieiEc0pvwEz2kg64uv6p8SUV1me66IXQaGseXb/BcW+Ap2WJO+IZjtNB
+qhk+V+1x5ZT6s9RecjiTDmKfZ71zyRWplkfL22+4XVEc3qLS3r0ZSzeIA4JPRf+N
+yCGjavdTNgu2bTo8iSgBq2NRT9kNwTaS8j883L0eY/JJktrfWnWE4qAuXBqLzkIl
+smspRWy0byLQrrzk9stncF/CDt5XuHPcsXOcRVXVyM+/RXqWKdNAwZO67HD4wJR9
+YR4avhGZZXguH3b0ka2zO8sxTju/09yb07NJ2qfjfWSHCmaj9KuhhE0EO625tckS
+58ceqolNBtrydoYZOc2CKw==
+=ol6W
 -----END PGP PUBLIC KEY BLOCK-----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/runc-1.1.11/update.go new/runc-1.1.12/update.go
--- old/runc-1.1.11/update.go   2024-01-02 03:34:16.000000000 +0100
+++ new/runc-1.1.12/update.go   2024-01-23 14:12:48.000000000 +0100
@@ -174,6 +174,7 @@
                                if err != nil {
                                        return err
                                }
+                               defer f.Close()
                        }
                        err = json.NewDecoder(f).Decode(&r)
                        if err != nil {

++++++ runc.keyring ++++++
--- /var/tmp/diff_new_pack.rLt7tn/_old  2024-02-01 18:04:14.732657312 +0100
+++ /var/tmp/diff_new_pack.rLt7tn/_new  2024-02-01 18:04:14.736657457 +0100
@@ -72,18 +72,18 @@
 pub   ed25519 2019-06-21 [C]
       C9C370B246B09F6DBCFC744C34401015D1D2D386
 uid           [ultimate] Aleksa Sarai <cyp...@cyphar.com>
-sub   ed25519 2022-09-30 [S] [expires: 2024-09-29]
-sub   cv25519 2022-09-30 [E] [expires: 2024-09-29]
-sub   ed25519 2022-09-30 [A] [expires: 2024-09-29]
+sub   ed25519 2022-09-30 [S] [expires: 2030-03-25]
+sub   cv25519 2022-09-30 [E] [expires: 2030-03-25]
+sub   ed25519 2022-09-30 [A] [expires: 2030-03-25]
 
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Comment: github=cyphar
 
 mDMEXQxvLxYJKwYBBAHaRw8BAQdArRQoZs9YzYtQIiPA1qdvUT8Q0wbPZyRV65Tz
 QNTIZla0IEFsZWtzYSBTYXJhaSA8Y3lwaGFyQGN5cGhhci5jb20+iJAEExYIADgF
-CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTJw3CyRrCfbbz8dEw0QBAV0dLThgUC
-XQzCHwIbAQAKCRA0QBAV0dLThvUpAP9SwyOijLqEBz1A9pTqRAB0l/r+ABq+iUmH
-UjMHO34LZAD/biRuAadaxIYJtmn7nKA55doyN2fQXhjArqypJ1SQywi4MwRdDMJS
+CwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGwEWIQTJw3CyRrCfbbz8dEw0QBAV0dLT
+hgUCZa3xwQAKCRA0QBAV0dLThpQyAQDGzjZyyWWmd6Ykg5/lymp2MLIg1f2jG6ew
+AiPT4ATkBAD/RgdLDf1IQStEH7pHmQa1qvqyRq1jeEgF23KruXbbdQ64MwRdDMJS
 FgkrBgEEAdpHDwEBB0B2IGusH7LuDH3hNT6JYM30S7G92FGogA6a9WQzKRlqvIh4
 BCgWCgAgFiEEycNwskawn228/HRMNEAQFdHS04YFAmM2ukUCHQEACgkQNEAQFdHS
 04ZTQAEAjAT0fXVJHdRL6UMCxDYsgjG+QyH1mr7gKgbPvB8A5LgBAN4QDqCxIY3b
@@ -106,20 +106,20 @@
 FdHS04YFAl0Mwo0CGyAACgkQNEAQFdHS04ajxQEAsZf1yDORUVYicREc/7z0U+51
 DJzeAexeJTYM+N+x13EA/0Ex+o7qQ7dZLGDn7x4LSbd39C+++suHsEaE4XwlX6cH
 uDMEYza6SxYJKwYBBAHaRw8BAQdAE3s7dZQFuImQX2tWshIdGjeUKZc7rlMcrZ6+
-q25gaH2I9QQYFgoAJhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJjNrpLAhsCBQkD
-wmcAAIEJEDRAEBXR0tOGdiAEGRYKAB0WIQS2TklVsp+j1GPyqQYol/rSt+lEbwUC
-Yza6SwAKCRAol/rSt+lEb9obAQC8ij4yJTU7ZcAtTx2ZMjj8EoruGb3ku6VpRyx1
-+pyQQgD/QgQ7X1G7xtwuVpY0kHYga1yoKLA2ycT8F8PrVtF7pAMWkgD9EWe1E77C
-BVd//i3ib+h9ikCeJ+gaxc6aU24ZBcN2tfUBAJmCmYQ0VEbXyvCqkdJEQ4qk5Y9C
-2V4w83dj4a5RYKUGuDgEYza6YBIKKwYBBAGXVQEFAQEHQKECW5Y7nUGCka0/WcCM
-OerRY95Pm2DQVL76QzvhXD8tAwEIB4h+BBgWCgAmFiEEycNwskawn228/HRMNEAQ
-FdHS04YFAmM2umACGwwFCQPCZwAACgkQNEAQFdHS04bkuwEA7AEL+iSPlA8/YILp
-0sFMzmtRqTDMqx2BY8K5wEk9fusA/jAhbeJw57bZYvK4MghfUa9tRocyII84UmOA
-cgDbPPIFuDMEYza6bhYJKwYBBAHaRw8BAQdAgHXd0yf6MPXJZCZ3TFz8xLymyPsD
-TF2SQwwqM4+nYbeIfgQYFgoAJhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJjNrpu
-AhsgBQkDwmcAAAoJEDRAEBXR0tOGB8UA/0wf8uECKMmXGQ4DNi+ei2E9Ft6GL8qw
-UGjwM/EKH2RoAP9HNRRKBjDxs/AZ3pBx1Q8hnHELLo0kXPc+3BG6Pht5BA==
-=KN4V
+q25gaH2I9QQYFgoAJgIbAhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJlrfJcBQkO
+EpjFAIF2IAQZFgoAHRYhBLZOSVWyn6PUY/KpBiiX+tK36URvBQJjNrpLAAoJECiX
++tK36URv2hsBALyKPjIlNTtlwC1PHZkyOPwSiu4ZveS7pWlHLHX6nJBCAP9CBDtf
+UbvG3C5WljSQdiBrXKgosDbJxPwXw+tW0XukAwkQNEAQFdHS04bMkQEA9elVwA0A
++ywDw+jnifIc98XqLI+KF3Xl0A9+lMuwthMBAO00DeAEjkryFMGp62GPNHqr/r6p
++6DIeUjWgK4Sh8IMuDgEYza6YBIKKwYBBAGXVQEFAQEHQKECW5Y7nUGCka0/WcCM
+OerRY95Pm2DQVL76QzvhXD8tAwEIB4h+BBgWCgAmAhsMFiEEycNwskawn228/HRM
+NEAQFdHS04YFAmWt8lwFCQ4SmLAACgkQNEAQFdHS04apHgD+MIRj2kujpxtQt04D
+ZB+hofBtHIEMo2tplFBYvhZ6KOMA/1q3aRv6jnWAv8woc50KitP4/+iPmfyzaBA/
+8XA5DdIKuDMEYza6bhYJKwYBBAHaRw8BAQdAgHXd0yf6MPXJZCZ3TFz8xLymyPsD
+TF2SQwwqM4+nYbeIfgQYFgoAJgIbIBYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJl
+rfJcBQkOEpiiAAoJEDRAEBXR0tOGAUwA/jbaz04OXnV3PYC/yQUsUJsihCTqz4Ne
+lxxclgJYU604APsFzpoLD0oUlfMn5Fh75ftkKPrwiHpTj4rRU6oIQu1/Bg==
+=Ab7w
 -----END PGP PUBLIC KEY BLOCK-----
 
 pub   rsa2048 2020-04-28 [SC] [expires: 2025-04-18]
@@ -159,11 +159,11 @@
 =GkpD
 -----END PGP PUBLIC KEY BLOCK-----
 
-pub   rsa3072 2019-07-25 [SC] [expires: 2023-11-02]
+pub   rsa3072 2019-07-25 [SC] [expires: 2025-07-27]
       C020EA876CE4E06C7AB95AEF49524C6F9F638F1A
 uid           [ultimate] Akihiro Suda <akihiro.suda...@hco.ntt.co.jp>
 uid           [ultimate] Akihiro Suda <suda.ky...@gmail.com>
-sub   rsa3072 2019-07-25 [E] [expires: 2023-11-02]
+sub   rsa3072 2019-07-25 [E] [expires: 2025-07-27]
 
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Comment: github=AkihiroSuda
@@ -178,26 +178,26 @@
 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
-F4AWIQTAIOqHbOTgbHq5Wu9JUkxvn2OPGgUCYYDT5gUJCAkhxwAKCRBJUkxvn2OP
-GiHnC/wOqAvEcRmpKjqx4QUNkE34oGwiPgV5vyDlQElvBzyazQEcIdt9xaIE+4IS
-7L7L6Q7WOGxWCvmRZ58E32m4RB1F8L7XQW0l3f6jESYLGPb6XDloux5poJzGxaGK
-9gd6ItNmjOCmt08Icv0ZVTvKv20ej71aepllE5UaM9p5AlEwLkzQxPoGpB7E1Sdy
-citRg6YEqTY+i5IeZ5xMthWXcushyLRRvm43DwbPsuZHVC1yMfo5VrF9JE65BdE9
-dIsCrZDnde/jUm4pAAwyAKSLLRVgj4xVP0XIdO2nVXDBWp9z4gUt/gMjuutO1a2U
-Xw+XhkirUb2C++L0KvVBMbU303Q+xV/iaYjAuFjNy94HZms0iTBTB4qFHT4ClYHi
-mNwTgfwRclpywkHzDi8496hsyzoVCeHSsu+ScDE1qAw6zrxASZXevYhhB2aBLr1s
-d58WsYA37iXTEO4Hxm5V0Wh110hlCGFwcN8vWNhMCdIj7JN8nWZQNLZyppN7bCDu
-FX8cE260I0FraWhpcm8gU3VkYSA8c3VkYS5reW90b0BnbWFpbC5jb20+iQHUBBMB
+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
-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
+b59jjxoFAmTDy9kFCQtMGboACgkQSVJMb59jjxogzgv/a+4+T5Xoklt0rGujSgtD
+ogpQp4guaImEhkPieWMPG7+UfqxwoMLcvLE5kTzqLPe1DdYs8Tm/gtteHttLUfjD
+qwY/+BsqIYYMJMRoXFBk2iokn0m/36da7WKpN+5r5ssujsvGj991k4oLQgFV0kEx
+f4PSRxWQNlAqp4OfQNI91S7oMDH94dR+V5TIYYHxsPsnCvygD72GVER4G5mUvkCH
+Nf8aqeckVxu8uZ/2LiNtYxbh5pwriuj8XbifuawdMdjpTvwAAa2DuKqCtj9cuQIt
+hmOF1ux68TRxk//QGPqX49+WT0mwdHBX/I/nZVTOGt9sjjKU5m1o+rUiVHtQ3Yhw
+fSLWEbfZiTjWDPWpjLU+r3C2qCiJyPjNpsxYAp4y3v511BXesejcXm24+MHFym5F
+ngyAItzwDD9ieTt3uviuC64VZVz7NgnDMUK0LumKh9mrZZ20dTcX9Vw70o41CMQN
+yBKloXOSPzQDZp1ZXzR3P/22WXG/e52YuU3Aw1femld+uQGNBF06GR8BDACxpQ9c
 y72+/WZGon+CToNj+a24PiduyExfFv26E0D77ACS6UAC5jz71mSuLbHiauQ3MHj+
 786z4m4St8+HjDL9YrAe19MobxWsLHAFvBJ8UHfZdkLzBkIKPHz7TUqlhvFR13b6
 ZAZVZk975hgCT3LpzA1miHBY2E5WDpVa3pe94xshVHL3iVf9Jv1a4hmM+eu0gxX4
@@ -206,17 +206,17 @@
 bP7SoXx3qRhr993BDSP32r44hy+kYLhZP5K5oXivcITJZuGcJh49P4QuYGrnODIL
 gEhedWeePcJXFcEz09teizlWKGzd+EA3uwYd/bQelflwXkGuCLaoNv4qcH3oJDp1
 vYI0zT7hGvnz3thRLg3SOWFq5cBhnfNGXPLsoNZBzWGn2cm5MJYSKjIM470AEQEA
-AYkBvAQYAQoAJgIbDBYhBMAg6ods5OBserla70lSTG+fY48aBQJhgNRTBQkICSI0
-AAoJEElSTG+fY48a3YML/3snhGBx/Xd0EcK0pzyvyivZwavlGsQPAF2c1Rj7Lr1i
-eUrp6CZ/yW7/oAvlk6Ngc0SoWba/pgnz7bVQEc21JTY86M1bRLLh3fmYCx8YFbsR
-43zVr2bxDledzKV3bIuWStWbljHECuNTT91907pc3r4jv+jN4ZaXVUQ9pXj0DrV+
-MTJVCo7nrEXiq6q1WqaUAV9dMQE3rWGFa2u45QCZGLckOu3cuSCU8CVxSScmxgII
-bUBu17xDzQnDkdcEQzzkZtDOrwF76dPdlrW69PXtC9oElRJbGCERivqlrpKDagXI
-h4eZYfcFb2gc0qZjblvfVHiot65WM9bUsSAUAEfskYqIGLshzV9MrxFYQYvgt3ym
-Qs7D8ORJiphjaOvDeqVyGdPm/rN5SVMVGYpJX6EkZkHinV/kRChtuLAD7NQ3YH5O
-5l+Ehze9Nm4laEXQC/tme9B1XH0PUBJk1x8NeoVrYCTnypVFfRw37mC9XBu5TF6U
-ix7vx45U/EvZrqmkDrEFOQ==
-=4+1P
+AYkBvAQYAQoAJgIbDBYhBMAg6ods5OBserla70lSTG+fY48aBQJkw8uyBQkLTBmT
+AAoJEElSTG+fY48ayhsL+gLvKlfkYgxodyWKR5hOiUMKWE5tqfQY6kqrgssPYw+u
+Fn69AamQLt4I2AHRg0AHjoZEsMfR19uXZ24XwwcWwgWU6yRJgMSIK67bLvL+d686
+m2KQ2PpmfDrizUgY4J0sY+tzwNZeWxQiFy/Ni6AdEqJvJQDsrKYJ2GGWm6JMZCPw
+y3h5ouueieiEc0pvwEz2kg64uv6p8SUV1me66IXQaGseXb/BcW+Ap2WJO+IZjtNB
+qhk+V+1x5ZT6s9RecjiTDmKfZ71zyRWplkfL22+4XVEc3qLS3r0ZSzeIA4JPRf+N
+yCGjavdTNgu2bTo8iSgBq2NRT9kNwTaS8j883L0eY/JJktrfWnWE4qAuXBqLzkIl
+smspRWy0byLQrrzk9stncF/CDt5XuHPcsXOcRVXVyM+/RXqWKdNAwZO67HD4wJR9
+YR4avhGZZXguH3b0ka2zO8sxTju/09yb07NJ2qfjfWSHCmaj9KuhhE0EO625tckS
+58ceqolNBtrydoYZOc2CKw==
+=ol6W
 -----END PGP PUBLIC KEY BLOCK-----
 
 

Reply via email to