summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2020-09-04Create ERRORS section for ober_read_elements.Martijn van Duren
Tweaks and OK tb@ OK jmc@
2020-09-03Missed one case of errno not being set in previous.Martijn van Duren
double check and OK tb@
2020-09-03Clean up asn1/x_info.cTheo Buehler
Instead of using malloc(3) and manually setting part of the structure to zero, part to something else and leaving the rest uninitialized, we can benefit from the fact that there's this thing called calloc(3). Moreover, all variants of free(3) in libcrypto are NULL safe. ok beck inoguchi
2020-09-03Remove unnecessary zeroing after recallocarray(3)Theo Buehler
Zap a memset that was redundant since OpenSSL 0.97b was merged by markus in 2003. Nowadays it's otto's recallocarray(3) that does the zeroing. ok beck inoguchi otto PS: ASN1_BIT_STRING_set_bit(3) was committed on Dec 21 1998 by Ralf S. Engelschnall and used this bizarre allocation idiom: if (a->data == NULL) c=(unsigned char *)Malloc(w+1); else c=(unsigned char *)Realloc(a->data,w+1); People complained about Malloc, Realloc and Free being used elsewhere, so on Jun 1 2000, Richarde Levitte swept the OpenSSL tree and it became this. if (a->data == NULL) c=(unsigned char *)OPENSSL_malloc(w+1); else c=(unsigned char *)OPENSSL_realloc(a->data,w+1); Then it was found that existing data should be cleaned, and on Nov 13 2002 Ben Laurie changed the last line to c=(unsigned char *)OPENSSL_realloc_clean(a->data, a->length, w+1);
2020-09-03Make sure ober_read_elements sets errno on every case where NULL isMartijn van Duren
returned. OK deraadt@ tb@
2020-09-02KNF and comment tweaksTheo Buehler
2020-09-01Zero out data to avoid leaving stack garbage in the tail ofTheo Buehler
the session id in case the copied session id is shorter than SSL_MAX_SESSION_ID_LENGTH. long standing bug pointed out by jsing
2020-09-01The bumping of sess_cb_hit stats can wait until handling ofTheo Buehler
get_session_cb is completed.
2020-09-01In the explanatory comment of ssl_get_prev_session fix the spelling ofTheo Buehler
the function name, document alert and make it fit into 80 columns.
2020-09-01Split session retrieval out of ssl_get_prev_session()Theo Buehler
In case the session ticket was empty or missing, an attempt is made to retrieve the session from the internal cache or via a callback. This code can easily be flattened a bit and factored into two functions. I decided to wrap those into a third function to make the call from the switch easier on the eye. I could have kept the try_session_cache flag, but it now seems rather pointless and awkwardly named anyway, so I took its negation and named it ticket_decrypted. To top things off, a little bit of polish in the exit path. ok beck inoguchi jsing (with the usual healthy dose of nits)
2020-09-01copy session id directly in ssl_get_prev_sessionTheo Buehler
ssl_get_prev_session() hands the session id down to tls_decrypt_ticket() which then copies it into the session pointer that it is about to return. It's a lot simpler to retrieve the session pointer and copy the session id inside ssl_get_prev_session(). Also, 'goto err' directly in TLS1_TICKET_NOT_DECRYPTED instead of skipping a couple of long if clauses before doing so. ok inoguchi jsing
2020-09-01indent the only other label in this fileTheo Buehler
2020-09-01Indent label and remove dangling elseTheo Buehler
2020-09-01Zap NULL check before SSL_SESSION_free()Theo Buehler
2020-09-01Rename the session pointer ret to sessTheo Buehler
ret is a confusing name for a pointer in a function that returns int. ret is only returned in the sense that it ultimately replaces the current s->session on success.
2020-09-01Hoist ERR_clear_error() call into the derr: labelTheo Buehler
The only path that sets TLS1_TICKET_NOT_DECRPYTED is through this label and the ERR_clear_error() is called conditionally on this. We clear the errors to make decrypt errors non-fatal. The free functions should not set the errors and if they do, we don't want to hide that. discussed with jsing
2020-09-01simplify tls1_process_ticket() exit pathTheo Buehler
tls1_process_ticket() - the only caller of tls_decrypt_ticket() - ends in a switch over the return value of tls_decrypt_ticket() to decide whether or not to set s->internal->tlsext_ticket_expected = 1. Since tls_decrypt_ticket() already knows what it will return and partly bases its decision on what to return on whether or not the ticket needs to be renewed, it can also take care of setting this flag. This way we don't need to have a confusing switch that conflates some return values and sets this flag. Moreover, we can get rid of the ugly TLS1_TICKET_DECRYPTED_RENEW whose only purpose is to signal that the flag should be set. ok jsing
2020-08-31Return code tweaks for session ticket handlersTheo Buehler
In tls1_process_ticket() and tls_decrypt_ticket() use #defines with descriptive names instead of hardcoding -1 1 2 3 4 and occasionally explaining the magic numbers with comments. ok beck inoguchi
2020-08-31Send alert on ssl_get_prev_session failureTheo Buehler
ssl_get_prev_session() can fail for various reasons some of which may be internal_error others decode_error alerts. Propagate the appropriate alert up to the caller so we can abort the handshake by sending a fatal alert instead of rudely closing the pipe. Currently only 28 of 292 test cases of tlsfuzzer's test-extension.py pass. With this diff, 272 pass. The rest will require fixes elsewhere. ok beck inoguchi jsing
2020-08-30Remove duplicate definition of _null_auth.mortimer
ok millert@ deraadt@
2020-08-30Start replacing the existing TLSv1.2 record layer.Joel Sing
This takes the same design/approach used in TLSv1.3 and provides an opaque struct that is self contained and cannot reach back into other layers. For now this just implements/replaces the writing of records for DTLSv1/TLSv1.0/TLSv1.1/TLSv1.2. In doing so we stop copying the plaintext into the same buffer that is used to transmit to the wire. ok inoguchi@ tb@
2020-08-29define OPENSSL_NO_SSL_TRACE in opensslfeatures.hKinichiro Inoguchi
ok jsing@ tb@
2020-08-23amd64: TSC timecounter: prefix RDTSC with LFENCEcheloha
Regarding RDTSC, the Intel ISA reference says (Vol 2B. 4-545): > The RDTSC instruction is not a serializing instruction. > > It does not necessarily wait until all previous instructions > have been executed before reading the counter. > > Similarly, subsequent instructions may begin execution before the > read operation is performed. > > If software requires RDTSC to be executed only after all previous > instructions have completed locally, it can either use RDTSCP (if > the processor supports that instruction) or execute the sequence > LFENCE;RDTSC. To mitigate this problem, Linux and DragonFly use LFENCE. FreeBSD and NetBSD take a more complex route: they selectively use MFENCE, LFENCE, or CPUID depending on whether the CPU is AMD, Intel, VIA or something else. Let's start with just LFENCE. We only use the TSC as a timecounter on SSE2 systems so there is no need to conditionally compile the LFENCE. We can explore conditionally using MFENCE later. Microbenchmarking on my machine (Core i7-8650) suggests a penalty of about 7-10% over a "naked" RDTSC. This is acceptable. It's a bit of a moot point though: the alternative is a considerably weaker monotonicity guarantee when comparing timestamps between threads, which is not acceptable. It's worth noting that kernel timecounting is not *exactly* like userspace timecounting. However, they are similar enough that we can use userspace benchmarks to make conjectures about possible impacts on kernel performance. Concerns about kernel performance, in particular the network stack, were the blocking issue for this patch. Regarding networking performance, claudio@ says a 10% slower nanotime(9) or nanouptime(9) is acceptable and that shaving off "tens of cycles" is a micro-optimization. There are bigger optimizations to chase down before such a difference would matter. There is additional work to be done here. We could experiment with conditionally using MFENCE. Also, the userspace TSC timecounter doesn't have access to the adjustment skews available to the kernel timecounter. pirofti@ has suggested a scheme involving RDTSCP and an array of skews mapped into user memory. deraadt@ has suggested a scheme where the skew would be kept in the TCB. However it is done, access to the skews will improve monotonicity, which remains a problem with the TSC. First proposed by kettenis@ and pirofti@. With input from pirofti@, deraadt@, guenther@, naddy@, kettenis@, and claudio@. Based on similar changes in Linux, FreeBSD, NetBSD, and DragonFlyBSD. ok deraadt@ pirofti@ kettenis@ naddy@ claudio@
2020-08-23check errno against EINTR; not return value from poll()Damien Miller
spotted by Pedro Martelletto
2020-08-23update to libfido2 46710ac06, picking up a few API changesDamien Miller
ok tb@ deraadt@ NB. major crank
2020-08-17Fix append mode so it always writes to the end and expand regress.Todd C. Miller
OK deraadt@ martijn@
2020-08-14Fix handling of "w+" mode, we were only truncating for "w".Todd C. Miller
OK martijn@ mpi@
2020-08-13select.2: Xr directly to timersub(3) now that it has a dedicated manpagecheloha
Reported by Fabian Raetz <fabian.raetz@gmail.com>.
2020-08-11Send an unexpected message alert if no valid content type is found.Joel Sing
When record protection is engaged, the plaintext must be followed by a non-zero content type and optional zero padding. If the plaintext is zero length or only consists of zero bytes then it is not a valid message, since the content type is unspecified. ok tb@
2020-08-11Increment the epoch in the same place for both read and write.Joel Sing
ok inoguchi@ tb@
2020-08-11Use 0 instead of 0x00 for memset() calls.Joel Sing
ok inoguchi@ tb@
2020-08-11Use SSL3_SEQUENCE_SIZE for last_write_sequence[] rather than hardcoding.Joel Sing
ok inoguchi@ tb@
2020-08-11In SSL_new() just 'goto err' on allocation failure.Joel Sing
The error path does the same as the currently duplicated code. ok inoguchi@ tb@
2020-08-11sync with upstream libfido2 rev 2fa20b889, picking up ~7 monthsDamien Miller
of fixes and a few new APIs that we'd like to use in OpenSSH ok deraadt@
2020-08-10Tedu compiler-rt 8.0.1.Patrick Wildt
2020-08-10Un-hook and re-hook libcompiler_rt.Patrick Wildt
ok kettenis@
2020-08-10Avoid passing -1 to freezero.Theo Buehler
If a peer sends a bogus record consisting of all-zero plaintext, the content_len would be decremented to -1 and cause a crash in freezero. ok inoguchi jsing
2020-08-09Fix some wrapping/indent.Joel Sing
2020-08-09Add P-521 to the list of curves supported by default in the client.Joel Sing
A certain VPN provider appears to have configured their servers to only accept P-521 for TLSv1.3 key exchange. The particular VPN software in use also does not currently allow for the TLSv1.3 key share groups to be configured, which means that there is no way to easily use LibreSSL in this situation. Include P-521 in the list of curves that are supported by default in the client, in order to increase interoperability. Discussed at length with beck@, inoguchi@ and tb@. ok tb@
2020-08-09Use CBB more correctly when writing SSL3/DTLS records.Joel Sing
Previously we used CBB to build the record headers, but not the entire record. Use CBB_init_fixed() upfront, then build the record header and add space for the record content. However, in order to do this we need to determine the length of the record upfront. This simplifies the code, removes a number of manual bounds checks and makes way for further improvements. ok inoguchi@ tb@
2020-08-09Make the explicit IV length handling in DTLS the same as SSL3/TLS.Joel Sing
ok inoguchi@ tb@
2020-08-06delete another word to improve the wording; suggested by jmc@Ingo Schwarze
2020-08-06Explain the purpose of CMAC_resume(3) in more detail.Ingo Schwarze
Triggered by jmc@ apparently misunderstanding the intention of the text and fixing a grammatical error in a way that wasn't ideal, so i guess he wouldn't have been the only one to find the previous version hard to understand. OK jmc@
2020-08-04Cleanup aead_ctxKinichiro Inoguchi
ok jsing@ tb@
2020-08-04We have `pipexinq' and `pipexoutq' mbuf(9) queues to store pipex(4)mvs
related mbufs. Each mbuf(9) passed to these queues stores the pointer to corresponding pipex(4) session referenced as `m_pkthdr.ph_cookie'. When session was destroyed its reference can still be in these queues so we have use after free issue while pipexintr() dereference it. I removed `pipexinq', `pipexoutq' and pipexintr(). This not only allows us to avoid issue described above, but also removes unnecessary context switch in packet processing. Also it makes code simpler. ok mpi@ yasuoka@
2020-08-03Only parse a client's status_request in the CHTheo Buehler
A client should only send a status_request as part of the CH. Pointed out by Michael Forney ok inoguchi jsing
2020-08-03Ensure clients only send a status_request in the CHTheo Buehler
The current code might cause a client to send a status_request containing a CertificateStatusRequest with its certificate. This makes no sense. Pointed out by Michael Forney ok inoguchi jsing
2020-08-03Correctly handle server requests for an OCSP responseTheo Buehler
According to RFC 8446, 4.4.2.1, a server may request that a client present an OCSP response with its certificate by sending an empty status_request extension as part of the certificate request. The current code expects a full CertificateStatus structure, which is only sent if the server sends an OCSP response with its certificate. This causes interoperability issues with Go's TLS server and with newer GnuTLS where we would abort the handshake with a decode_error alert and length mismatch error. Issue reported and diagnosed by Michael Forney Problem also found by Mikolaj Kucharski and inoguchi. ok inoguchi jsing
2020-08-03Bump libc++ and libc++abi majors due to floating point typePatrick Wildt
changes with LLVM 10. found by kettenis@ ok deraadt@
2020-08-03crank the major cos grammar.c has grown.David Gwynne
pointed out by tb@, who also provided the diff. maybe someone should/could add a Symbols.list here? ok tb@ deraadt@