go1.20.5 (released 2023-06-06) includes four security fixes to the cmd/go and runtime packages, as well as bug fixes to the compiler, the go command, the runtime, and the crypto/rsa, net, and os packages. See the Go 1.20.5 milestone on our issue tracker for details: https://github.com/golang/go/issues?q=milestone%3AGo1.20.5+label%3ACherryPickApproved full diff: https://github.com/golang/go/compare/go1.20.4...go1.20.5 These minor releases include 3 security fixes following the security policy: - cmd/go: cgo code injection The go command may generate unexpected code at build time when using cgo. This may result in unexpected behavior when running a go program which uses cgo. This may occur when running an untrusted module which contains directories with newline characters in their names. Modules which are retrieved using the go command, i.e. via "go get", are not affected (modules retrieved using GOPATH-mode, i.e. GO111MODULE=off, may be affected). Thanks to Juho Nurminen of Mattermost for reporting this issue. This is CVE-2023-29402 and Go issue https://go.dev/issue/60167. - runtime: unexpected behavior of setuid/setgid binaries The Go runtime didn't act any differently when a binary had the setuid/setgid bit set. On Unix platforms, if a setuid/setgid binary was executed with standard I/O file descriptors closed, opening any files could result in unexpected content being read/written with elevated prilieges. Similarly if a setuid/setgid program was terminated, either via panic or signal, it could leak the contents of its registers. Thanks to Vincent Dehors from Synacktiv for reporting this issue. This is CVE-2023-29403 and Go issue https://go.dev/issue/60272. - cmd/go: improper sanitization of LDFLAGS The go command may execute arbitrary code at build time when using cgo. This may occur when running "go get" on a malicious module, or when running any other command which builds untrusted code. This is can by triggered by linker flags, specified via a "#cgo LDFLAGS" directive. Thanks to Juho Nurminen of Mattermost for reporting this issue. This is CVE-2023-29404 and CVE-2023-29405 and Go issues https://go.dev/issue/60305 and https://go.dev/issue/60306. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
159 lines
5.8 KiB
YAML
159 lines
5.8 KiB
YAML
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- "release/**"
|
|
tags:
|
|
- "v*" # Push events to matching v*, i.e. v1.0, v20.15.10
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- "release/**"
|
|
|
|
name: Release
|
|
|
|
env:
|
|
GO_VERSION: "1.20.5"
|
|
|
|
permissions: # added using https://github.com/step-security/secure-workflows
|
|
contents: read
|
|
|
|
jobs:
|
|
check:
|
|
name: Check Signed Tag
|
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 5
|
|
outputs:
|
|
stringver: ${{ steps.contentrel.outputs.stringver }}
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
path: src/github.com/containerd/containerd
|
|
|
|
- name: Check signature
|
|
run: |
|
|
releasever=${{ github.ref }}
|
|
releasever="${releasever#refs/tags/}"
|
|
TAGCHECK=$(git tag -v ${releasever} 2>&1 >/dev/null) ||
|
|
echo "${TAGCHECK}" | grep -q "error" && {
|
|
echo "::error::tag ${releasever} is not a signed tag. Failing release process."
|
|
exit 1
|
|
} || {
|
|
echo "Tag ${releasever} is signed."
|
|
exit 0
|
|
}
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
- name: Release content
|
|
id: contentrel
|
|
run: |
|
|
RELEASEVER=${{ github.ref }}
|
|
echo "stringver=${RELEASEVER#refs/tags/v}" >> $GITHUB_OUTPUT
|
|
git tag -l ${RELEASEVER#refs/tags/} -n20000 | tail -n +3 | cut -c 5- >release-notes.md
|
|
working-directory: src/github.com/containerd/containerd
|
|
|
|
- name: Save release notes
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: containerd-release-notes
|
|
path: src/github.com/containerd/containerd/release-notes.md
|
|
|
|
build:
|
|
name: Build Release Binaries
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 30
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
# Ubuntu 22.04 can't be used until we drop support for binary compatibility with dynamically-linked glibc 2.17 (CentOS 7).
|
|
# https://github.com/containerd/containerd/issues/7255
|
|
# https://github.com/containerd/containerd/issues/7961
|
|
- dockerfile-ubuntu: 20.04
|
|
dockerfile-platform: linux/amd64
|
|
- dockerfile-ubuntu: 20.04
|
|
dockerfile-platform: linux/arm64
|
|
- dockerfile-ubuntu: 20.04
|
|
dockerfile-platform: linux/ppc64le
|
|
- dockerfile-ubuntu: 20.04
|
|
dockerfile-platform: linux/s390x
|
|
- dockerfile-ubuntu: 20.04
|
|
dockerfile-platform: linux/riscv64
|
|
- dockerfile-ubuntu: 20.04
|
|
dockerfile-platform: windows/amd64
|
|
steps:
|
|
- name: Set RELEASE_VER
|
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
shell: bash
|
|
run: |
|
|
releasever=${{ github.ref }}
|
|
releasever="${releasever#refs/tags/}"
|
|
echo "RELEASE_VER=${releasever}" >> $GITHUB_ENV
|
|
- name: Checkout containerd
|
|
uses: actions/checkout@v3
|
|
with:
|
|
# Intentionally use github.repository instead of containerd/containerd to
|
|
# make this action runnable on forks.
|
|
# See https://github.com/containerd/containerd/issues/5098 for the context.
|
|
repository: ${{ github.repository }}
|
|
ref: ${{ github.ref }}
|
|
path: src/github.com/containerd/containerd
|
|
|
|
- name: Setup buildx instance
|
|
uses: docker/setup-buildx-action@v2
|
|
with:
|
|
use: true
|
|
- uses: crazy-max/ghaction-github-runtime@v2 # sets up needed vars for caching to github
|
|
- name: Make
|
|
shell: bash
|
|
run: |
|
|
cache="--cache-from=type=gha,scope=containerd-release --cache-to=type=gha,scope=containerd-release"
|
|
if [[ "${PLATFORM}" =~ "windows" ]]; then
|
|
# For Windows the cni build script generates a config but shells out to powershell (and also assume it is running on windows) to get a gateway and subnet.
|
|
# The values provided here are taken from packages that we previously generated.
|
|
export GATEWAY=172.21.16.1
|
|
export PREFIX_LEN=12
|
|
BUILD_ARGS="--build-arg GATEWAY --build-arg PREFIX_LEN"
|
|
fi
|
|
docker buildx build ${cache} --build-arg RELEASE_VER --build-arg UBUNTU_VERSION=${{ matrix.dockerfile-ubuntu }} --build-arg GO_VERSION ${BUILD_ARGS} -f .github/workflows/release/Dockerfile --platform=${PLATFORM} -o releases/ .
|
|
echo PLATFORM_CLEAN=${PLATFORM/\//-} >> $GITHUB_ENV
|
|
|
|
# Remove symlinks since we don't want these in the release Artifacts
|
|
find ./releases/ -maxdepth 1 -type l | xargs rm
|
|
working-directory: src/github.com/containerd/containerd
|
|
env:
|
|
PLATFORM: ${{ matrix.dockerfile-platform }}
|
|
- name: Save Artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: release-tars-${{env.PLATFORM_CLEAN}}
|
|
path: src/github.com/containerd/containerd/releases/*.tar.gz*
|
|
|
|
release:
|
|
name: Create containerd Release
|
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
permissions:
|
|
contents: write
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 10
|
|
needs: [build, check]
|
|
steps:
|
|
- name: Download builds and release notes
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
path: builds
|
|
- name: Create Release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
fail_on_unmatched_files: true
|
|
name: containerd ${{ needs.check.outputs.stringver }}
|
|
draft: false
|
|
prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
|
body_path: ./builds/containerd-release-notes/release-notes.md
|
|
files: |
|
|
builds/release-tars-**/*
|