私は最新の grsec-hardened 4.9.x Linux カーネルと paxd がインストールされた Arch Linux を使用しています。しかし、このため Java を実行しようとすると次のエラーが発生します。
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000035ea1000000, 2555904, 1) failed; error='Operation not permitted' (errno=1)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/[username]/hs_err_pid2813.log
さて、私は過去にこのエラーに遭遇し、Javaにこれを許可するように指示しましたが、その方法についてのリソースを思い出せません。このSOの答えpaxctl
しかし残念なことに、 Arch wiki に記載されている grsec 関連のユーティリティをすべてインストールしているにもかかわらず、私のシステムではコマンドが見つからないと表示されます。
では、どうすれば Java を許可できるのでしょうか?
答え1
paxctl
あなたにとってはうまくいくはずです、
root #paxctl -h
PaX control v0.7
Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <[email protected]>
usage: paxctl <options> <files>
options:
-p: disable PAGEEXEC -P: enable PAGEEXEC
-e: disable EMUTRAMP -E: enable EMUTRAMP
-m: disable MPROTECT -M: enable MPROTECT
-r: disable RANDMMAP -R: enable RANDMMAP
-x: disable RANDEXEC -X: enable RANDEXEC
-s: disable SEGMEXEC -S: enable SEGMEXEC
-v: view flags -z: restore default flags
-q: suppress error messages -Q: report flags in short format
-c: convert PT_GNU_STACK into PT_PAX_FLAGS (see manpage!)
-C: create PT_PAX_FLAGS (see manpage!)
通常、私はこのようにすべての制限を無効にします。
paxctl -pemrxs `which java`
ただし、 を必要とせずにフラグをより直接的に設定することもできますpaxctl
。たとえば、フラグを無効にしたい場合は、mr
次のようにします。
sudo setfattr -n user.pax.flags -v "mr" `which java`