Source: golang-github-containers-storage
Version: 1.24.8+dfsg1-1
Severity: important
Tags: patch
X-Debbugs-Cc: vignesh.ra...@collabora.com

Dear Maintainer,

The following vulnerability for golang-github-containers-storage is fixed in 
bookworm,
https://security-tracker.debian.org/tracker/CVE-2022-1227

We have backported the CVE fixes to bullseye since we are working on
debian bullseye derivative and want to send the patches to debian.
We understand these issues are not DSA and have to go though a point
release.

Please could you review the attached patch and apply in bullseye.
Have created a merge request also for review
https://salsa.debian.org/go-team/packages/golang-github-containers-storage/-/merge_requests/2

Regards,
Vignesh

-- System Information:
Debian Release: 11.1
  APT prefers stable
  APT policy: (700, 'stable'), (650, 'testing'), (600, 'unstable'), (500, 
'stable-updates'), (500, 'stable-security')
Architecture: amd64 (x86_64)

Kernel: Linux 5.10.0-9-amd64 (SMP w/8 CPU threads)
Kernel taint flags: TAINT_OOT_MODULE
Locale: LANG=en_IN, LC_CTYPE=en_IN (charmap=UTF-8), LANGUAGE=en_IN:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
>From 3da85a122411a57b5a65dc243ae56f89d7fd2564 Mon Sep 17 00:00:00 2001
From: Aleksa Sarai <cyp...@cyphar.com>
Date: Wed, 12 Jan 2022 12:56:56 +1100
Subject: [PATCH 1/4] pkg: idtools: export RawTo{Container,Host}

While the IDMapping methods are preferable for most users, sometimes it
is necessary to map a single ID using a given mapping. In particular
this is needed for psgo to be able to map the user and group entries in
/proc/$pid/status using the user namespace of the target process.

Required to resolve CVE-2022-1227.

Signed-off-by: Aleksa Sarai <cyp...@cyphar.com>
Backported-by: Valentin Rothberg <vrothb...@redhat.com>
---
 pkg/idtools/idtools.go | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/pkg/idtools/idtools.go b/pkg/idtools/idtools.go
index 83bc8c34f..d3d56066e 100644
--- a/pkg/idtools/idtools.go
+++ b/pkg/idtools/idtools.go
@@ -82,7 +82,7 @@ func GetRootUIDGID(uidMap, gidMap []IDMap) (int, int, error) {
        if len(uidMap) == 1 && uidMap[0].Size == 1 {
                uid = uidMap[0].HostID
        } else {
-               uid, err = toHost(0, uidMap)
+               uid, err = RawToHost(0, uidMap)
                if err != nil {
                        return -1, -1, err
                }
@@ -90,7 +90,7 @@ func GetRootUIDGID(uidMap, gidMap []IDMap) (int, int, error) {
        if len(gidMap) == 1 && gidMap[0].Size == 1 {
                gid = gidMap[0].HostID
        } else {
-               gid, err = toHost(0, gidMap)
+               gid, err = RawToHost(0, gidMap)
                if err != nil {
                        return -1, -1, err
                }
@@ -98,10 +98,14 @@ func GetRootUIDGID(uidMap, gidMap []IDMap) (int, int, 
error) {
        return uid, gid, nil
 }
 
-// toContainer takes an id mapping, and uses it to translate a
-// host ID to the remapped ID. If no map is provided, then the translation
-// assumes a 1-to-1 mapping and returns the passed in id
-func toContainer(hostID int, idMap []IDMap) (int, error) {
+// RawToContainer takes an id mapping, and uses it to translate a host ID to
+// the remapped ID. If no map is provided, then the translation assumes a
+// 1-to-1 mapping and returns the passed in id.
+//
+// If you wish to map a (uid,gid) combination you should use the corresponding
+// IDMappings methods, which ensure that you are mapping the correct ID against
+// the correct mapping.
+func RawToContainer(hostID int, idMap []IDMap) (int, error) {
        if idMap == nil {
                return hostID, nil
        }
@@ -114,10 +118,14 @@ func toContainer(hostID int, idMap []IDMap) (int, error) {
        return -1, fmt.Errorf("Host ID %d cannot be mapped to a container ID", 
hostID)
 }
 
-// toHost takes an id mapping and a remapped ID, and translates the
-// ID to the mapped host ID. If no map is provided, then the translation
-// assumes a 1-to-1 mapping and returns the passed in id #
-func toHost(contID int, idMap []IDMap) (int, error) {
+// RawToHost takes an id mapping and a remapped ID, and translates the ID to
+// the mapped host ID. If no map is provided, then the translation assumes a
+// 1-to-1 mapping and returns the passed in id.
+//
+// If you wish to map a (uid,gid) combination you should use the corresponding
+// IDMappings methods, which ensure that you are mapping the correct ID against
+// the correct mapping.
+func RawToHost(contID int, idMap []IDMap) (int, error) {
        if idMap == nil {
                return contID, nil
        }
@@ -188,25 +196,25 @@ func (i *IDMappings) ToHost(pair IDPair) (IDPair, error) {
        target := i.RootPair()
 
        if pair.UID != target.UID {
-               target.UID, err = toHost(pair.UID, i.uids)
+               target.UID, err = RawToHost(pair.UID, i.uids)
                if err != nil {
                        return target, err
                }
        }
 
        if pair.GID != target.GID {
-               target.GID, err = toHost(pair.GID, i.gids)
+               target.GID, err = RawToHost(pair.GID, i.gids)
        }
        return target, err
 }
 
 // ToContainer returns the container UID and GID for the host uid and gid
 func (i *IDMappings) ToContainer(pair IDPair) (int, int, error) {
-       uid, err := toContainer(pair.UID, i.uids)
+       uid, err := RawToContainer(pair.UID, i.uids)
        if err != nil {
                return -1, -1, err
        }
-       gid, err := toContainer(pair.GID, i.gids)
+       gid, err := RawToContainer(pair.GID, i.gids)
        return uid, gid, err
 }
 
-- 
2.30.2

Reply via email to