Commit Graph

1419 Commits

Author SHA1 Message Date
Alex Chernyakhovsky 3afba8985c Actually evaluate the github actions contains() expression for prerelease 2022-08-03 15:41:12 -10:00
Alex Chernyakhovsky 850c1f0955 Fetch forcibly while fetching tags
`git fetch --tags --unshallow`, run as part of the CI for `git
describe` to do the right thing, ran into the error:

```
 ! [rejected]        mosh-1.4.0-rc0   -> mosh-1.4.0-rc0  (would clobber existing tag)
```

This is because mosh uses annotated tags, whereas the initial fetch
command run by actions/checkout@v2 ends up creating an *unannotated*
tag of the same name.

This means that any time the release CI runs, it would fail.

The resolution is straightforward: --force so that the line becomes

```
 t [tag update]      mosh-1.4.0-rc0 -> mosh-1.4.0-rc0
```

and the annotation is brought in.
2022-08-03 15:22:36 -10:00
Alex Chernyakhovsky 7d2601d419 Tag mosh 1.4.0 Release Candidate 2022-08-03 14:13:43 -10:00
Benjamin Barenblat cd7050613c Audit and fix up format strings 2022-08-03 19:59:56 -04:00
Alex Chernyakhovsky 4cd2da5202 Switch macOS multi-arch to x86_64+arm64
The previous CI attemtped to use Homebrew for builds, but
unfortunately Homebrew has dropped support for universal packages aka
multiarch (fat) binaries. This means that in order to build an arm64 +
x86_64 package, macports has to be used instead of homebrew.

Unlike Homebrew, MacPorts is not installed by default on the GitHub
Actions runners, so we need to install it ourselves. This means
managing our own instance of the cache, which itself produces
challenges as the `gtar` binary run by the action doesn't have enough
permissions to restore the MacPorts checkout. So we have to shim gtar
with a sudo wrapper.

With this commit, we produce a Mosh package that works on macOS 11.0
and newer, on both arm64 and x86_64 architectures. The protobuf
library is statically linked, but all other libraries are provided by
the system.
2022-08-03 13:52:18 -10:00
Alex Chernyakhovsky 6154bc04d9 Add -Wno-unused-parameter
Work around protocolbuffers/protobuf#10357 by disabling
-Wunused-parameter.
2022-08-03 13:44:57 -10:00
Alex Chernyakhovsky 0982212ca7 Remove obsolete Travis CI configuration 2022-07-11 21:21:18 -04:00
Alex Chernyakhovsky 7f0c3a4162 Add macOS release steps to Github Actions
This change ports the Travis CI release workflow for macOS to Github
Actions. Note that while this is functionally identical to the
previous Travis CI flow, no work has been done to update the macOS
build scripts to build for arm64.
2022-07-11 21:21:18 -04:00
Alex Chernyakhovsky f0b0108c85 Add release action on Linux
This Github Actions workflow uses a Linux-based running to create the
release tarball for mosh. This is necessary since mosh does not check
in the autoconf/automake generated files, so the default release
action source download is missing files that are needed for
distributions that use the upstream-provided ./configure script.
2022-07-11 21:21:18 -04:00
Alex Chernyakhovsky 581bd67c5a Fixes for distcheck 2022-07-05 16:56:46 -04:00
Alex Chernyakhovsky 2b7dd9efc3 Correct memory leak in ocb-aes test 2022-07-05 15:36:13 -04:00
Benjamin Barenblat 1416e9a3c1 OCB: Use OpenSSL EVP instead of deprecated AES
Replace calls to AES_* APIs, which were deprecated in OpenSSL 3, with
calls to EVP_* APIs.

Closes: https://github.com/mobile-shell/mosh/issues/1174
2022-06-27 15:10:49 -10:00
Alex Chernyakhovsky 5ad20dbc50 Stop using deprecated Nettle functions
Previously, ocb_internal.cc supported different key sizes, by way of
the deprecated aes_* function family. However, in practice, mosh
always uses AES-128. In Nettle, the explicit key-size APIs are not
deprecated, so switch to AES-128 directly.

Fixes: 1202
2022-06-27 14:34:26 -10:00
Benjamin Barenblat db49808ac3 OCB: Heap-allocate keys
The OpenSSL EVP API requires that keys be heap-allocated, so switch
_ae_ctx to use pointers to keys and opaque allocation functions.

Bug: https://github.com/mobile-shell/mosh/issues/1174
2022-06-27 14:11:09 -10:00
Benjamin Barenblat ad85b90505 OCB: Make primitive AES API explicit
Explicitly define the primitive AES API used by the internal OCB
implementation, and move it into its own namespace (ocb_aes). This will
ease future implementation changes.

Also make some style fixes to affected lines: Replace C-style casts
with C++-style casts, add some missing spaces in argument lists, and
remove some `inline` that the compiler will ignore.

Bug: https://github.com/mobile-shell/mosh/issues/1174
2022-06-27 13:56:07 -10:00
Benjamin Barenblat 0a30c5acd5 Delete unused ROUNDS macro
This macro was used in the reference and AES-NI AES implementations,
both of which were deleted in a563093f16.
2022-06-27 13:56:07 -10:00
Alex Chernyakhovsky e5e62b4c76 Add nettle to the CI matrix 2022-06-27 13:46:18 -10:00
Benjamin Barenblat 13d73a6144 Put -lnettle back on the link line when using Nettle
bacc024083 inadvertently stopped
propagating `pkg-config --libs` output into the link line. This didn’t
affect OpenSSL (since configure.ac puts -lcrypto there manually) or
Apple Common Crypto (since it’s not a separate dylib), but it broke
Nettle builds. Fix Nettle builds by ensuring that `pkg-config --libs`
output actually makes it to the linker.
2022-06-27 13:03:10 -10:00
Benjamin Barenblat bacc024083 Go back to internal OCB implementation
After further discussion, the Mosh maintainers have decided to stick
with the internal OCB implementation for this release. Restore support
for using OpenSSL’s AES but internal OCB. To make this commit easy to
audit, restore the code exactly, including calls to AES functions that
are deprecated in OpenSSL 3; a future commit will update ocb_internal.cc
to use EVP instead of directly calling the AES primitives.

In anticipation of future changes, preserve support for OpenSSL’s
AES-OCB, but don’t compile it in. Add
--with-crypto-library=openssl-with-openssl-ocb and
--with-crypto-library=openssl-with-internal-ocb options to configure so
that developers can easily test Mosh using OpenSSL’s AES-OCB. These
options are intended only for testing, are undocumented, and are not
subject to any API stability guarantees.

Rework configure to look for all possible cryptography libraries first
and then dispatch on --with-crypto-library as appropriate.
2022-06-22 15:02:19 -10:00
Alex Chernyakhovsky 135a11a2bb Use OpenSSL native OCB-AES implementation
OpenSSL 3.0 deprecated many of the functions that ocb.cc used to
implement OCB-AES, causing a build failure when -Wdeprecated collided
with -Werror. Debian temporarily fixed this by suppressing the error
in #1191.

Since mosh 1.4 will be the next stable release of mosh, it should not
depend on deprecated functions in OpenSSL. Since version 1.1.0,
OpenSSL natively supports OCB-AES through the EVP_CIPHER API. @cgull
started early support for this in #924.

This change extends upon the previous work by @cgull in a few ways

 * EVP_CipherInit_ex is called in ae_init to set up the
   EVP_CIPHER_CTX. It is later called in ae_encrypt and ae_decrypt
   just to load nonce (IV in OpenSSL EVP parlance), which reduces the
   amount of initialization done per-packet. However, due to OpenSSL
   API limitations, two copies of the EVP_CIPHER_CTX are kept: one for
   encryption, and one for decryption.

 * Adds missing support for an external tag, rather than just one
   appended to the ciphertext

 * Support for non-default-sized tags

as well as some improved error handling.

Note that this change raises the minimum OpenSSL version for Mosh to
1.1.0. OpenSSL does not provide security support for versions prior to
1.1 at this time, so this is in principle reasonable dependency. If we
want to continue to support distributions (such as RHEL7) which
continue to be supported by their vendor but use an unsupported
OpenSSL, then some future work will have to restore the ocb.cc
implementation that uses the deprecated functions.

Bugs: #1174
2022-06-13 18:37:03 -10:00
Benjamin Barenblat a563093f16 Separate OpenSSL-based OCB implementation from others
Split src/crypto/ocb.cc into two files – one containing the AES-OCB
implementation backed by OpenSSL, and the other containing
implementations backed by Apple Common Crypto and Nettle. This paves the
way for a new OpenSSL implementation that uses OpenSSL 1.1’s OCB support
directly, rather than one that merely uses OpenSSL to provide the
underlying block cipher.

Remove support for rijndael-alg-fst.c and compiler-provided AES
intrinsics, since they’re not in use anymore. (Mosh can still use
hardware-accelerated AES if it’s available; it just now relies
exclusively on the underlying cryptography library to accelerate AES if
possible.)

Update the build system to conditionally compile in either
ocb_openssl.cc or ocb_internal.cc, depending on which cryptography
library you pass to ./configure.

To make this commit easy to audit, ocb_openssl.cc and ocb_internal.cc
are trivially diffable against ocb.cc (now deleted). Expected diffs
consist of a copyright notice update, a preprocessor check to ensure the
appropriate cryptography implementation has been selected, and deletions
to remove code that’s no longer in use. This does mean a substantial
amount of code is duplicated between ocb_openssl.cc and ocb_internal.cc;
however, ocb_openssl.cc should be completely replaced soon, so it won’t
be an issue in the long term.

Bug: https://github.com/mobile-shell/mosh/issues/1174
2022-06-06 16:30:41 -10:00
Alex Chernyakhovsky 2f90addb7c Revert "Remove redundant malloc/free"
This reverts commit 6321b1d9c5.

The original commit 6321b1d9c5 switched
from a malloc call of a 22400 byte buffer to a stack-allocated 22400
byte buffer, in addition to the fairly large buffers already allocated
in the functions. Some systems have fairly small stack frames, making
this 22K allocation potentially dangerous. On my stock Debian bullseye
system, I have 200809 bytes (from `getconf
_POSIX_THREAD_ATTR_STACKSIZE`); a 22400 byte buffer already represents
about 10% of the available stacksize.

Other systems, such as those with musl libc, may have either 80KiB or
128KiB [1], making this allocation represent between 18% to 28% of the
available stack space.

[1] https://wiki.musl-libc.org/functional-differences-from-glibc.html#Thread-stack-size
2022-05-30 20:55:21 -04:00
Alex Chernyakhovsky adb62e97ff Add fuzzer for the terminal
This commit adds a fuzzer for more of the terminal pipeline, adding
coverage for the input and output portions of the terminal
framebuffer.
2022-05-30 20:23:21 -04:00
Alex Chernyakhovsky 0c6e034459 Add fuzzing infrastructure
This commit adds the --enable-fuzzing (and --enable-asan, to make
fuzzing more useful) options and a sample fuzzer for the terminal
parser. At this time only libfuzzer is supported. Future changes to
add AFL to get more fuzzing capability should be possible with the
addition of the afl_driver.cc from Chromium.
2022-05-30 20:23:21 -04:00
Alex Chernyakhovsky 1f27c532ac Add code coverage instructions to README.md 2022-05-30 19:38:10 -04:00
Alex Chernyakhovsky 16c4ff84f9 Ignore generated protobufs for coverage 2022-05-30 19:38:10 -04:00
Alex Chernyakhovsky 70a02d1e83 Add support for generating coverage reports
This change adds autoconf/automake support for building all of mosh
with gcov, and generates an lcov html report. This allows seeing which
parts ofthe source tree have good test coverage, and which can be
shored up. Eventually, it would be good to hook this up to Github
Actions to be generated automatically.
2022-05-30 19:38:10 -04:00
Wolfgang E. Sanyer dbe419d0e0 Disable clang warning in order to mitigate protocolbuffers/protobuf#9181
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
2022-02-04 11:08:30 -05:00
Wolfgang E. Sanyer 7b534bacb4 Replace Travis-CI badge with Github Actions badge.
Signed-off-by: Wolfgang E. Sanyer <WolfgangSanyer@Google.com>
2022-02-04 11:08:30 -05:00
Wolfgang E. Sanyer 179e1d9f56 Add github action for CI build
Signed-off-by: Wolfgang E. Sanyer <WolfgangSanyer@Google.com>
2022-02-04 11:08:30 -05:00
Andrew Chin 378dfa6aa5 Merge pull request #1150 from ncfavier/patch-1
Add tmux and alacritty to title_term_types
2021-12-10 16:07:48 -05:00
Andrew Chin 311764712e Merge pull request #1124 from piru/master
Use CLOCK_MONOTONIC_RAW when available
2021-12-08 18:42:38 -05:00
Andrew Chin 6b2ffa904d Merge pull request #1160 from njaard/master
Don't sometimes hang just after launching ssh
2021-11-04 12:46:10 -04:00
Kalle Samuels 9cf1a9c8ee Don't sometimes hang just after launching ssh
sshd has a bug in which the sometimes it may get stuck trying to read from the client
even though the child process has already exited. This is visible at
https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.226 line 274:
once the child is waited on, `child_terminated` is reset to 0, which causes it to use an infinite timeout 
in the select there.

This workaround causes mosh to disconnect from the server, thereby allowing sshd finish.
2021-10-28 12:38:04 -07:00
Harry Sintonen 87fd565268 Only use CLOCK_MONOTONIC_RAW with __APPLE__ systems. 2021-10-21 16:43:41 +03:00
Naïm Favier bb34ce585e Add tmux and alacritty to title_term_types
Resolves #1130
2021-08-26 19:55:08 +02:00
Andrew Chin e023e81c08 Merge pull request #1125 from black-desk/master
.gitignore: add autogenerated files
2021-07-21 10:23:25 -04:00
black_desk 3a0e19075b .gitignore: fix path 2021-07-21 13:13:02 +08:00
black_desk 232c6bf19e .gitignore: add compile_commands.json 2021-07-21 13:12:03 +08:00
Andrew Chin 68035c18d4 Merge pull request #1146 from buzztiaan/patch-1
fixed the irc channel link in README
2021-07-13 16:17:44 -04:00
buZz cf8a680f2d fixed the irc channel link in README 2021-07-13 22:02:41 +02:00
Harry Sintonen 57b97a4c91 Use CLOCK_MONOTONIC_RAW when available 2020-12-05 21:21:14 +02:00
John Hood 03087e7a76 If exec()ing the remote command fails, pause briefly
This makes the resulting error from mosh-server visible in ordinary usage.
2020-05-18 00:01:05 -04:00
John Hood 12199114fe Move generated includes to their own directory to avoid conflicts.
Fixes #1051, mosh fails to build on case-insensitive filesystems.

XXX This isn't perfect because autoconf/automake drop several extra
files in the directory anyway.
2020-05-17 23:55:09 -04:00
John Hood 609fb91fbc Use Travis Homebrew addon. 2020-05-17 22:29:24 -04:00
John Hood 8f7c29dece "Fix" Travis OS X builds. 2020-05-17 01:20:25 -04:00
Anders Kaseorg 0cc492dbae configure: Add test for whether protoc matches protobuf
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2019-10-02 22:42:21 -07:00
Anders Kaseorg feced5910c configure: Fix FD_ISSET test under -Werror
The uninitialized variable warning from T x; broke the test if the
user passed CXXFLAGS='-O2 -Wall -Werror'.  (Users shouldn’t do that;
our own --enable-compile-warnings=error option was unaffected.)

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2019-10-02 22:42:21 -07:00
Anders Kaseorg 7c10080766 configure: Fix forkpty test code indentation
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2019-10-02 22:42:21 -07:00
Anders Kaseorg 8682f39fa5 configure: Remove unused tests
These tests only define HAVE_* macros that we never check.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2019-10-02 22:42:20 -07:00