Go: ランタむムシグナルスタックのmlockが倱敗したした12

䜜成日 2020幎02月25日  Â·  128コメント  Â·  ゜ヌス: golang/go

どのバヌゞョンのGoを䜿甚しおいたすか go version 

 $ goバヌゞョン
 goバヌゞョンgo1.14rc1linux / amd64

この問題は最新リリヌスで再珟されたすか

golang:1.14-rc-alpine docker imageでこれをヒットしたしたが、1.13でぱラヌは発生したせん。

どのオペレヌティングシステムずプロセッサアヌキテクチャを䜿甚しおいたすか go env 

go env出力

$ go env
GO111MODULE = ""
GOARCH = "amd64"
GOBIN = ""
GOCACHE = "/ root / .cache / go-build"
GOENV = "/ root / .config / go / env"
GOEXE = ""
GOFLAGS = ""
GOHOSTARCH = "amd64"
GOHOSTOS = "linux"
GOINSECURE = ""
GONOPROXY = ""
GONOSUMDB = ""
GOOS = "linux"
GOPATH = "/ go"
GOPRIVATE = ""
GOPROXY = "https//proxy.golang.org,direct"
GOROOT = "/ usr / local / go"
GOSUMDB = "sum.golang.org"
GOTMPDIR = ""
GOTOOLDIR = "/ usr / local / go / pkg / tool / linux_amd64"
GCCGO = "gccgo"
AR = "ar"
CC = "gcc"
CXX = "g ++"
CGO_ENABLED = "1"
GOMOD = ""
CGO_CFLAGS = "-g -O2"
CGO_CPPFLAGS = ""
CGO_CXXFLAGS = "-g -O2"
CGO_FFLAGS = "-g -O2"
CGO_LDFLAGS = "-g -O2"
PKG_CONFIG = "pkg-config"
GOGCCFLAGS = "-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length = 0 -fdebug-prefix-map = / tmp / go-build968395959 = / tmp / go-build -gno-record- gcc-switches」

あなたは䜕をした

https://github.com/ethereum/go-ethereumクロヌンを䜜成し、 Dockerfileのビルダヌバヌゞョンをgolang:1.14-rc-alpineに眮き換えたたは䞋のDockerfileを䜿甚 、ルヌトから

$ docker build .

FROM golang:1.14-rc-alpine

RUN apk add --no-cache make gcc musl-dev linux-headers git

ADD . /go-ethereum
RUN cd /go-ethereum && make geth

䜕を芋たいず思いたしたか

Goはビルドスクリプトを正垞に実行するはずです。

代わりに䜕を芋たしたか

Step 4/9 : RUN cd /go-ethereum && make geth
 ---> Running in 67781151653c
env GO111MODULE=on go run build/ci.go install ./cmd/geth
runtime: mlock of signal stack failed: 12
runtime: increase the mlock limit (ulimit -l) or
runtime: update your kernel to 5.3.15+, 5.4.2+, or 5.5+
fatal error: mlock failed

runtime stack:
runtime.throw(0xa3b461, 0xc)
    /usr/local/go/src/runtime/panic.go:1112 +0x72
runtime.mlockGsignal(0xc0004a8a80)
    /usr/local/go/src/runtime/os_linux_x86.go:72 +0x107
runtime.mpreinit(0xc000401880)
    /usr/local/go/src/runtime/os_linux.go:341 +0x78
runtime.mcommoninit(0xc000401880)
    /usr/local/go/src/runtime/proc.go:630 +0x108
runtime.allocm(0xc000033800, 0xa82400, 0x0)
    /usr/local/go/src/runtime/proc.go:1390 +0x14e
runtime.newm(0xa82400, 0xc000033800)
    /usr/local/go/src/runtime/proc.go:1704 +0x39
runtime.startm(0x0, 0xc000402901)
    /usr/local/go/src/runtime/proc.go:1869 +0x12a
runtime.wakep(...)
    /usr/local/go/src/runtime/proc.go:1953
runtime.resetspinning()
    /usr/local/go/src/runtime/proc.go:2415 +0x93
runtime.schedule()
    /usr/local/go/src/runtime/proc.go:2527 +0x2de
runtime.mstart1()
    /usr/local/go/src/runtime/proc.go:1104 +0x8e
runtime.mstart()
    /usr/local/go/src/runtime/proc.go:1062 +0x6e

...
make: *** [Makefile:16: geth] Error 2
NeedsInvestigation

最も参考になるコメント

カヌネルのバグは、Go 1.13でランダムなメモリ砎損ずしお珟れたしたプリ゚ンプティブスケゞュヌリングありずなしの䞡方。 Go 1.14の新機胜は、バグの存圚を怜出し、それを回避しようずし、それが䞍可胜な堎合は早期に倧音量でクラッシュするこずを奜むこずです。 あなたは私があなたに玹介した問題で詳现を芋るこずができたす。

あなたは私を䞍誠実で厄介だず呌んでいるので、行動芏範に぀いおもう䞀床思い出させたす https 

党おのコメント128件

これは、Goプログラムに倧きな圱響を䞎えるカヌネルのバグを回避しようずした結果です。 https://github.com/golang/go/issues/35777を参照しお

゚ラヌメッセヌゞは、利甚可胜な既知の修正が2぀しかないこずを瀺しおいたす。ulimitを増やすか、新しいカヌネルにアップグレヌドしたす。

さお、私は公匏のアルパむンドッカヌむメヌゞを実行しおいたす。その目的は、Goプログラムを構築できるようにするこずです。 どうやらそれはできたせん。 IMHOアップストリヌムむメヌゞは、その目的を達成するために修正されたものである必芁がありたす。アップストリヌムむメヌゞのバグをハックするためのビルドむンフラではありたせん。

アルパむンのむメヌゞはGoチヌムによっお維持されおいたすか 本物の質問です。それに぀いおはわかりたせん。いずれにせよ、はい、むメヌゞは修正する必芁がありたす。理想的には、カヌネルをアップグレヌドしたす。

Dockerむメヌゞhttps://hub.docker.com/_/golangを誰がどのように維持するかは完党にはわかりたせんが、Dockerハブリポゞトリは「公匏むメヌゞ」であり、ステヌタスを取埗するのは非垞に困難です。ですから私は、食物連鎖が責任を負うのに十分な高さの誰かを想定しおいたす。

これは「Dockerコミュニティによっお維持されおいたす」。 問題はで提出する必芁がありたす

https://github.com/docker-library/golang/issues

線集問題はホストカヌネルであり、Dockerラむブラリむメヌゞではないため、修正できたせん。

それで、Goクラッシュの公匏の解決策は、他のすべおの人に指を向けおコヌドをハックするこずですか 理にかなっおいたす。

@karalabehttps//golang.org/conductを思い出させおください。 特に、敬意を払い、慈善掻動を行っおください。

質問に答えおください

問題を正しい問題远跡システムにリダむレクトするのが暙準的な方法です。

Go偎でどのオプションが怜蚎されたかを確認したい堎合は、前にリンクした問題で考えられる回避策ず修正に぀いおの広範な議論がありたす。

この問題はGo1.13では発生したせん。 ゚ルゎ、これはGo1.14で導入されたバグです。

コヌドの䞀郚を元に戻すず実際に修正されるため、修正できないず蚀っお回避策を䜿甚するように指瀺するのは䞍正です。 別の解決策は、問題のあるプラットフォヌム/カヌネルを怜出し、Goに組み蟌たれたフォヌルバックメカニズムを提䟛するこずです。

別のカヌネルを䜿甚するように人々に指瀺するこずは、ほずんどの人が呚りを回っお新しいカヌネルを構築できるわけではないため、特に厄介です。 alpineが新しいカヌネルをリリヌスしない堎合、ほずんどの開発者ができるこずはほずんどありたせん。 そしお最埌に、プロゞェクトが安定したむンフラストラクチャに䟝存しおいお、カヌネルを亀換するだけでは䞍十分な堎合は、再び問題が発生したす。

問題を正しい問題远跡システムにリダむレクトするのが暙準的な方法です。

Goがクラッシュするずいう事実は、Dockerのせいではありたせん。 GoクラッシュをDockerリポゞトリにリダむレクトするのはたわみです。

実行時にプリ゚ンプティブスケゞュヌリングを無効にするこずもできたす

$ GODEBUG=asyncpreemptoff=1 ./your_app

@ianlancetaylor圱響を受けるカヌネルで実行するずきに、これを行うこずをお勧めしたす。 それは実行可胜ですか

ずころで、Dockerラむブラリモゞュヌルがタむムリヌな曎新を取埗しないこずは既知の問題であり、これはセキュリティ䞊の責任です。 買い手責任負担。

カヌネルのバグは、Go 1.13でランダムなメモリ砎損ずしお珟れたしたプリ゚ンプティブスケゞュヌリングありずなしの䞡方。 Go 1.14の新機胜は、バグの存圚を怜出し、それを回避しようずし、それが䞍可胜な堎合は早期に倧音量でクラッシュするこずを奜むこずです。 あなたは私があなたに玹介した問題で詳现を芋るこずができたす。

あなたは私を䞍誠実で厄介だず呌んでいるので、行動芏範に぀いおもう䞀床思い出させたす https 

@karalabe 、私は間違っお話したした、問題はあなたのホストカヌネルであり、Dockerむメヌゞではありたせん。 曎新できたせんか

私は最新のUbuntuず利甚可胜な最新のカヌネルを䜿甚しおいたす。 ゚ラヌメッセヌゞに基づくず、利甚可胜なすべおのUbuntuカヌネルはGo 1.14https  //packages.ubuntu.com/search = linux-image-genericには適しおいないようです。

$ uname -aの出力をメむンの問題のテキストに远加できたすか そしお、おそらくゎルヌチンスタックトレヌスを削陀したすか

golang-devにメモを投皿したした。

cc @aclements

あなたが最新のubuntuずカヌネルを䜿甚しおいるず蚀うずき、正確にはどういう意味ですか぀たり、dpkg -l linux-image- *、lsb_release -a、uname -a、そのようなものの出力。修正は、19.10珟圚の安定版リリヌスず20.04開発リリヌスの䞡方のアップデヌトポケットのカヌネルにありたす。 18.04のGAカヌネルには含たれおいたせんが、HWEカヌネルには含たれおいたすが、それらはgcc 9でビルドされおいないため、圱響を受けるこずはありたせん。

@networkimprov信号のプリ゚ンプションを無効にするず、バグが発生する可胜性が䜎くなりたすが、バグは匕き続き存圚したす。 これは、特定のLinuxカヌネルバヌゞョンのバグです。 このバグは、すべおの蚀語のすべおのプログラムに圱響したす。 信号プリ゚ンプションを䜿甚するGoプログラムで特に芳察される可胜性がありたすが、他のすべおのプログラムにも存圚したす。

Goは、シグナルスタックをmlockするこずでバグを回避しようずしたす。 mlockの制限に達しない限り、これは正垞に機胜したす。 この回避策の1぀の欠点は、mlockを実行しなかった堎合に発生するようなランダムなメモリの砎損が原因で倱敗するこずがあるのではなく、問題を非垞に目立たせるこずだず思いたす。

ある時点で、カヌネルのバグを回避する方法はありたせん。

@karalabe

私は最新のUbuntuず利甚可胜な最新のカヌネルを䜿甚しおいたす

$ docker pull -q ubuntu:latest
docker.io/library/ubuntu:latest
$ docker run --rm -i -t ubuntu
root<strong i="9">@e2689d364a25</strong>:/# uname -a
Linux e2689d364a25 5.4.8-050408-generic #202001041436 SMP Sat Jan 4 19:40:55 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

これは最小バヌゞョン芁件を満たしおいたす。

同様に

$ docker pull -q golang:1.14-alpine
docker.io/library/golang:1.14-alpine
$ docker run --rm -i -t golang:1.14-alpine
/go # uname -a
Linux d4a35392c5b8 5.4.8-050408-generic #202001041436 SMP Sat Jan 4 19:40:55 UTC 2020 x86_64 Linux

あなたが芋おいるものを明確にできたすか

@mwhudson

$ dpkg -l linux-image-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                   Version      Architecture Description
+++-======================================-============-============-===============================================================
rc  linux-image-4.13.0-16-generic          4.13.0-16.19 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-19-generic          4.13.0-19.22 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-21-generic          4.13.0-21.24 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-25-generic          4.13.0-25.29 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-36-generic          4.13.0-36.40 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-37-generic          4.13.0-37.42 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-38-generic          4.13.0-38.43 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-41-generic          4.13.0-41.46 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.13.0-45-generic          4.13.0-45.50 amd64        Linux kernel image for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-4.15.0-23-generic          4.15.0-23.25 amd64        Signed kernel image generic
rc  linux-image-4.15.0-30-generic          4.15.0-30.32 amd64        Signed kernel image generic
rc  linux-image-4.15.0-32-generic          4.15.0-32.35 amd64        Signed kernel image generic
rc  linux-image-4.15.0-34-generic          4.15.0-34.37 amd64        Signed kernel image generic
rc  linux-image-4.15.0-36-generic          4.15.0-36.39 amd64        Signed kernel image generic
rc  linux-image-4.15.0-39-generic          4.15.0-39.42 amd64        Signed kernel image generic
rc  linux-image-4.15.0-42-generic          4.15.0-42.45 amd64        Signed kernel image generic
rc  linux-image-4.15.0-43-generic          4.15.0-43.46 amd64        Signed kernel image generic
rc  linux-image-4.15.0-45-generic          4.15.0-45.48 amd64        Signed kernel image generic
rc  linux-image-4.15.0-47-generic          4.15.0-47.50 amd64        Signed kernel image generic
rc  linux-image-4.18.0-17-generic          4.18.0-17.18 amd64        Signed kernel image generic
rc  linux-image-5.0.0-13-generic           5.0.0-13.14  amd64        Signed kernel image generic
rc  linux-image-5.0.0-15-generic           5.0.0-15.16  amd64        Signed kernel image generic
rc  linux-image-5.0.0-16-generic           5.0.0-16.17  amd64        Signed kernel image generic
rc  linux-image-5.0.0-17-generic           5.0.0-17.18  amd64        Signed kernel image generic
rc  linux-image-5.0.0-19-generic           5.0.0-19.20  amd64        Signed kernel image generic
rc  linux-image-5.0.0-20-generic           5.0.0-20.21  amd64        Signed kernel image generic
rc  linux-image-5.0.0-21-generic           5.0.0-21.22  amd64        Signed kernel image generic
rc  linux-image-5.0.0-25-generic           5.0.0-25.26  amd64        Signed kernel image generic
rc  linux-image-5.0.0-27-generic           5.0.0-27.28  amd64        Signed kernel image generic
rc  linux-image-5.0.0-29-generic           5.0.0-29.31  amd64        Signed kernel image generic
rc  linux-image-5.0.0-32-generic           5.0.0-32.34  amd64        Signed kernel image generic
rc  linux-image-5.3.0-19-generic           5.3.0-19.20  amd64        Signed kernel image generic
rc  linux-image-5.3.0-22-generic           5.3.0-22.24  amd64        Signed kernel image generic
rc  linux-image-5.3.0-23-generic           5.3.0-23.25  amd64        Signed kernel image generic
rc  linux-image-5.3.0-24-generic           5.3.0-24.26  amd64        Signed kernel image generic
rc  linux-image-5.3.0-26-generic           5.3.0-26.28  amd64        Signed kernel image generic
ii  linux-image-5.3.0-29-generic           5.3.0-29.31  amd64        Signed kernel image generic
ii  linux-image-5.3.0-40-generic           5.3.0-40.32  amd64        Signed kernel image generic
rc  linux-image-extra-4.13.0-16-generic    4.13.0-16.19 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-19-generic    4.13.0-19.22 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-21-generic    4.13.0-21.24 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-25-generic    4.13.0-25.29 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-36-generic    4.13.0-36.40 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-37-generic    4.13.0-37.42 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-38-generic    4.13.0-38.43 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-41-generic    4.13.0-41.46 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
rc  linux-image-extra-4.13.0-45-generic    4.13.0-45.50 amd64        Linux kernel extra modules for version 4.13.0 on 64 bit x86 SMP
ii  linux-image-generic                    5.3.0.40.34  amd64        Generic Linux kernel image

$ lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 19.10
Release:    19.10
Codename:   eoan
$ uname -a

Linux roaming-parsley 5.3.0-40-generic #32-Ubuntu SMP Fri Jan 31 20:24:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ sudo apt-get dist-upgrade 

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

@myitcv

FROM golang:1.14-alpine
RUN  apk add --no-cache make gcc musl-dev linux-headers git wget

RUN \
  wget -O geth.tgz "https://github.com/ethereum/go-ethereum/archive/v1.9.11.tar.gz" && \
  mkdir /go-ethereum && tar -C /go-ethereum -xzf geth.tgz --strip-components=1 && \
  cd /go-ethereum && make geth
$ docker build .

Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM golang:1.14-alpine
1.14-alpine: Pulling from library/golang
c9b1b535fdd9: Already exists 
cbb0d8da1b30: Already exists 
d909eff28200: Already exists 
8b9d9d6824f5: Pull complete 
a50ef8b76e53: Pull complete 
Digest: sha256:544b5e7984e7b2e7a2a9b967bbab6264cf91a3b3816600379f5dc6fbc09466cc
Status: Downloaded newer image for golang:1.14-alpine
 ---> 51e47ee4db58

Step 2/3 : RUN  apk add --no-cache make gcc musl-dev linux-headers git wget
 ---> Running in 879f98ddb4ff
[...]
OK: 135 MiB in 34 packages
Removing intermediate container 879f98ddb4ff
 ---> 9132e4dae4c3

Step 3/3 : RUN   wget -O geth.tgz "https://github.com/ethereum/go-ethereum/archive/v1.9.11.tar.gz" &&   mkdir /go-ethereum && tar -C /go-ethereum -xzf geth.tgz --strip-components=1 &&   cd /go-ethereum && make geth
 ---> Running in a24c806c60d3
2020-02-26 07:18:54--  https://github.com/ethereum/go-ethereum/archive/v1.9.11.tar.gz
[...]
2020-02-26 07:18:58 (2.48 MB/s) - 'geth.tgz' saved [8698235]

env GO111MODULE=on go run build/ci.go install ./cmd/geth
runtime: mlock of signal stack failed: 12
runtime: increase the mlock limit (ulimit -l) or
runtime: update your kernel to 5.3.15+, 5.4.2+, or 5.5+
fatal error: mlock failed

申し蚳ありたせんが、私の前のコメントは誀解を招くものでした。 もちろん、Dockerコンテナ内でuname -aによっお返されるカヌネルバヌゞョンは、ホストのバヌゞョンになりたす。

したがっお、次のようになりたす。

$ uname -a

Linux roaming-parsley 5.3.0-40-generic #32-Ubuntu SMP Fri Jan 31 20:24:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

ホストOSカヌネルをアップグレヌドする必芁がありたす。

FWIW、Alpineを䜿甚しおmake gethを䜿甚しお䞊蚘でレむアりトした手順は、私にずっお

...
Done building.
Run "./build/bin/geth" to launch geth.

はい。ただし、以前の投皿で、私はすでに最新のUbuntuを䜿甚しおおり、パッケヌゞリポゞトリから利甚可胜な最新のカヌネルをむンストヌルしおいるこずを匷調したした。 ゜ヌスからカヌネル党䜓を再構築する以倖に、Go1.14で動䜜するようにカヌネルを曎新する方法がわかりたせん。 倚分私は䜕かが欠けおいたすか

匷調するために、私は回避策が䜕であるかを理解しおいたす、そしお私がそれを機胜させたいのであれば、私はそうするこずができたす。 最終的には他の人にも同じ問題が発生するこずが予想されるので、この問題レポヌトを開きたした。 システムを曎新するだけで問題が解決する堎合は、それを解決策ずしお喜んで受け入れたすが、䜕かが足りない堎合を陀いお、固定カヌネルは最近のUbuntuナヌザヌには利甚できないため、かなり倧きなナヌザヌベヌスが圱響を受ける可胜性がありたす。

はい。ただし、以前の投皿で、私はすでに最新のUbuntuを䜿甚しおおり、パッケヌゞリポゞトリから利甚可胜な最新のカヌネルをむンストヌルしおいるこずを匷調したした。 ゜ヌスからカヌネル党䜓を再構築する以倖に、Go1.14で動䜜するようにカヌネルを曎新する方法がわかりたせん。 倚分私は䜕かが欠けおいたすか

うヌん、はい、私も焊点を合わせお再珟したした。 修正はUbuntueoanカヌネルのgitにありたす https //kernel.ubuntu.com/git/ubuntu/ubuntu-eoan.git/commit/id = 59e7e6398a9d6d91cd01bc364f9491dc1bf2a426そしおそのコミットは5.3の祖先にありたす。 0-40.32なので、修正は䜿甚しおいるカヌネルにあるはずです。 蚀い換えれば、カヌネルチヌムを巻き蟌む必芁があるず思いたす。そうしようず思いたす。

@ karalabe-間違いに気づきたした。最新のUbuntuを䜿甚しおいたしたが、実際にはeoanたす。

@ mwhudson-泚意すべきこずは1぀だけですおそらくすでにこれを知っおいるでしょうが、このスむッチの原因ずなるコヌドの衚面的な䞀瞥

https://github.com/golang/go/blob/20a838ab94178c55bc4dc23ddc332fce8545a493/src/runtime/os_linux_x86.go#L56 -L61

Go偎がパッチリリヌス15以降をチェックしおいるこずを瀺唆しおいるようです。 5.3.0-40.32はパッチバヌゞョンずしお䜕を報告したすか 私は0を掚枬しおいたすか

ここで問題を解決するたで、このディスカッションを再開したす。

自分で぀なぎ合わせなければならなかったので、少し芁玄したす。

  • 根本原因 https 
  • 圱響を受けるLinuxカヌネル5.2.x、5.3.0-5.3.14、5.4.0-5.4.1
  • 2019-12-05にリリヌスされたLinuxカヌネル5.3.15を修正したした https //lwn.net/Articles/806395/
  • 2019-12-05でリリヌスされたLinuxカヌネル5.4.2を修正したした https //lwn.net/Articles/806394/
  • Goの郚分的な回避策 https 
  • 最新のUbuntuリリヌスで利甚可胜なLinuxカヌネル https  generic
  • Ubuntuで利甚可胜な最新のLinuxカヌネルはバヌゞョン5.3.0です。
  • ただし、パッチはUbuntuの5.3.0カヌネルに厳遞されたようです https //kernel.ubuntu.com/git/ubuntu/ubuntu-eoan.git/commit/

したがっお、Ubuntuのカヌネルにはパッチが適甚されおいるようですが、回避策はずにかく有効になりたす。

したがっお、Ubuntuのカヌネルにはパッチが適甚されおいるようですが、回避策はずにかく有効になりたす。

そうそう、私は実際に倱敗を読むべきではありたせんか これは、回避策が実際には必芁ないが、Goがこれを知る良い方法がない堎合、元のバグではなく、回避策が倱敗するこずです。 UbuntuでGo1.14パッケヌゞのチェックアりトにパッチを適甚できたすが、

問題は、珟時点で「脆匱な」カヌネルを䜿甚しおいるナヌザヌの数だず思いたす。 今のずころ、パッチが適甚されおいないカヌネルをgcc9でコンパむルしおいるディストリビュヌションはそれほど倚くありたせん。

そんなに倚くはありえない...

有名な最埌の蚀葉 D

ずはいえ、真面目な話ですが、カヌネルを頻繁に曎新する人はいないず思いたす。倚くのシステムでは曎新できたせん。 おそらく、どのシステム/ディストリビュヌションがデフォルトで脆匱なカヌネルを䜿甚しお

UbuntuでGo1.14パッケヌゞのチェックアりトにパッチを適甚できたすが、

たた、゜ヌスからビルドするナヌザヌを芋逃すこずになりたす。 たずえば、Launchpadのすべおのディストリビュヌションに最近のGoバンドルがないため、EthereumはPPAの゜ヌスビルドを実行したす。

Ubuntuおよび他のディストリビュヌションがLinuxカヌネルパッチリリヌスに埓う代わりにチェリヌピッキングを䜿甚するのは䞀般的ですか https://packages.ubuntu.com/search?keywords=linux-image-genericでは、すべおのカヌネルのパッチリリヌスがれロになっおいたす。

Googleですばやく怜玢する限り、Ubuntuは、ディストリビュヌションの出荷埌に新しいカヌネルをリリヌスするのではなく、セキュリティ修正を遞択するだけです぀たり、パッチバヌゞョンのバンプはありたせん。 これの䟋倖はLTSバヌゞョン5幎間サポヌトで、新しいハヌドりェアをサポヌトするために数幎ごずにカヌネルの曎新を取埗する可胜性がありたすただし、これも非垞にたれです。 他のディストリビュヌションに぀いおは知りたせん。

今の私の限られた知識では、これは奇劙に思えたす。 パッチリリヌスは、制埡された方法でパッチを配垃するこずを目的ずしおいるため、ナヌザヌこの堎合はGoランタむムは、含たれおいるパッチず含たれおいないパッチを知るこずができたす。 しかし、これは珟状なので、私たちはそれず䞀緒に暮らす必芁がありたす。

未解決の質問

  • この問題の圱響を受ける人は䜕人ですか
  • ulimitは実行可胜な回避策ですか
  • Linuxカヌネルのパッチ番号を「無芖」するディストリビュヌションはUbuntuだけですか
  • 䞊蚘の質問ぞの回答に応じおUbuntuに特別な怜出を远加するこずは合理的でしょうか

@neelance

Ubuntuおよび他のディストリビュヌションがLinuxカヌネルパッチリリヌスに埓う代わりにチェリヌピッキングを䜿甚するのは䞀般的ですか

Ubuntuだけでなく、倚くのディストリビュヌションがそれを行っおいたす。 Debianがそれを行い、Red Hat Enterprise Linuxがそれを行い、SUSEが゚ンタヌプラむズディストリビュヌションに察しおもそれを行うこずを期埅しおいたす。 アップストリヌムの安定したリリヌスを積極的にフォロヌできない堎合およびアップストリヌムのサポヌトがなくなるず安定したリリヌスを切り替える堎合、バグ修正を取埗する唯䞀の方法はチェリヌピッキングです。 Fedoraは䟋倖です。 少し経぀ず、最新の安定したリリヌスのアップストリヌムカヌネルにリベヌスされたす。

コンテナ゚ンゞンで䜿甚されるプロプラむ゚タリカヌネルの問題もありたす。 それらの゜ヌスを芋るこずさえできず、それらのいく぀かは過去にカヌネルのバヌゞョン番号に぀いお嘘を぀いたこずがありたす。 さくらんが狩りも䜿っおいるず思いたす。

䞀般に、カヌネル機胜たたはバグのバヌゞョンチェックは本圓に悪い考えです。 静的リンクのためにGoの堎合はさらに悪いので、アプリケヌションの䞋のランタむムを亀換しおカヌネルの期埅を修正するこずは䞍可胜です。

Ubuntuおよび他のディストリビュヌションがLinuxカヌネルパッチリリヌスに埓う代わりにチェリヌピッキングを䜿甚するのは䞀般的ですか https://packages.ubuntu.com/search?keywords=linux-image-genericでは、すべおのカヌネルのパッチリリヌスがれロになっおいたす。

基本カヌネルバヌゞョン文字列は倉曎されたせん、それは本圓です。 ただし、アップストリヌムの安定版リリヌスがマヌゞされないずいう意味ではありたせん。コヌドが倉曎されるず、代わりにABI番号が増加したす。

適切な倉曎ログを衚瀺しないメタパッケヌゞを遞択したこずに泚意しおください。ここでは、最新バヌゞョン5.4.0-14.17が5.4.18安定版リリヌスにマヌゞされおいるこずがわかりたす。
http://changelogs.ubuntu.com/changelogs/pool/main/l/linux-5.4/linux-5.4_5.4.0-14.17/changelog

すべおのディストリビュヌションで適切な自動怜出を行うこずはほが䞍可胜のようです。 3぀のオプションがありたす。

  • 䜕もしない。
  • 回避策をオプトむンしたす。
  • 回避策をオプトアりトしたす。

たたは、5.3.xおよび5.4.xでデフォルトで非同期プリ゚ンプションを無効にし、ナヌザヌが実行時に有効にするようにしたす。

https://github.com/golang/go/issues/37436#issuecomment -591237929は、非同期プリ゚ンプションを無効にするこずは適切な解決策ではないず述べおいたすね。

厳密に蚀えば、非同期プリ゚ンプションが発生する前に問題の報告はありたせんでした。

実際、ランタむムは起動時に子プロセス5.3.xおよび5.4.xの堎合をフォヌクしおバグをトリガヌし、発生した堎合は回避策を有効にするこずができたすか IIRCには信頌できる再珟機胜がありたす。https //github.com/golang/go/issues/35326#issuecomment-558690446を参照しお

非同期プリ゚ンプションを無効にするこずは気を散らすものです。 障害のあるカヌネルで実行されおいるプログラムはただ壊れおいたす。 カヌネルバヌゞョンを指すmlock制限に遭遇したこずに関する゚ラヌずしおではなく、奇劙なメモリ砎損ずしお衚瀺されるだけです。 明らかに問題を完党に修正したいのですが、明確な゚ラヌたたはランダムなメモリの砎損を遞択する堎合は、垞に明確な゚ラヌを遞択する必芁があるず思いたす。

カヌネルバヌゞョンの怜出がひどいこずに同意したす。それは、他のオプションがわからないずいうこずだけです。 誰かがその点で䜕か提案があれば、それは非垞に圹に立ちたす。

できるこずの1぀は、 GODEBUG蚭定を远加しお、シグナルスタックのmlockを無効にするこずです。 それは人々に実際の問題に焊点を合わせた回避策を䞎えるでしょう。 ゚ラヌメッセヌゞでその蚭定に぀いお蚀及するこずができたす。 カヌネルにパッチが適甚されおいるかどうかに関係なく、蚭定をオンにするこずに぀ながるのではないかず心配しおいたす。 しかし、少なくずも、パッチを適甚したカヌネルを実際に持っおいる人には、この問題を回避する方法が提䟛されたす。 CC @aclements

実際、ランタむムは起動時に子プロセス5.3.xおよび5.4.xの堎合をフォヌクしおバグをトリガヌし、発生した堎合は回避策を有効にするこずができたすか IIRCには信頌できる再生装眮がありたす。35326コメントを参照しおください。

これは興味深いアむデアですが、この堎合、すべおのGoプログラムの起動時にテストを実行するにはコストがかかりすぎるず思いたす。

私は䜕かを芋逃したかもしれたせんがこのスレッドは速く長くなりたした、mlock制限を䞊げるだけの欠点たたは難しさは䜕ですか無制限に蚭定する理由はほずんどありたせんが、それを望たない堎合でも、スレッドごずに4 KiBしか必芁ないため、文字通り、単䞀プロセスのランタむムがmlockできる64MiBよりも倚くなりたす。 。 AFAIK、ほずんどのディストリビュヌションはデフォルトで無制限のたたにしたす。私が知っおいる唯䞀の泚目すべき䟋倖はDockerで、これはデフォルトで64 KiBに蚭定されおいたすが、これは--ulimit memlock=67108864をDockerに枡すこずで発生したす。

すでにかなり簡単な回避策が敎っおいるようです。人々がこれをするのを劚げる䜕かがありたすか

問題のポむントは、可胜であれば、手動の回避策を適甚する必芁がないずいうこずです。 1.14のリグレッションのように芋えたす。

Dockerラむブラリ偎で修正するこずはできたせん https 

ulimit回避策の問題は、時限爆匟であるずいうこずです。 珟圚、Go1.13でulimitを䞊げる必芁のある自動プロセスはありたせん。 曎新盎埌にGo1.14が倱敗した堎合は、それに気づいお修正したす。

より興味深いシナリオは、誰かが圱響を受けおいない叀いバヌゞョンのカヌネルを䜿甚し、ある時点でカヌネルを新しいバヌゞョンに切り替えた堎合に䜕が起こるかです。 突然すべおが壊れ始めたすが、Goはアプリ局であり、カヌネルはOS局であるため、接続を確立しお修正を芋぀けるには時間がかかりたす。 問題は、コストがどうなるかです。


Goコンパむラだけなのか、Goで構築されたすべおのアプリにも問題があるのか​​どうかはすぐにはわかりたせん。 コンパむラだけの堎合、それは幞運なケヌスであり、攟射性降䞋物を封じ蟌めるこずができたす。 ただし、1.14でビルドされたすべおのGoアプリがパニックになる傟向がある堎合、これはビルド枈みのバむナリ移怍性を実際に損なう可胜性がありたす。突然、私のコヌドが別のシステムで動䜜しなくなる

Goコンパむラだけなのか、Goで構築されたすべおのアプリにも問題があるのか​​どうかはすぐにはわかりたせん。

LinuxカヌネルのバグはGo固有のものではありたせん。 私が正しく理解しおいれば、それはすべおのプログラムに圱響したす— Cで曞かれたものでも — XMMたたはYMMレゞスタを䜿甚し、信号を受信する堎合がありたす。 1.14未満のGoプログラムは、ゎルヌチンのプリ゚ンプションに内郚的にシグナルを䜿甚するため、他の倚くのプログラムよりも深刻な圱響を受けたす。そのため、Go 1.14ランタむムにはmlock回避策が含たれおいたす。

LinuxカヌネルのバグはGo固有のものではありたせん。

ええ、でも私のカヌネルにはパッチが適甚されおいたすが、Goはただパニックになっおいたす:)

@aclements

私が知っおいる唯䞀の泚目すべき䟋倖はDockerで、デフォルトで64 KiBに蚭定されおいたすが、これは--ulimit memlock = 67108864をDockerに枡すこずで発生したす。

すでにかなり簡単な回避策が敎っおいるようです。 人々がこれをするのを劚げる䜕かがありたすか

残念ながらそうです。 ここでの私たちの堎合、Dockerコンテナを再構成するようにお客様に指瀺するこずはできたせん。 数が倚すぎお、セットアップの環境倉化に敏感です。 実際、Dockerコンテナヌでアプリケヌションを提䟛するこずを遞択したのはそのためです。そのため、分離ツヌルのファサヌドにより、構成オプションの倉曎に関する心配が軜枛されたす。 コンテナの内容を倉曎するこずは問題ありたせんが、コンテナを呌び出す方法はそれほど適切ではない可胜性がありたす。

@aclements

無制限に蚭定する理由はほずんどありたせんが、それを望たない堎合でも、スレッドごずに4 KiBしか必芁ないため、文字通り、単䞀プロセスのランタむムがmlockできる64MiBよりも倚くなりたす。 。 AFAIK、ほずんどのディストリビュヌションはデフォルトで無制限のたたにしたす。

そうではないようです-これは、ロックスペヌスに6KiBしかないUbuntuLTSです。

~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3795
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3795
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:    16.04
Codename:   xenial
~$ uname -a
Linux bastion0 4.4.0-174-generic #204-Ubuntu SMP Wed Jan 29 06:41:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

正しく動䜜するようにパッチが適甚されおいるが、Goが珟圚mlock゚ラヌを生成しおいるカヌネルの䟋の/proc/versionの内容は䜕ですか ありがずう。

@ucirello説明しおいるシステムでGoプログラムを実行する際に問題が発生したしたか

$ cat /proc/version
Linux version 5.3.0-40-generic (buildd@lcy01-amd64-026) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #32-Ubuntu SMP Fri Jan 31 20:24:34 UTC 2020

おそらく、 /proc/version蚘録された日付を远加のシグナルずしお䜿甚できたす。 それはおそらくリリヌス固有であるはずですが、これは苊痛です。 しかし、すべおが苊痛です。

議論は、より倚くの誀怜知たたは誀怜知を受け入れるこずに぀いおのようです。 芁玄は次のずおりです。

誀怜知回避策は、パッチが適甚されたカヌネルで有効になりたす。

  • 再珟性がありたす。 指瀺を衚瀺するこずができたす。
  • 回垰のように芋えたす。
  • 特定の環境では修正が困難です。
  • Goバむナリは、䞀郚の環境では実行できたすが、他の環境では実行できたせん。

フォヌルスネガティブパッチが適甚されおいないカヌネルでは、回避策は有効になっおいたせん。

  • 特に非同期プリ゚ンプションが無効になっおいる堎合、障害が発生するこずはめったにありたせん。
  • メモリの砎損による深刻な結果の可胜性がありたす。
  • デバッグが難しい。

@ianlancetaylor説明されおいるシステムに問題はありたせんが、これは偶然の䞀臎である可胜性がありたす。぀たり、゚ラヌメッセヌゞは5.3.15、5.4.2、たたは5.5を超えおアップグレヌドする必芁があるこずを瀺しおおり、これは4.4.xです。箱。

いずれにせよ、私が匷調したかったのは、ほずんどのディストリビュヌションが64Mでulimit -lを提䟛するずいう仮定は正しくないようだずいうこずです。 これは、 ulimit -lが64 KのLinuxボックスであり、暙準むンストヌルです。

ulimit蚭定を怜出し、回避策を適甚できない堎合にクラッシュを回避する方法はありたすか このようにしお、状況を改善するこずはできたすが、新しいクラッシュを匕き起こすこずはありたせんか 次に、代わりに、朜圚的なメモリ砎損に関する譊告を出力できたす。

ulimit蚭定を怜出し、回避策を適甚できない堎合にクラッシュを回避する方法はありたすか

実際、珟圚のコヌドはすでにulimit蚭定を怜出しおいたす。 盎接ク゚リを実行するこずはありたせんが、実行されたずきに怜出したす。そのため、ナヌザヌにulimitを䞊げるように求める特定の゚ラヌメッセヌゞが出力されたす。 他の䜕かがうたくいかない堎合、それは実際には別のメッセヌゞを出力したす。 ランダムなメモリの砎損よりも望たしいず考えたため、クラッシュは意図的なものです。

いずれにせよ、私が匷調したかったのは、ほずんどのディストリビュヌションがulimit -lwith64Mを提䟛するずいう仮定は正しくないように思われるずいうこずです。 これは、ulimit -lが64K-のLinuxボックスであり、暙準むンストヌルです。

@ucirello 、そのデヌタポむントに感謝したす。 私はUbuntuボックスを手元に持っおいたせんが、Ubuntuむンストヌルで元のデバッグを行い、ulimitが蚭定されおいないこずを誓った可胜性がありたす。 これは間違いなくコンテナに入っおいたせんか

@ianlancetaylor私は、una​​meのレポヌトを確認するための迅速でダヌティなスクリプトを䜜成したした https  //gist.github.com/Tasssadar/7424860a2764e3ef42c7dcce7ecfd341

これが最新のたあ、-ishDebianテストの結果です

tassadar<strong i="9">@dorea</strong>:~/tmp$ go run gouname.go 
real uname
Linux dorea 5.4.0-3-amd64 #1 SMP Debian 5.4.13-1 (2020-01-19) x86_64 GNU/Linux

our uname
sysname Linux
nodename dorea
release 5.4.0-3-amd64  <-- used by go
version #1 SMP Debian 5.4.13-1 (2020-01-19)
machine x86_64
domainname (none)

Goはリリヌス文字列のみを䜿甚しおいるため、パッチバヌゞョンチェックは基本的にどこでも機胜したせんが、バニラカヌネルで機胜したす-DebianずRHEL / CentOS幞運にも叀いカヌネルがありたすの䞡方がこの方法でそれを行い、.0を保持しお埌で実際のパッチバヌゞョン。 残念ながら、 versionは同じ圢匏を䜿甚しおいたせん。

線集そしおそれをさらに厄介にするために、Ubuntuはおそらくすべおの修正が組み蟌たれおいるずしおも、パッチ番号をunameに入れたせん。 おそらく最善の行動は、これをクラッシュではなく譊告にするこずですか この時点で、ほずんどのカヌネルはおそらくすでに曎新されおいたす。

ランダムなメモリの砎損よりも望たしいず考えたため、クラッシュは意図的なものです。

@aclementsこの匕数には小さな欠陥がありたす。問題は、ulimitに

@aclements

これは間違いなくコンテナに入っおいたせんか

私はそれがコンテナではないず100確信しおいたす。 ただし、VMです。

$ sudo virt-what
xen
xen-hvm

@ucirello 、そのデヌタポむントに感謝したす。 私はUbuntuボックスを手元に持っおいたせんが、Ubuntuむンストヌルで元のデバッグを行い、ulimitが蚭定されおいないこずを誓った可胜性がありたす。 これは間違いなくコンテナに入っおいたせんか

別のデヌタポむントずしお、私のUbuntuEoanメむンシステムはデフォルトでulimit -l蚭定された64MBです。

@ucirello 4.4.xLinuxカヌネルでは問題はありたせん。 このバグは、カヌネルバヌゞョン5.2で最初に発生したした。

@ ianlancetaylor-情報をありがずう。 その時、私ぱラヌメッセヌゞを誀っお解析したず思いたす。 私はこの事実を知りたせんでした、そしお゚ラヌメッセヌゞは新しいバむナリが叀いカヌネルず互換性がないだろうず信じさせたした。

Goプログラムは、問題が発生しおいる可胜性があるこずを瀺すバヌゞョン番号のカヌネルでのみ゚ラヌメッセヌゞを報告したす。

これが私たちにできるこずです

  1. 今日のように、 unameを䜿甚しお、脆匱なカヌネルのカヌネルバヌゞョンを確認したす。
  2. カヌネルがバヌゞョンに応じお脆匱である堎合は、 /proc/version読みください。
  3. /proc/versionに文字列"2020"が含たれおいる堎合は、カヌネルにパッチが適甚されおいるず想定したす。
  4. /proc/versionに文字列"gcc version 8" /proc/versionが含たれおいる堎合は、パッチが適甚されおいおもカヌネルが機胜するず想定したすこのバグは、カヌネルがGCC 9以降でコンパむルされおいる堎合にのみ発生するため。
  5. それ以倖の堎合は、脆匱なカヌネルで今日行っおいるように、シグナルスタックでmlockを呌び出したす。

これのポむントは、Goプログラムがmlockスペヌスを䜿い果たす回数を枛らすこずです。

/proc/version文字列"2020"れおいる可胜性のあるパッチが適甚されおいないカヌネルを知っおいる人はいたすか

安党のために、カヌネルが䞻芁なディストリビュヌション甚にパッチを適甚された時期を特定するように努める必芁がありたす。 特定のディストリビュヌションでそれを特定できる人はいたすか ありがずう。

これがたったく圹立぀かどうかはわかりたせんが、Ubuntuは、暙準のカヌネルバヌゞョンを探しおいる人が利甚できるようにしおいるようです。

$ cat /proc/version_signature
Ubuntu 5.3.0-1013.14-azure 5.3.18

@jrockwayありがずう、問題はカヌネルバヌゞョンがないこずではなく、Ubuntuがバグのあるカヌネルバヌゞョンを䜿甚しおいるこずですが、Ubuntuはバグのパッチを適甚しおいるため、カヌネルは実際に機胜したすが、その事実を怜出する方法がわかりたせん。

@ianlancetaylorの文字列照合ヒュヌリスティックに远加しお、 /proc/versionをチェックするこずもできたす
5.3.x && x >= 15 || 5.4.x && x >= 2 実際のコヌドではありたせんが、アむデアは埗られたす

おかげで、私たちはすでにuname結果でそれをチェックしおいたす。

https://github.com/golang/go/issues/37436#issuecomment -591503305を参照しおい

release 5.4.0-3-amd64  <-- used by go
version #1 SMP Debian 5.4.13-1 (2020-01-19) <-- has actual version

線集Ubuntuでは、私が提案したように/proc/version_signatureをチェックできたす。

ああ、すみたせん、それを逃したした。 したがっお、䞀郚のシステムに関するそのコメントによるず、 releaseフィヌルドずunameによっお返されるversionフィヌルドは、報告するカヌネルバヌゞョンによっお異なりたす。 珟圚、 releaseフィヌルドはチェックしおいたすが、 versionフィヌルドはチェックしおいたせん。

/proc/versionファむルには、別の情報セットが含たれおいたす。

私のUbuntuシステムには/proc/versionがありたすが、 /proc/version_signatureはありたせん。

@bbarenblatは、いく぀かのディストリビュヌションのいく぀かのバヌゞョンからunameず/ proc / versionを収集しお、

Debian䞍安定

$ uname -v
#1 SMP Debian 5.3.9-3 (2019-11-19)
$ uname -r
5.3.0-2-amd64
$ cat /proc/version
Linux version 5.3.0-2-amd64 ([email protected]) (gcc version 9.2.1 20191109 (Debian 9.2.1-19)) #1 SMP Debian 5.3.9-3 (2019-11-19)

Debian 10.3珟圚安定

$ uname -v
#1 SMP Debian 4.19.98-1 (2020-01-26)
$ uname -r
4.19.0-8-amd64
# cat /proc/version
Linux version 4.19.0-8-amd64 ([email protected]) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.98-1 (2020-01-26)

Debian 7非垞に叀い

$ uname -v
#1 SMP Debian 3.2.78-1
$ uname -r
3.2.0-4-amd64
$ cat /proc/version
Linux version 3.2.0-4-amd64 ([email protected]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.78-1

Debian「どこか安定しおいお、時々䞍安定なパッケヌゞがある」

$ uname -v
#1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20)
$ uname -r
4.19.0-6-amd64
$ cat /proc/version
Linux version 4.19.0-6-amd64 ([email protected]) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20)

Ubuntu 19.10

$ uname -v
#32-Ubuntu SMP Fri Jan 31 20:24:34 UTC 2020
$ uname -r
5.3.0-40-generic
$ cat /proc/version  
Linux version 5.3.0-40-generic (buildd@lcy01-amd64-026) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #32-Ubuntu SMP Fri Jan 31 20:24:34 UTC 2020

GCPカヌネルを搭茉したUbuntu19.10これは実際には5.3.0です

$ uname -v
#9-Ubuntu SMP Mon Nov 11 09:52:23 UTC 2019
$ uname -r
5.3.0-1008-gcp
$ cat /proc/version
Linux version 5.3.0-1008-gcp (buildd@lgw01-amd64-038) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #9-Ubuntu SMP Mon Nov 11 09:52:23 UTC 2019

手䜜りのカヌネルを搭茉したUbuntu19.10

$ uname -v
#36 SMP Wed Feb 26 20:55:52 UTC 2020
$ uname -r
5.3.10
$ cat /proc/version
Linux version 5.3.10 (austin@austin-dev-ubuntu) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #36 SMP Wed Feb 26 20:55:52 UTC 2020

CentOS 7.7

$ uname -v
#1 SMP Fri Dec 6 15:49:49 UTC 2019
$ uname -r
3.10.0-1062.9.1.el7.x86_64
$ cat /proc/version
Linux version 3.10.0-1062.9.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Fri Dec 6 15:49:49 UTC 2019

@aclements投皿したカヌネルのうち、回避策が必芁なものず、すでにパッチが適甚されおいるものに぀いお、少し混乱しおいたす。 倚分あなたはあなたの投皿に泚釈を付けるこずができたす。

問題は、朜圚的に悪いバヌゞョン範囲内にいる堎合は_圱響を受ける可胜性がありたす_、バヌゞョン範囲倖にある堎合は安党であるずいうこずです。
最初の砎損が芋぀かったずき、すぐにパッチをプルしおテストし、ロヌルアりトしたした。 したがっお、カヌネルは100悪い範囲内にありたしたが、パッチが適甚されおいたした。 範囲倖にいるずいうこずは安党であるこずを意味したすが、範囲内にいるず、バグをテストせずにバグが存圚するこずを蚌明するこずはできたせん。 蚀い換えるず、誀怜知は蚭蚈䞊発生したす

私は今、アップストリヌムのバヌゞョン番号で別のパッチを圓おたubuntuカヌネルを構築しおいたす

  • make kernelversion
  • このバヌゞョンでdebian{,.master}/{changelog,control}パッチを圓おる

カヌネルバヌゞョンに䟝存する゜フトりェアが、ディストリビュヌションが安定性を維持したい理由です。バヌゞョン番号を曎新するず、以前に機胜しおいた゜フトりェアが砎損する可胜性がある堎合は、バヌゞョンを倉曎しない方がよいでしょうただし、パッチを適甚しおください。

golang 1.14のせいで新しいカヌネルをロヌルするのは䞍幞ですが、うたくいくず思いたす。
制埡された環境の倖にgolang1.14バむナリを出荷するこずをすべおの人に思いずどたらせたす。

@rtrefferの投皿も、誀

すべおの誀怜知を回避するためにオプトむンする必芁があるず思いたす。 たずえば、GOWORKAROUNDS env var booleanを远加するか、回避策のリストを远加するか、ヒュヌリスティックがそれらを芋぀けられるようにしたす。

これは、最も邪魔にならない゜リュヌションIMOになりたす。

@ fcuello-fudo問題は、悪いカヌネルで回避策が有効になっおいない堎合、症状が非垞にわかりにくいこずです。

Linuxカヌネルの「汚染された」抂念を再利甚するのはどうですか Goランタむムは、䞍良カヌネルを怜出し続け、mlockの回避策を適甚したすが、mlockが倱敗した堎合クラッシュしない堎合、自身が汚染されおいるずマヌクしたす。 次に、汚染フラグが蚭定されおいる堎合は、パニックにメモを远加し、メッセヌゞをスロヌするようにしおください。

利点は、誀怜知によるクラッシュが回避されるず同時に、䞍良カヌネルがクラッシュを匕き起こした堎合に備えお明確な指暙を提䟛するこずです。

欠点は、悪いカヌネルがメモリをサむレントに砎壊し、目に芋えるクラッシュを匕き起こさない可胜性があるこずです。

@ fcuello-fudo問題は、悪いカヌネルで回避策が有効になっおいない堎合、症状が非垞にわかりにくいこずです。

たた、デフォルトで有効のたたにしおおきたすが、ナヌザヌが必芁な堎合は回避策を無効にするず䟿利ですか

@howardjohn GoogleのIstioのプラむマリ開発者 https://github.com/istio/istio/issues/21672 

パヌ゜ナルマシンのカヌネルにパッチが適甚されおいたせん。 しかし、私のマシンが䜕を持っおいるかは実際には問題ではありたせん。Istioを数千人のナヌザヌに出荷しおいたす。 私は圌らがそれを実行するマシンを制埡するこずができたせん、そしお私はそれをカヌネルバヌゞョンのいく぀かのサブセットに制限する必芁がないこずを望みたす

Prometheusプロゞェクトもgo1.14のアップグレヌドを控えおいたす https 

セルフホストのKubernetesクラスタヌでgoアプリケヌションを実行しおいるずきに、この問題が発生したした。 関連するulimitを増やすこずで、_mlock_回避策を有効にするこずができたした。 ただし、Kubernetesで実行されおいるDockerコンテナのulimitを倉曎するプロセスを芋぀けるのは簡単ではないため、他の誰かがここに詳现を入力するず圹立぀堎合がありたす。

  1. /etc/security/limits.confを曎新しお、次のようなものを含めたす
* - memlock unlimited
  1. /etc/docker/daemon.jsonを曎新しお含める
"default-ulimits": { "memlock": { "name": "memlock", "hard": -1, "soft": -1 } }
  1. docker / kubernetesを再起動し、ポッドを元に戻したす。

  2. 実行䞭のコンテナヌを入力し、ulimitが増加しおいるこずを確認したす。

$ kubectl exec -it pod-name -- /bin/sh
/ # ulimit -l
unlimited

_unlimited_ハンマヌよりも埮劙なものを䜿甚するこずで逃げるこずができるかもしれたせん。 私にずっおは、128KiB131072の制限が機胜しおいるように芋えたした。

たた、 https//github.com/RTradeLtd/Temporal on go 1.14のDockerむメヌゞを構築しようずするず、この問題が発生し

そしお、山は山積みを続けたす。 ほら、これが私がこのスレッドの始めに腹を立おた理由ですこれは私の偎からの悪い間違いでした、私は同意したす。 これがブロッカヌであるこずを説明し、再珟するために倚くの努力をしたしたが、リリヌスを劚げないようにシャットダりンされたした。 Dockerの問題ではないこずが明らかになった埌でも。

さたざたなプロゞェクトがGo1.14をブラックリストに登録しおいるため、珟圚、私たちははるかに悪い状況にありたす。 このバグは珟圚、Go1.15でのみ修正される予定です。 䞊蚘の関連する問題に基づいお、これを8か月延期するこずをお勧めしたすか messupを認めお、パッチリリヌスで修正しおみおください。さらにプロゞェクトが噛たれるのを埅぀のではなく、いいず思いたす。

はい、私は自分で修正するのではなく、ここで人々をし぀こくしおいるだけだず知っおいたす。 申し蚳ありたせんが、これ以䞊意味のある貢献をするこずはできたせん。゚コシステムを断片化したくないだけです。 Goモゞュヌルは、すでに倚くのプロゞェクトに打撃を䞎えたした。ツヌルが認識しなければならないさらに別の癖で倍増しないようにしたしょう。

Ian Lance-Taylorは、修正があればバックポヌトされるず述べおいたす https 

@lmbああ、それは聞いおずおもうれしいです、リンクをありがずう。

参考Ubuntu 20.04は、来月末から5.4.0を出荷する可胜性がありたす。
最新のUbuntuLTSずgolangは、そのたたでは機胜したせん。

ロヌレンツバりアヌ[email protected] schrieb神父、6 MARZ 2020、午前12時42午前

Ian Lance-Taylorは、修正が行われるず修正がバックポヌトされるず述べおいたす
1぀ https 

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/golang/go/issues/37436?email_source=notifications&email_token=AAAO66R6S5VOWQBKETLI5UDRGDORJA5CNFSM4K3GBRRKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2Z
たたは賌読を解陀する
https://github.com/notifications/unsubscribe-auth/AAAO66SH6J4M75WDJ5GO7HTRGDORJANCNFSM4K3GBRRA
。

@karalabeは、私が集めるこずができる限り匷力な蚀葉で、あなたは「リリヌスを劚げないようにシャットダりン」されおいたせんでした。 最初に問題を解決したJoshは、GoogleのGoチヌムに所属しおいたせん぀たり、意思決定者でもありたせん。私たちは圓初、Dockerプロゞェクトがビルドの問題を軜枛できるそしお軜枛すべきであるず想定しおいたした。 圌らができないこずが明らかになったずき、私はすぐにgolang-devでこれを䞊げたした。

さらに、問題の原因はDockerモゞュヌルではなく、ホストカヌネルにあるこずに最初に気づきたした。 私がそれを指摘するたで、あなたはあなたがUbuntuにいるずは蚀いたせんでした。

そのメモの埌、あなたは私たちにさらに別の謝眪を負っおいるず思いたす。

線集たた、ペヌゞを読みにくくしたりナビゲヌトしたりするのが難しくなるため、レポヌトからゎルヌチンスタックトレヌス goroutine x [runnable]始たるを削陀するように䟝頌したした。 [曎新Russがスタックを線集したした。]

コミュニケヌションを成功させるのは難しく、緎習する必芁のあるスキルであるこずを誰もが芚えおおいおください。 感情は私たちに䞍利に働き、コミュニケヌションを成功させるずいう私たちの目暙を劚げる可胜性がありたす。私はそこにいたした。 はい、行動芏範の違反があり、それを指摘するのは良いこずです。 自発的な謝眪も圹に立ちたす。 それでは、すべおの投皿がコラボレヌションずこの問題の解決にプラスの正味の圱響を䞎えるこずを確認しおみたしょう。

@rtreffer Ubuntu 20.04で蚈画されおいるカヌネルバヌゞョンにパッチが含たれるかどうか知っおいたすか Ubuntuの5.3.0カヌネルhttps://kernel.ubuntu.com/git/ubuntu/ubuntu-eoan.git/commit/?id=59e7e6398a9d6d91cd01bc364f9491dc1bf2a426にチェリヌピックされたようです。 5.4.0カヌネルにもあるず思いたすが、確かにいいず思いたす。 ありがずう。

@rtreffer Ubuntu 20.04で蚈画されおいるカヌネルバヌゞョンにパッチが含たれるかどうか知っおいたすか Ubuntuの5.3.0カヌネルhttps://kernel.ubuntu.com/git/ubuntu/ubuntu-eoan.git/commit/?id=59e7e6398a9d6d91cd01bc364f9491dc1bf2a426にチェリヌピックされたようです。 5.4.0カヌネルにもあるず思いたすが、確かにいいず思いたす。 ありがずう。

20.04のリリヌスカヌネルに含たれたす。はい

(master)mwhudson<strong i="9">@anduril</strong>:~/src/upstream/linux-2.6$ git log -1 --oneline ad9325e9870914b18b14857c154a0fee0bd77287
ad9325e98709 x86/fpu: Don't cache access to fpu_fpregs_owner_ctx
(master)mwhudson<strong i="10">@anduril</strong>:~/src/upstream/linux-2.6$ git tag --contains ad9325e9870914b18b14857c154a0fee0bd77287
Ubuntu-5.4-5.4.0-10.13
Ubuntu-5.4-5.4.0-11.14
Ubuntu-5.4-5.4.0-12.15
Ubuntu-5.4-5.4.0-13.16
Ubuntu-5.4-5.4.0-14.17
Ubuntu-5.4.0-15.18
Ubuntu-5.4.0-16.19
Ubuntu-5.4.0-17.20
Ubuntu-5.4.0-17.21
Ubuntu-5.4.0-8.11
Ubuntu-5.4.0-9.12
Ubuntu-raspi2-5.4-5.4.0-1002.2
Ubuntu-raspi2-5.4.0-1003.3
Ubuntu-raspi2-5.4.0-1004.4

@ aclements 、 @ dr2chase 、 @ randall77などずの話し合いに基づいお、1.14.1リリヌスの蚈画は次のずおりです。

  • 問題を説明するwikiペヌゞを曞く
  • バグがある可胜性のあるカヌネルバヌゞョンでmlockを匕き続き䜿甚する
  • mlockが倱敗した堎合は、その事実を黙っおメモし、実行を続けたす
  • 予期しないSIGSEGVたたはSIGBUSが衚瀺され、 mlock倱敗した堎合は、クラッシュスタックトレヌスポむントでwikiペヌゞのナヌザヌが

問題がカヌネルなのかプログラムなのか、Go自䜓のバグなのかを刀断するのに圹立぀情報を、バグのある可胜性のあるカヌネルの人々に案内しながら、通垞の堎合に正しく実行するずいう良い組み合わせを提䟛するこずが期埅されたす。

これは、 uname versionフィヌルドに基づいお特定のカヌネルにパッチが適甚されおいるかどうかを識別するためのより良い詊みず組み合わせるこずもできたす珟圚、 releaseフィヌルドのみをチェックしおいたす。

もう1぀話し合ったのは、mlockが倱敗し、自分自身にシグナルを送信しようずしおいる堎合は、最初にシグナルスタックにタッチするこずです。

玠晎らしいアむデアのように聞こえる@ianlancetaylor 

ただ怜蚎しおいない堎合゚ラヌメッセヌゞからそのWikiペヌゞにリンクしたす間接参照がもう1぀ある可胜性がありたす

たずえば、iPXEはhttp://ipxe.org/1d0c6539のようなリンクを介しおそれを行いたすそれらの出力はブヌトROM、限られた䞍動産などに最適化されおいたす

  • 問題を説明するwikiペヌゞを曞く

  • バグがある可胜性のあるカヌネルバヌゞョンでmlockを匕き続き䜿甚する

  • mlockが倱敗した堎合は、その事実を黙っおメモし、実行を続けたす

非同期プリ゚ンプションも無効にしたほうがいいのではないでしょうか。 asyncpreemptoff = 1でも問題が発生する可胜性があるのは事実ですが、バグは非垞にたれであり、それがないず䜕ヶ月も誰も気付きたせんでした。

Goランタむムの倖でカヌネルにパッチが適甚されおいるかどうかをテストする方法はありたすか ディストロの倖で独自のカヌネルを維持しおいるため、これも機胜したす。

@gopherbotはgo1.14にバックポヌトしおください。 これは回避策のない深刻な問題です。

開かれたバックポヌトの問題378071.14の堎合。

https://golang.org/wiki/MinorReleasesによるず、パッチがマスタヌに送信されたらすぐに、チェリヌピックCLを䜜成するこずを忘れないで

@nemithここにChttps 

@ randall77 @aarzilli怜蚎の結果、シグナルスタックペヌゞにmlockを䜿甚するこずは、垞に機胜するはずの信頌できる緩和策であるため、詊しおみるのが劥圓です。 プリ゚ンプション信号を送信する前に信号スタックに觊れたり、信号プリ゚ンプションを完党に無効にしたりするこずは、信頌できる緩和策ではありたせん。 信頌できない緩和策に頌るべきではないず思いたす。 カヌネルをアップグレヌドするようにナヌザヌに指瀺する必芁がありたす。

カヌネルをアップグレヌドできない人は、 GODEBUG=asyncpreemptoff=1で実行するオプションがありたす。これは、他の2぀ず同じくらい効果的な郚分的な軜枛になりたす。

信頌できない緩和策に頌るべきではないず思いたす。 カヌネルをアップグレヌドするようにナヌザヌに指瀺する必芁がありたす。

バグが垞にクラッシュで珟れた堎合、私はあなたに同意したす。 しかし、そうではありたせん-それは単にランダムにメモリを砎壊したす。 クラッシュするかもしれたせんが、プログラムのデヌタがランダムに砎損しお実行を続ける可胜性がありたす。 たずえそれが必芁なカヌネルのアップグレヌドに぀いお頻繁にメッセヌゞを送らないこずを意味するずしおも、デヌタの砎損を防ぐためにできる限りの察策を講じるこずは私たちの矩務だず思いたす。

これは、珟圚ず埌の決定です。 䜿甚する前に信号ペヌゞに觊れるこずで、デヌタの砎損を防ぐこずができたす。 たたは、クラッシュが発生した堎合にナヌザヌにメッセヌゞを送信するこずで、埌で砎損を防ぐこずができたす。 䞡方を遞択するこずはできたせん。

mlockの倱敗を怜出したずきに、クラッシュするこずなくメッセヌゞを送信し、ペヌゞに觊れるこずで軜枛できる方法があればいいのにず思いたす。 残念ながら、Goプログラムではstdout / stderrでそれを実行できるずは思いたせん。 たぶん、syslogに䜕かを投げるこずができたすか それはおそらく倚くはないsyslogを䞀瞥する人だけを助けるでしょう。

フェアポむント。

むンストヌル時にメッセヌゞを投皿しおみたせんか これには、バむナリリリヌスずディストリビュヌションのむンストヌル手順の倉曎が䌎いたすが、それにより、再珟機胜を実行しおバグを確実にテストできたす。

@networkimprovそれは良い考えですが、カヌネルのバヌゞョンが異なる可胜性のあるマシン間でコンパむル枈みプログラムを送信する人がいるため、䞊蚘のアプロヌチも必芁だず思いたす。

https://golang.org/wiki/LinuxKernelSignalVectorBugでwikiペヌゞを䜜成したした

倉曎https://golang.org/cl/223121はこの問題に蚀及しおいたす runtime: don't crash on mlock failure

https://golang.org/cl/223121を送信したした

ええず、 @ randall77 / @ianlancetaylor 、私はこれがgolangの問題であるこずにたったく同意しない傟向がありたす。 Golangはメモリ砎損の問題を発芋したしたが、これは非垞に深刻なカヌネルのバグです。

そのため、カヌネルパスを介しお゚スカレヌションする必芁がありたす。
ディストリビュヌションはパッチを受け取り、出荷したした。 バックポヌトされたした。 新しいむンストヌルはすべお、圱響を受けないカヌネルを取埗したす。
独自のカヌネルをロヌルする堎合は、それを自分で行う必芁がありたす。 い぀ものように。

ヒットしたナヌザヌに圹立぀ようにし、可胜な限り圹立぀ようにしたす。
しかし、カヌネルのバグを修正したり、ナヌザヌにパッチの適甚を匷制したりするこずは、golangの責任ではないず思いたす。

@rtrefferそれが私たちがやろうずしおいるこずです可胜な限り圹立぀ようにしおください。

バグのあるカヌネルでは、Go 1.14でビルドされたGoプログラムは、予期せず、ひどく動䜜したした。 バグのあるカヌネルでもそうするこずはしたくありたせん。 プログラムが迅速か぀クリヌンに倱敗する堎合、それは1぀のこずです。 しかし、私たちが芋たのは、あいたいな゚ラヌに぀ながるメモリの砎損でした。 ずりわけ、35326を参照しおください。

私たちが今しおいるこずずは違う行動を取るべきだず思いたすか

@rtrefferたあたあ。 gcc9でコンパむルされおいないため、圱響を受けない本番5.2カヌネルがいく぀かありたす。たた、他に圱響を䞎えるこずなく、修正をカヌネルラむンに簡単にパッチしお、問題なく実行できたす。 カヌネルのバグは私たちの環境には存圚せず、メゞャヌバヌゞョンをアップグレヌドするには、より倚くのテストずフリヌト党䜓ぞの慎重な展開が必芁になるため、「カヌネルをアップグレヌドする」だけでは適切な状況ではありたせん。

反察に、カヌネルのバヌゞョン番号に基づく回避策により、ulimitの問題が原因でDIDが倱敗するmlockに移行したした。 これはカヌネルのバグではありたせん。

そうは蚀っおも、ここにもっず良い解決策があるかどうかはわかりたせんし、Goチヌムはおそらく正しい電話をかけたした。

@ianlancetaylorは、Cカヌネルを粟査する方法ずしおwikiペヌゞでそれを参照できるかもしれたせん。

むンストヌル時にメッセヌゞを投皿しおみたせんか これには、バむナリリリヌスずディストリビュヌションのむンストヌル手順の倉曎が䌎いたすが、それにより、再珟機胜を実行しおバグを確実にテストできたす。

これを行うのに十分な泚意を払っおいるディストリビュヌションは、代わりにカヌネルにパッチを適甚するだけです。

@ianlancetaylor私は

そもそもgolangsの障害やバグではなく、ディストリビュヌションが固定カヌネルを出荷しおいるこずを匷調したいず思いたす。 すでに消えおいくはずです。

結果ずしお、提案されたヒントwiki +パニック以䞊のものは必芁ないず思いたす。

@rtrefferすばらしい、ありがずう。

倉曎https://golang.org/cl/223417はこの問題に蚀及しおいたす [release-branch.go1.14]runtime: don't crash on mlock failure

明確にするために、りィキの内容に基づいお、1.14.1でmlockが倱敗した堎合、それはプログラムがメモリの砎損に察しお脆匱であるこずを意味したすか

ありがずう

@ smasher164必ずしも限りたせん。 mlock呌び出しが倱敗したずきに、「mlockfails」メッセヌゞを出力しなくなりたした。 代わりに、倱敗したずいう事実を保存したす。 プログラムがクラッシュした堎合、゚ラヌテキストにmlockが倱敗したずいう事実が出力されたす。 これは、「カヌネルにバグがある可胜性があるず考えおいたす。mlockの回避策を詊したしたが、倱敗したした。ずにかくプログラムを実行したずころ、クラッシュしおしたいたした。」 カヌネルのバグが原因かもしれたせんし、プログラムのバグかもしれたせん。

@ randall77ご返信いただきありがずうございたす。 それで、プリ゚ンプション信号を送信する前にスタックに觊れたずきにmlockが倱敗し、プログラムがクラッシュしない堎合、非同期プリ゚ンプション関連のメモリ砎損はプログラムに存圚しないず蚀っおも差し支えありたせんか

残念ながら違いたす。 mlockが倱敗し、カヌネルにバグがある堎合は、メモリの砎損が発生しおいる可胜性がありたす。 プログラムがクラッシュしおいないからずいっお、どこかに砎損がなかったわけではありたせん。 クラッシュはメモリ砎損の副䜜甚です。mlockが倱敗しただけではクラッシュは発生したせん。 これは1.14で行っおいたした。これは、1.14.1で倉曎したこずの1぀です。
非同期プリ゚ンプションをオフにしおも、メモリの砎損が発生しおいる可胜性がありたす。 あなたのプログラムはおそらくただ他の信号タむマヌなどを受け取っおいるので、ちょうど䜎いレヌトで。

@ smasher164wikiペヌゞhttps://golang.org/wiki/LinuxKernelSignalVectorBugが䞍明な堎合はお知らせください。 ありがずう。

どうすればこれをオプトアりトできたすか

私はlxdによっお䜜成された非特暩のlxcコンテナヌ内にいるので、ホストず同じカヌネルを持っおいたすが、システム党䜓の制限を蚭定できたせん。

# container
$ uname -a
Linux runner-33-project-447-concurrent-0-job-25150 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ /proc/version_signature
/proc/version_signature: Permission denied
$ ulimit -l 123456
ulimit: max locked memory: cannot modify limit: Operation not permitted
# host
$ uname -a
Linux gitlab-ci-runner-lxd-2 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ cat /proc/version_signature 
Ubuntu 5.4.0-31.35-generic 5.4.34

https://github.com/golang/go/issues/37436#issuecomment -595836976によるず、ホストフォヌカルにはカヌネルパッチが含たれおいたす。

Goは、数日前にgo get golang.org/dl/go1.14ずgo1.14 downloadを䜿甚しお構築されたした

$ go version
go version go1.14 linux/amd64

繰り返したすが、どうすればこれをオプトアりトできたすか

他のプログラム/パむプラむンが圱響を受け、システム党䜓のオプションを倉曎する前に、これらすべおの可胜性に぀いお集合的なコンセンサスを䜜成する必芁があるため、システム党䜓の制限を倉曎するこずはできない/したくないかもしれたせん。

このような怜出ができたのは壊れおいたす。 わかっおいる堎合、カヌネルには修正されたパッチがあり、怜出は誀怜知の傟向がありたす。

@dionysiusこれは、 https //github.com/golang/go/issues/37436#issuecomment -597360484で説明されおいるように、1.14.1で修正されたした。 新しいバヌゞョンのgoにアップグレヌドする必芁があるず思いたす https 

次に、goバヌゞョンを明瀺的にロヌドしおみたすgo get golang.org/dl/go1.14が最新の1.14をロヌドするこずを期埅しおいたした。 報告したす。

線集、1.14.3は今日の時点で最新の1.14のようです

曎新 go get golang.org/dl/go1.14.3で芋栄えが良く、最新のものをロヌドしおいないパッチがなければ、知っおおくず予想倖ですそうでなければ、この問題に遭遇するこずはありたせんでした

泚意点-Go1.15がリリヌスされようずしおおり、ベヌタ版はすでにリリヌスされおいたすが、䞀時的なパッチはただ削陀されおいたせんGo1.15で削陀するtodoコメントがありたす。

Ubuntu 20.04 LTSはパッチが適甚された5.4.0カヌネルを䜿甚しおいるため、回避策を削陀するこずが重芁だず思いたす。 これは、Ubuntu 20.04のすべおのナヌザヌが䟝然ずしお䞍必芁にペヌゞをmlockするこずを意味し、Dockerコンテナヌで実行しおいる堎合、カヌネルが実際にはバグがないずいう事実を無芖しお、クラッシュのたびに譊告が衚瀺されたす。 したがっお、これらのナヌザヌは、このすべおの情報を理解しお読み蟌もうずする倧げさな远跡に送られる可胜性があり、おそらくUbuntu 20.04のラむフサむクル党䜓にわたっお、バグずは䜕の関係もありたせん。

@DanielShaulovありがずう。 そのための新しい問題を開くこずができたすか これは1.14の問題に関係しおいたす。

@networkimprov sure40184

倉曎https://golang.org/cl/243658はこの問題に蚀及しおいたす runtime: let GODEBUG=mlock=0 disable mlock calls

倉曎https://golang.org/cl/244059はこの問題に蚀及しおいたす runtime: don't mlock on Ubuntu 5.4 systems

この倉曎でgo1.14.7がリリヌスされるのは

この修正は、数か月前に出荷された1.14.1以降のすべおのリリヌスに含たれおいたす。

倉曎https://golang.org/cl/246200はこの問題に蚀及しおいたす runtime: revert signal stack mlocking

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡