aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2019-03-19Merge branch 'maint'Ingela Anderton Andin
Conflicts: lib/ssl/src/ssl.erl lib/ssl/src/tls_connection.erl
2019-03-19Merge branch 'ingela/ssl/transport-transparance/ERL-861/OTP-15679' into maintIngela Anderton Andin
* ingela/ssl/transport-transparance/ERL-861/OTP-15679: ssl: Fix transport transparancy
2019-03-19Merge branch 'john/compiler/fix-eq-type-infererence-in-validator/ERL-886'John Högberg
* john/compiler/fix-eq-type-infererence-in-validator/ERL-886: beam_validator: Infer types on both sides of '=:='
2019-03-19code_SUITE: Always disable tracing after 'upgrade' testJohn Högberg
Tracing would be left hanging if the test timed out, causing later tests to fail.
2019-03-18Prepare releaseErlang/OTP
2019-03-18Merge branch 'ingela/ssl/recv-timeout-bug/ERL-884/ERL-883/OTP-14701' into ↵Erlang/OTP
maint-21 * ingela/ssl/recv-timeout-bug/ERL-884/ERL-883/OTP-14701: ssl: Cancel recv timer in all places
2019-03-18Merge branch 'ingela/ssl/transport-transparance/ERL-861/OTP-15679' into maint-21Erlang/OTP
* ingela/ssl/transport-transparance/ERL-861/OTP-15679: ssl: Fix transport transparancy
2019-03-18[kernel|test] IPV6 adjustmentsMicael Karlberg
2019-03-18[kernel|test] Adjustments to new compiler (C99)Micael Karlberg
2019-03-18Add smoke test for erl_callRickard Green
2019-03-18Add new api functions to ei_fake_progRickard Green
These functions were added in erl_interface-3.11
2019-03-18Fix timeout value when waiting for emulator startRickard Green
2019-03-18Merge pull request #2114 from se-apc/strip_fixJohn Högberg
Allow list of chunks to be given to strip*() OTP-15680
2019-03-18Merge branch 'ingela/ssl/public_key/verify_fun-doc-error/ERL-887'Ingela Anderton Andin
* ingela/ssl/public_key/verify_fun-doc-error/ERL-887: public_key: Correct documentation of verify_fun
2019-03-18public_key: Correct documentation of verify_funIngela Anderton Andin
2019-03-18lib/compiler/scripts/smoke: Force a local hexBjörn Gustavsson
The script would hang if no local hex had been installed previously.
2019-03-18Fix initialization of erl_callRickard Green
Previously erl_call relied on the implicit initialization made of the ei-lib if no explicit initialization had been done. This implicit initialization was utterly broken and was removed in erl_interface-3.11 (OTP 21.3) since it has been documented for a very long time that an explicit initialization is required.
2019-03-18code_SUITE: Fix on_load_trace_on_load testJohn Högberg
Modules like 'merl' and 'erl_prettypr' could be loaded during the actual test, causing them to be traced too.
2019-03-18Merge branch 'peterdmv/ssl/client-auth/OTP-15591'Péter Dimitrov
* peterdmv/ssl/client-auth/OTP-15591: ssl: Improve ssl logging ssl: Test handling of signature algorithms ssl: Handle unencrypted Alert (Illegal Parameter) ssl: Improve verification of received Certificate ssl: Fix Alert logging ssl: Fix get_handshake_context/2 ssl: Test HelloRetryRequest with client auth ssl: Verify signature algorithm in CV ssl: Verify CertificateVerify ssl: Test client authentication with certificate ssl: Validate client certificates (TLS 1.3) ssl: Test client authentication (empty cert) ssl: Implement state 'wait_cert' ssl: Add ssl logger support for CertificateRequest ssl: Fix ssl alerts Change-Id: Id4ba14d373f116038a7cb3ff9fc33faed23031c8
2019-03-18public_key: Add AES 256 encryption for old PEM encryption mechanismIngela Anderton Andin
2019-03-18Merge branch 'hans/crypto/fix_chacha20_bug/OTP-15678'Hans Nilsson
* hans/crypto/fix_chacha20_bug/OTP-15678: crypto: Disable chacha20 if OpenSSL 1.1.0-1.1.0c
2019-03-18beam_validator: Infer types on both sides of '=:='John Högberg
2019-03-16ssl: Cancel recv timer in all placesIngela Anderton Andin
Would cause connection to crash although all data was delivered to ssl:recv
2019-03-15crypto: Disable chacha20 if OpenSSL 1.1.0-1.1.0cHans Nilsson
due to a bug. The cipher first appeared in 1.1.0
2019-03-15crypto: Fix bug in error return for crypto:poly1305/2Hans Nilsson
Returned the atom notsup instead of the exception notsup.
2019-03-15Merge branch 'sverker/ets-select-fixation-owner-change-bug/OTP-15672'Sverker Eriksson
* sverker/ets-select-fixation-owner-change-bug/OTP-15672: erts: Fix ets:select table fixation leak at owner change erts: Refactor common things into traverse_context_t stdlib: Clarify docs for ets:info(_, safe_fixed)
2019-03-14ssl: Improve ssl loggingPéter Dimitrov
Remove function ssl:set_log_level/1. Its functionality is already implemented by logger:set_application_level/2. Set log level for ssl modules to debug at application start. Former implementation required an extra call to logger:set_application_level/2 (beside setting ssl option {log_level, debug}) to enable debug logging. Change-Id: Id21be7fd58915e11124cc136bb92d8a7526b8a74
2019-03-14ssl: Test handling of signature algorithmsPéter Dimitrov
Change-Id: I433924f9c590efa94423db5df52dd3f5d53d9d20
2019-03-14ssl: Handle unencrypted Alert (Illegal Parameter)Péter Dimitrov
Handle unencrypted 'Illegal Parameter' Alerts from openssl s_client when the server's connection states are already stepped into traffic encryption. Change-Id: I10951a9061e6f4b13d8ddb8ab99f8a812a483113
2019-03-14ssl: Improve verification of received CertificatePéter Dimitrov
Validate peer certificate against supported signature algorithms. Send 'Hanshake Failure' Alert if signature algorithm is not supported by the server. Change-Id: Iad428aad337f0f9764d23404c203f966664c4555
2019-03-14ssl: Fix Alert loggingPéter Dimitrov
Report the role of the peer when logging incoming Alerts. Change-Id: I7eec46bc36f9080f5087b6a38e7f14ac628fe286
2019-03-13Merge pull request #2177 from bjorng/bjorn/erts/tail-recursive-bifsBjörn Gustavsson
Optimize tail-recursive calls of BIFs OTP-15674
2019-03-12Merge branch 'maint'Henrik Nord
* maint: Updated OTP version Prepare release
2019-03-11Fix array tests hardcoded to node/leaf sizesRichard Carlsson
2019-03-11Skip useless test in grow loop in array moduleRichard Carlsson
2019-03-11Clarify comments in array moduleRichard Carlsson
2019-03-11Get rid of useless setelement in array moduleRichard Carlsson
2019-03-11erts: Fix ets:select table fixation leak at owner changeSverker Eriksson
Symtom: ETS table remains fixed after finished ets:select* call. Problem: The decision to unfix table after a yielding ets:select* is based on table ownership, but ownership might have changed while ets:select* was yielding. Solution: Remember and pass along whether table was fixed when the traversal started.
2019-03-11stdlib: Clarify docs for ets:info(_, safe_fixed)Sverker Eriksson
It's about the *last* time the table went from unfixed to fixed, not the first time it ever did.
2019-03-11Merge branch 'john/compiler/float-opt-guard-fix'Björn Gustavsson
* john/compiler/float-opt-guard-fix: beam_ssa_opt: Fix crash in ssa_opt_float
2019-03-11Prepare releaseErlang/OTP
2019-03-11ssl: Fix transport transparancyIngela Anderton Andin
2019-03-09Optimize tail-recursive calls of BIFsBjörn Gustavsson
BEAM currently does not call BIFs at the end of a function in a tail-recursive way. That is, when calling a BIF at the end of a function, the BIF is first called, and then the stack frame is deallocated, and then control is transferred to the caller. If there is no stack frame when a BIF is called in the tail position, the loader will emit a sequence of three instructions: first an instruction that allocates a stack frame and saves the continuation pointer (`allocate`), then an instruction that calls the BIF (`call_bif`), and lastly an instruction that deallocates the stack frame and returns to the caller (`deallocate_return`). The old compiler would essentially allocate a stack frame for each clause in a function, so it would not be that common that a BIF was called in the tail position when there was no stack frame, so the three-instruction sequence was deemed acceptable. The new compiler only allocates stack frames when truly needed, so the three-instruction BIF call sequence has become much more common. This commit introduces a new `call_bif_only` instruction so that only one instruction will be needed when calling a BIF in the tail position when there is no stack frame. This instruction is also used when there is a stack frame to make it possible to deallocate the stack frame **before** calling the BIF, which may make a subsequent garbage collection at the end of the BIF call cheaper (copying less garbage). The one downside of this change is that the function that called the BIF will not be included in the stack backtrace (similar to how a tail-recursive call to an Erlang function will not be included in the backtrace). That was the quick summary of the commit. Here comes a detailed look at how BIF calls are translated by the loader. The first example is a function that calls `setelement/3` in the tail position: update_no_stackframe(X) -> setelement(5, X, new_value). Here is the BEAM code: {function, update_no_stackframe, 1, 12}. {label,11}. {line,[...]}. {func_info,{atom,t},{atom,update_no_stackframe},1}. {label,12}. {move,{x,0},{x,1}}. {move,{atom,new_value},{x,2}}. {move,{integer,5},{x,0}}. {line,[...]}. {call_ext_only,3,{extfunc,erlang,setelement,3}}. Because there is no stack frame, the `call_ext_only` instruction will be used to call `setelement/3`: {call_ext_only,3,{extfunc,erlang,setelement,3}}. The loader will transform this instruction to a three-instruction sequence: 0000000020BD8130: allocate_tt 0 3 0000000020BD8138: call_bif_e erlang:setelement/3 0000000020BD8148: deallocate_return_Q 0 Using the `call_bif_only` instruction introduced in this commit, only one instruction is needed: 000000005DC377F0: call_bif_only_e erlang:setelement/3 `call_bif_only` calls the BIF and returns to the caller. Now let's look at a function that already has a stack frame when `setelement/3` is called: update_with_stackframe(X) -> foobar(X), setelement(5, X, new_value). Here is the BEAM code: {function, update_with_stackframe, 1, 14}. {label,13}. {line,[...]}. {func_info,{atom,t},{atom,update_with_stackframe},1}. {label,14}. {allocate,1,1}. {move,{x,0},{y,0}}. {line,[...]}. {call,1,{f,16}}. {move,{y,0},{x,1}}. {move,{atom,new_value},{x,2}}. {move,{integer,5},{x,0}}. {line,[...]}. {call_ext_last,3,{extfunc,erlang,setelement,3},1}. Since there is a stack frame, the `call_ext_last` instruction will be used to deallocate the stack frame and call the function: {call_ext_last,3,{extfunc,erlang,setelement,3},1}. Before this commit, the loader would translate this instruction to: 0000000020BD81B8: call_bif_e erlang:setelement/3 0000000020BD81C8: deallocate_return_Q 1 That is, the BIF is called before deallocating the stack frame and returning to the calling function. After this commit, the loader will translate the `call_ext_last` like this: 000000005DC37868: deallocate_Q 1 000000005DC37870: call_bif_only_e erlang:setelement/3 There are still two instructions, but now the stack frame will be deallocated before calling the BIF, which could make the potential garbage collection after the BIF call slightly more efficient (copying less garbage). We could have introduced a `call_bif_last` instruction, but the code for calling a BIF is relatively large and there does not seem be a practical way to share the code between `call_bif` and `call_bif_only` (since the difference is at the end, after the BIF call). Therefore, we did not want to clone the BIF calling code yet another time to make a `call_bif_last` instruction.
2019-03-08Allow list of chunks to be given to strip*()Michael Schmidt
This allows extra chunks to be preserved for languages such as Elixir
2019-03-08Merge branch 'maint'Péter Dimitrov
* maint: inets: Fix handling of erl_script_timeout Change-Id: Ie6028000b0bd45307477d837f63c51b2620faaea
2019-03-08Merge branch 'peterdmv/inets/httpd_erl_script_timeout/ERIERL-321/OTP-15669' ↵Péter Dimitrov
into maint * peterdmv/inets/httpd_erl_script_timeout/ERIERL-321/OTP-15669: inets: Fix handling of erl_script_timeout Change-Id: I6a90408de48df6b8b01f44e0b273507bcec27b13
2019-03-08inets: Fix handling of erl_script_timeoutPéter Dimitrov
When httpd was started with 'erl_script_timeout', the value of the option was converted to milliseconds before storage. Subsequent calls to httpd:info/1 returned the input value multiplied by 1000. This change fixes the handing of erl_script_timeout by storing the timeout in seconds and converting it to milliseconds before usage. Change-Id: Ic308d83b59ad0884e053f096f995754c89adcbf4
2019-03-08Merge branch 'rickard/deprecations-removals-fix'Rickard Green
* rickard/deprecations-removals-fix: Better erl_interface deprecation warning implementation
2019-03-08beam_ssa_opt: Fix crash in ssa_opt_floatJohn Högberg
For reasons better explained in the source code, ssa_opt_float skips optimizing inside guards but it failed to do so consistently; while the pass never processed guard blocks, it was still possible to erroneously defer error checking to a guard block, crashing the compiler once it realized its state was invalid.
2019-03-08Merge branch 'sverker/master/ets-no-mbuf-trapping/OTP-15660'Sverker Eriksson
* sverker/master/ets-no-mbuf-trapping/OTP-15660: erts: Remove ets traversal yielding if heap fragment