Commit 64fdfb7
[ruby/openssl] Fix memory leak if sk_push fails
If it fails, then the duplicated item is not freed.
Solve it by making sure the push cannot fail by reserving the necessary
stack size upfront.
Example Valgrind trace:
```
14,009 (384 direct, 13,625 indirect) bytes in 1 blocks are definitely lost in loss record 27,287 of 27,373
malloc (at /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
CRYPTO_zalloc (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
<unknown stack frame>
ASN1_item_new (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
*ossl_x509_alloc (ossl_x509cert.c:97)
<unknown stack frame>
rb_class_new_instance_pass_kw (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
<unknown stack frame>
<unknown stack frame>
<unknown stack frame>
rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
```
ruby/openssl@b53628b1271 parent 3a7f3cf commit 64fdfb7
1 file changed
+5
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
| |||
0 commit comments