<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi All,<div><br></div><div>Apart from my code posted in this mailchain, I tried testing using the OpenSSL commands. I ran <b>openssl dgst -sha256 Test_blob.</b> Test_blob and all files mentioned below are almost 44 MB (or more).</div><div><br></div><div>The first time buff/cache value increased by 44MB (size of the file)</div><div><div><div><b>                    total        used           free        shared  buff/cache   available</b></div><div><b>Mem:         252180       12984      181544         284       57652         231188</b></div><div><b>Swap:                  0           0           0</b></div></div><br class="gmail-Apple-interchange-newline"></div><div>I ran the same OpenSSL command again with the same file, and the result of free command remained the same</div><div><div><b>                    total        used           free        shared  buff/cache   available</b></div><div><b>Mem:         252180       12984      181544         284       57652        231188</b></div><div><b>Swap:                  0           0           0</b></div><br class="gmail-Apple-interchange-newline"></div><div>Next I ran the same command with a different file (let's say Test_blob2) and ran the free command after it, result:-</div><div><div>   <b>                      total        used        free        s</b><b>hared  buff/cache   available</b></div><div><b>Mem:            252180       12948      137916      284      101316         231200</b></div><div><b>Swap:                    0           0           0</b></div></div><div><br></div><div>The <b>buff/cache</b> value has increased by the size of the file concerned<b> (almost 44MB)</b></div><div><div>If I run the same command the 3rd time with another file not previously used (let's say Test_blob3), the following happens</div><br class="gmail-Apple-interchange-newline"></div><div><b>Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b</b></div><div><b>Rebooting in 15 seconds..</b></div><div><b><br></b></div><div>Is there a way to resolve this problem, How do I clear the buff/cache?<br></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 24 Feb 2019 at 03:15, Georg Höllrigl <<a href="mailto:georg.hoellrigl@gmx.at" target="_blank">georg.hoellrigl@gmx.at</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="DE-AT"><div class="gmail-m_4319235487916172607gmail-m_-4009879407572689415WordSection1"><p class="MsoNormal"><span>Hello,<u></u><u></u></span></p><p class="MsoNormal"><span><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">I guess you’re not seeing a memory leak, but just normal behaviour of linux file system cache.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB">Buff/cache is keeping files in memory that were least accessed as long as not needed by other stuff.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB">You don’t need to free the buffer/cache, because linux does that automatically, when memory is needed.</span><span lang="EN-GB"><u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">Kind Regards,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB">Georg<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><b><span lang="EN-GB">Von:</span></b><span lang="EN-GB"> openssl-users <<a href="mailto:openssl-users-bounces@openssl.org" target="_blank">openssl-users-bounces@openssl.org</a>> <b>Im Auftrag von </b>prithiraj das<br><b>Gesendet:</b> 23 February 2019 18:25<br><b>An:</b> Jordan Brown <<a href="mailto:openssl@jordan.maileater.net" target="_blank">openssl@jordan.maileater.net</a>><br><b>Cc:</b> <a href="mailto:openssl-users@openssl.org" target="_blank">openssl-users@openssl.org</a><br><b>Betreff:</b> Re: OpenSSL hash memory leak<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><div><div><div><p class="MsoNormal">Hi,<u></u><u></u></p><div><p class="MsoNormal">This is how I have initialized my variables:-<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">EVP_MD_CTX *mdctx;<u></u><u></u></p></div><div><p class="MsoNormal">const EVP_MD *md;<u></u><u></u></p></div><div><p class="MsoNormal">int i;<u></u><u></u></p></div><div><p class="MsoNormal">HASH hash_data;<u></u><u></u></p></div><div><p class="MsoNormal">unsigned char message_data[BUFFER_SIZE];<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">BUFFER_SIZE has been defined as 131072<u></u><u></u></p></div><div><p class="MsoNormal">and HASH is my hash structure defined to hold the message digest, message digest length and message digest type<u></u><u></u></p></div></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Sat, 23 Feb 2019 at 00:17, Jordan Brown <<a href="mailto:openssl@jordan.maileater.net" target="_blank">openssl@jordan.maileater.net</a>> wrote:<u></u><u></u></p></div><blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm"><div><div><p class="MsoNormal">The most obvious question is "how are you allocating your message_data buffer?".  You don't show that.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">On 2/22/2019 2:27 AM, prithiraj das wrote:<u></u><u></u></p></div><blockquote style="margin-top:5pt;margin-bottom:5pt"><div><div><div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">Hi All, <u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Using OpenSSL 1.0.2g, I have written a code to generate the hash of a file in an embeddded device having linux OS and low memory capacity and the files are generally of size 44 MB or more. The first time or even the second time on some occasions, the hash of any file is successfully generated. On the 3rd or 4th time (possibly due to lack of memory/memory leak), the system reboots before the hash can be generated.  After restart, the same thing happens when the previous steps are repeated.<u></u><u></u></p></div><div><p class="MsoNormal">The stats below shows the memory usage before and after computing the hash. <u></u><u></u></p></div></div></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><p class="MsoNormal"><b>root@at91sam9m10g45ek:~# free</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>                      total        used          free         shared    buff/cache   available</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>Mem:         252180       13272      223048         280          15860          230924</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>Swap:                0           0               0</b><u></u><u></u></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><b>After computing hash :-</b><u></u><u></u></p></div><div><div><p class="MsoNormal"><b>root@at91sam9m10g45ek:~# free</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>                      total        used          free       shared    buff/cache   available</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>Mem:         252180       13308      179308        280       59564           230868</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>Swap:             0                0              0</b><u></u><u></u></p></div><div><p class="MsoNormal"><b><u></u> <u></u></b></p></div></div><div><div><p class="MsoNormal">Buff/cache increases by almost 44MB (same as file size) everytime I generate the hash and free decreases. I believe the file is being loaded into buffer and not being freed. <u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I am using the below code to compute the message digest. This code is part of a function ComputeHash and the file pointer here is fph.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">  <b> EVP_add_digest(EVP_sha256());</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> md = EVP_get_digestbyname("sha256");</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> </b><u></u><u></u></p></div><div><p class="MsoNormal"><b> if(!md) {</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>        printf("Unknown message digest \n");</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>        exit(1);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> }</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> printf("Message digest algorithm successfully loaded\n");</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> mdctx = EVP_MD_CTX_create();</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> EVP_DigestInit_ex(mdctx, md, NULL);</b><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><b> // Reading data to array of unsigned chars </b><u></u><u></u></p></div><div><p class="MsoNormal"><b> long long int bytes_read = 0;</b><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><b> printf("FILE size of the file to be hashed is %ld",filesize); </b><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><b> //reading image file in chunks below and fph is the file pointer to the 44MB file</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> while ((bytes_read = fread (message_data, 1, BUFFER_SIZE, fph)) != 0)</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>  EVP_DigestUpdate(mdctx, message_data, bytes_read);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> EVP_DigestFinal_ex(mdctx, hash_data.md_value, &hash_data.md_len);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> printf("\n%d\n",EVP_MD_CTX_size(mdctx));</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> printf("\n%d\n",EVP_MD_CTX_type(mdctx));</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> hash_data.md_type=EVP_MD_CTX_type(mdctx);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> EVP_MD_CTX_destroy(mdctx);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> //fclose(fp);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> printf("Generated Digest is:\n ");</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> for(i = 0; i < hash_data.md_len; i++)</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>        printf("%02x", hash_data.md_value[i]);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> printf("\n");</b><u></u><u></u></p></div><div><p class="MsoNormal"><b> EVP_cleanup();</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>         return hash_data;</b><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><p class="MsoNormal">In the the code below, I have done fclose(fp)<u></u><u></u></p></div><div><p class="MsoNormal"><b>verify_hash=ComputeHash(fp,size1);</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>fclose(fp);</b><u></u><u></u></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I believe that instead of loading the entire file all at once I am reading the 44MB file in chunks and computing the hash using the piece of code below: (fph is the file pointer)<u></u><u></u></p></div><div><p class="MsoNormal"><b>while ((bytes_read = fread (message_data, 1, BUFFER_SIZE, fph)) != 0)</b><u></u><u></u></p></div><div><p class="MsoNormal"><b>  EVP_DigestUpdate(mdctx, message_data, bytes_read);</b><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Where I am going wrong? How can I free the buff/cache after computation of message digest?  Please suggest ways to tackle this.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Thanks and Regards,<u></u><u></u></p></div><div><p class="MsoNormal">Prithiraj<u></u><u></u></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></blockquote><p><u></u> <u></u></p><pre>-- <u></u><u></u></pre><pre>Jordan Brown, Oracle ZFS Storage Appliance, Oracle Solaris<u></u><u></u></pre></div></blockquote></div></div></div></div></blockquote></div>