go1.21.3 (released 2023-10-10) includes a security fix to the net/http package. See the Go 1.21.3 milestone on our issue tracker for details: https://github.com/golang/go/issues?q=milestone%3AGo1.21.3+label%3ACherryPickApproved full diff: https://github.com/golang/go/compare/go1.21.2...go1.21.3 From the security mailing: [security] Go 1.21.3 and Go 1.20.10 are released Hello gophers, We have just released Go versions 1.21.3 and 1.20.10, minor point releases. These minor releases include 1 security fixes following the security policy: - net/http: rapid stream resets can cause excessive work A malicious HTTP/2 client which rapidly creates requests and immediately resets them can cause excessive server resource consumption. While the total number of requests is bounded to the http2.Server.MaxConcurrentStreams setting, resetting an in-progress request allows the attacker to create a new request while the existing one is still executing. HTTP/2 servers now bound the number of simultaneously executing handler goroutines to the stream concurrency limit. New requests arriving when at the limit (which can only happen after the client has reset an existing, in-flight request) will be queued until a handler exits. If the request queue grows too large, the server will terminate the connection. This issue is also fixed in golang.org/x/net/http2 v0.17.0, for users manually configuring HTTP/2. The default stream concurrency limit is 250 streams (requests) per HTTP/2 connection. This value may be adjusted using the golang.org/x/net/http2 package; see the Server.MaxConcurrentStreams setting and the ConfigureServer function. This is CVE-2023-39325 and Go issue https://go.dev/issue/63417. This is also tracked by CVE-2023-44487. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
135 lines
5.4 KiB
Docker
135 lines
5.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
ARG BASE_VARIANT=alpine
|
|
ARG GO_VERSION=1.21.3
|
|
ARG ALPINE_VERSION=3.17
|
|
ARG XX_VERSION=1.2.1
|
|
ARG GOVERSIONINFO_VERSION=v1.3.0
|
|
ARG GOTESTSUM_VERSION=v1.10.0
|
|
ARG BUILDX_VERSION=0.11.2
|
|
ARG COMPOSE_VERSION=v2.22.0
|
|
|
|
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
|
|
|
|
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS build-base-alpine
|
|
ENV GOTOOLCHAIN=local
|
|
COPY --link --from=xx / /
|
|
RUN apk add --no-cache bash clang lld llvm file git
|
|
WORKDIR /go/src/github.com/docker/cli
|
|
|
|
FROM build-base-alpine AS build-alpine
|
|
ARG TARGETPLATFORM
|
|
# gcc is installed for libgcc only
|
|
RUN xx-apk add --no-cache musl-dev gcc
|
|
|
|
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-bullseye AS build-base-bullseye
|
|
ENV GOTOOLCHAIN=local
|
|
COPY --link --from=xx / /
|
|
RUN apt-get update && apt-get install --no-install-recommends -y bash clang lld llvm file
|
|
WORKDIR /go/src/github.com/docker/cli
|
|
|
|
FROM build-base-bullseye AS build-bullseye
|
|
ARG TARGETPLATFORM
|
|
RUN xx-apt-get install --no-install-recommends -y libc6-dev libgcc-10-dev
|
|
# workaround for issue with llvm 11 for darwin/amd64 platform:
|
|
# # github.com/docker/cli/cmd/docker
|
|
# /usr/local/go/pkg/tool/linux_amd64/link: /usr/local/go/pkg/tool/linux_amd64/link: running strip failed: exit status 1
|
|
# llvm-strip: error: unsupported load command (cmd=0x5)
|
|
# more info: https://github.com/docker/cli/pull/3717
|
|
# FIXME: remove once llvm 12 available on debian
|
|
RUN [ "$TARGETPLATFORM" != "darwin/amd64" ] || ln -sfnT /bin/true /usr/bin/llvm-strip
|
|
|
|
FROM build-base-${BASE_VARIANT} AS goversioninfo
|
|
ARG GOVERSIONINFO_VERSION
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
GOBIN=/out GO111MODULE=on CGO_ENABLED=0 go install "github.com/josephspurrier/goversioninfo/cmd/goversioninfo@${GOVERSIONINFO_VERSION}"
|
|
|
|
FROM build-base-${BASE_VARIANT} AS gotestsum
|
|
ARG GOTESTSUM_VERSION
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
GOBIN=/out GO111MODULE=on CGO_ENABLED=0 go install "gotest.tools/gotestsum@${GOTESTSUM_VERSION}" \
|
|
&& /out/gotestsum --version
|
|
|
|
FROM build-${BASE_VARIANT} AS build
|
|
# GO_LINKMODE defines if static or dynamic binary should be produced
|
|
ARG GO_LINKMODE=static
|
|
# GO_BUILDTAGS defines additional build tags
|
|
ARG GO_BUILDTAGS
|
|
# GO_STRIP strips debugging symbols if set
|
|
ARG GO_STRIP
|
|
# CGO_ENABLED manually sets if cgo is used
|
|
ARG CGO_ENABLED
|
|
# VERSION sets the version for the produced binary
|
|
ARG VERSION
|
|
# PACKAGER_NAME sets the company that produced the windows binary
|
|
ARG PACKAGER_NAME
|
|
COPY --link --from=goversioninfo /out/goversioninfo /usr/bin/goversioninfo
|
|
# in bullseye arm64 target does not link with lld so configure it to use ld instead
|
|
RUN [ ! -f /etc/alpine-release ] && xx-info is-cross && [ "$(xx-info arch)" = "arm64" ] && XX_CC_PREFER_LINKER=ld xx-clang --setup-target-triple || true
|
|
RUN --mount=type=bind,target=.,ro \
|
|
--mount=type=cache,target=/root/.cache \
|
|
--mount=from=dockercore/golang-cross:xx-sdk-extras,target=/xx-sdk,src=/xx-sdk \
|
|
--mount=type=tmpfs,target=cli/winresources \
|
|
# override the default behavior of go with xx-go
|
|
xx-go --wrap && \
|
|
# export GOCACHE=$(go env GOCACHE)/$(xx-info)$([ -f /etc/alpine-release ] && echo "alpine") && \
|
|
TARGET=/out ./scripts/build/binary && \
|
|
xx-verify $([ "$GO_LINKMODE" = "static" ] && echo "--static") /out/docker
|
|
|
|
FROM build-${BASE_VARIANT} AS test
|
|
COPY --link --from=gotestsum /out/gotestsum /usr/bin/gotestsum
|
|
ENV GO111MODULE=auto
|
|
RUN --mount=type=bind,target=.,rw \
|
|
--mount=type=cache,target=/root/.cache \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
gotestsum -- -coverprofile=/tmp/coverage.txt $(go list ./... | grep -vE '/vendor/|/e2e/')
|
|
|
|
FROM scratch AS test-coverage
|
|
COPY --from=test /tmp/coverage.txt /coverage.txt
|
|
|
|
FROM build-${BASE_VARIANT} AS build-plugins
|
|
ARG GO_LINKMODE=static
|
|
ARG GO_BUILDTAGS
|
|
ARG GO_STRIP
|
|
ARG CGO_ENABLED
|
|
ARG VERSION
|
|
RUN --mount=ro --mount=type=cache,target=/root/.cache \
|
|
--mount=from=dockercore/golang-cross:xx-sdk-extras,target=/xx-sdk,src=/xx-sdk \
|
|
xx-go --wrap && \
|
|
TARGET=/out ./scripts/build/plugins e2e/cli-plugins/plugins/*
|
|
|
|
FROM build-base-alpine AS e2e-base-alpine
|
|
RUN apk add --no-cache build-base curl openssl openssh-client
|
|
|
|
FROM build-base-bullseye AS e2e-base-bullseye
|
|
RUN apt-get update && apt-get install -y build-essential curl openssl openssh-client
|
|
|
|
FROM docker/buildx-bin:${BUILDX_VERSION} AS buildx
|
|
FROM docker/compose-bin:${COMPOSE_VERSION} AS compose
|
|
|
|
FROM e2e-base-${BASE_VARIANT} AS e2e
|
|
ARG NOTARY_VERSION=v0.6.1
|
|
ADD --chmod=0755 https://github.com/theupdateframework/notary/releases/download/${NOTARY_VERSION}/notary-Linux-amd64 /usr/local/bin/notary
|
|
COPY --link e2e/testdata/notary/root-ca.cert /usr/share/ca-certificates/notary.cert
|
|
RUN echo 'notary.cert' >> /etc/ca-certificates.conf && update-ca-certificates
|
|
COPY --link --from=gotestsum /out/gotestsum /usr/bin/gotestsum
|
|
COPY --link --from=build /out ./build/
|
|
COPY --link --from=build-plugins /out ./build/
|
|
COPY --link --from=buildx /buildx /usr/libexec/docker/cli-plugins/docker-buildx
|
|
COPY --link --from=compose /docker-compose /usr/libexec/docker/cli-plugins/docker-compose
|
|
COPY --link . .
|
|
ENV DOCKER_BUILDKIT=1
|
|
ENV PATH=/go/src/github.com/docker/cli/build:$PATH
|
|
CMD ./scripts/test/e2e/entry
|
|
|
|
FROM build-base-${BASE_VARIANT} AS dev
|
|
COPY --link . .
|
|
|
|
FROM scratch AS plugins
|
|
COPY --from=build-plugins /out .
|
|
|
|
FROM scratch AS binary
|
|
COPY --from=build /out .
|