2017-07-28 9 views
3

にValgrindの下のコア・ダンプを生成します。しかし、私がValgrindで実行すると、Illegal instruction (core dumped)と表示され、私は理解できません(私は何も見えません)いくつかのメモリリークがあります。OpenSSLはこれが私のコードであるため、RDRAND

原因は何ですか?私はOpenSSL 1_1_0eを実行しています。


ここにValgrind出力があります。

$ valgrind ./sharedLibraryTest 
==4500== Memcheck, a memory error detector 
==4500== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. 
==4500== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info 
==4500== Command: ./sharedLibraryTest 
==4500== 
vex amd64->IR: unhandled instruction bytes: 0x48 0xF 0xC7 0xF0 0x72 0x2 0xE2 0xF8 
vex amd64->IR: REX=1 REX.W=1 REX.R=0 REX.X=0 REX.B=0 
vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=0F 
vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0 
==4500== valgrind: Unrecognised instruction at address 0x5026fa5. 
==4500== at 0x5026FA5: OPENSSL_ia32_rdrand (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4FC2B12: rand_bytes (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4EF698E: BN_rand (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4EF5430: BN_generate_prime_ex (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4FCA616: RSA_generate_key_ex (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x400963: main (sharedLibraryTest.c:12) 
==4500== Your program just tried to execute an instruction that Valgrind 
==4500== did not recognise. There are two possible reasons for this. 
==4500== 1. Your program has a bug and erroneously jumped to a non-code 
==4500== location. If you are running Memcheck and you just saw a 
==4500== warning about a bad jump, it's probably your program's fault. 
==4500== 2. The instruction is legitimate but Valgrind doesn't handle it, 
==4500== i.e. it's Valgrind's fault. If you think this is the case or 
==4500== you are not sure, please let us know and we'll try to fix it. 
==4500== Either way, Valgrind will now raise a SIGILL signal which will 
==4500== probably kill your program. 
==4500== 
==4500== Process terminating with default action of signal 4 (SIGILL) 
==4500== Illegal opcode at address 0x5026FA5 
==4500== at 0x5026FA5: OPENSSL_ia32_rdrand (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4FC2B12: rand_bytes (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4EF698E: BN_rand (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4EF5430: BN_generate_prime_ex (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x4FCA616: RSA_generate_key_ex (in /home/roman/Dropbox/uni/RSA/my_work/library/lib/libcrypto.so.1.1) 
==4500== by 0x400963: main (sharedLibraryTest.c:12) 
==4500== 
==4500== HEAP SUMMARY: 
==4500==  in use at exit: 6,216 bytes in 32 blocks 
==4500== total heap usage: 146 allocs, 114 frees, 14,880 bytes allocated 
==4500== 
==4500== LEAK SUMMARY: 
==4500== definitely lost: 0 bytes in 0 blocks 
==4500== indirectly lost: 0 bytes in 0 blocks 
==4500==  possibly lost: 0 bytes in 0 blocks 
==4500== still reachable: 6,216 bytes in 32 blocks 
==4500==   suppressed: 0 bytes in 0 blocks 
==4500== Rerun with --leak-check=full to see details of leaked memory 
==4500== 
==4500== For counts of detected and suppressed errors, rerun with: -v 
==4500== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 
Illegal instruction (core dumped) 
+0

からSVNバージョンを取得OpenSSL 1.1.0の今後のリリースm? OpenSSLプロジェクトの標準的なものか「公式なもの」なのか。またはベンダーからパッチが適用されていますか? – jww

+0

私はここから正確に言えます:https://github.com/openssl/openssl/archive/OpenSSL_1_1_0e.tar.gz – SlowerPhoton

答えて

2

は、これはすでにpatchが存在するためvalgrindの既知のバグ、ように見えます。

問題は、valgrindがlibcryptoが使用しているCPU命令をサポートしていないことです。解決方法はlibcryptoにこの命令が利用可能であることを伝えないことです。

メモリリークは、異常終了の可能性が最も高いです。つまり、異なるオブジェクトのデストラクタは呼び出されません。

ソリューション

  1. は適用パッチ

  2. を最新の安定版

  3. を取得し、あなたのコピーをしたオンラインレポ

関連する問題