1
0
mirror of https://github.com/mobile-shell/mosh.git synced 2026-03-01 18:23:30 +01:00

697 Commits

Author SHA1 Message Date
Mike Frysinger
b5775df441 prng: support getrandom & getentropy
If the C library supports these random functions, use them directly
instead of reading the /dev/urandom file.  This makes life easier on
platforms that don't have /dev/urandom (like WASM).
2026-02-27 19:55:52 -05:00
Mike Frysinger
8e472066be select: use SA_RESTART with signals
Rely on the OS to automatically restart syscalls that were interrupted
by signals.  This makes code overall more robust because we don't have
to explicitly handle EINTR everywhere ourselves.
2026-02-27 17:07:56 -05:00
Mike Frysinger
3f91cce5ff client: drop NACL check
Since Chrome has completely dropped NaCl support now on all platforms,
there's no sense in continuing to support it in mosh.
2026-02-27 17:04:59 -05:00
Eric Dorland
ee757a2210 Fix compile failure on MacOS X
std::shared_ptr::unique() is deprecated in C++17 and removed in C++20.

Inspired by PR#1362.

Snippet of the failure:

```
In file included from ../../src/terminal/terminal.h:42:
../../src/terminal/terminalframebuffer.h:431:23: error: 'unique' is deprecated [-Werror,-Wdeprecated-declarations]
  431 |     if ( !mutable_row.unique() ) {
      |                       ^
/Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/shared_ptr.h:752:3: note: 'unique' has been explicitly marked deprecated here
  752 |   _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_HIDE_FROM_ABI bool unique() const _NOEXCEPT { return use_count() == 1; }
      |   ^
/Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__config:731:41: note: expanded from macro '_LIBCPP_DEPRECATED_IN_CXX17'
  731 | #    define _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_DEPRECATED
      |                                         ^
/Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__config:696:49: note: expanded from macro '_LIBCPP_DEPRECATED'
  696 | #      define _LIBCPP_DEPRECATED __attribute__((__deprecated__))
      |                                                 ^
1 error generated.
```
2026-02-27 16:38:09 -05:00
Benjamin Barenblat
05c7aceb1e Fix up clang-formatting a bit
Move some characters around to optimize clang-format output.
2023-08-07 22:03:00 -04:00
Benjamin Barenblat
3acaa1c4d3 clang-format Mosh
Run clang-format over the Mosh source tree. This is a large change and
has been factored into its own commit for auditability. Reproduce it
with

    find . -name \*.cc -or -name \*.h | while read f; do clang-format -i --style=file $f; done
2023-08-07 22:03:00 -04:00
Benjamin Barenblat
0b15dc94fa Add a clang-format file and prepare for clang-formatting
Create .clang-format to describe the current C++ style used in Mosh.

Mark one carefully-formatted array with `// clang-format off`. Also turn
off clang-format in src/crypto/ocb_internal.cc, since it was imported
almost wholesale from another project and is written in a style
different from the rest of Mosh.
2023-08-07 22:03:00 -04:00
Alex Chernyakhovsky
f2904f95b3 Add missing fatal_assert.h include 2023-08-07 21:52:47 -04:00
Ashley Hedberg
4306b7cd42 Use pipe to communicate between client and server at startup
Fixes empty line on login
2023-08-07 20:59:47 -04:00
Alex Chernyakhovsky
cf542739cc Switch to C++ versions of standard C headers 2023-07-30 19:02:51 -04:00
Alex Chernyakhovsky
19ad493dcb Remove using-declarations for std:: types 2023-07-30 19:02:51 -04:00
Alex Chernyakhovsky
8469db91db Modernize all typedefs with using statements 2023-07-30 19:02:51 -04:00
Alex Chernyakhovsky
38c84a9330 Removed shared_ptr shim
Since C++17 is now the default mosh version, remove the shared_ptr
shim in favor of std::shared_ptr.
2023-07-30 19:02:51 -04:00
Alex Chernyakhovsky
325098ac07 Switch to fully-qualified #include
Previously, mosh used extensive -I flags and all of the mosh-local
makes it really hard to tell what the proper dependency graph is, so
instead remove the -I arguments in favvor of $(top_srcdir) and qualify
the paths wherever they are used.
2023-07-30 17:03:40 -04:00
Alex Chernyakhovsky
62869ae55f Rename VERSION to VERSION.stamp
-I$(top_srcdir) is not usable on macOS due to a conflicting C++ header
 `version`.
2023-07-30 17:03:40 -04:00
Alex Chernyakhovsky
68226283cb Disable emulation-attributes-bce on tmux 3.3a
tmux 3.3a has a behavior change, since reverted, that is incompatible
with this test. Unfortunately, tmux 3.3a has already made it into some
distributions, so the test has to be disabled when tmux 3.3a is encountered.
2022-10-26 19:15:04 -04:00
Benjamin Barenblat
cd7050613c Audit and fix up format strings 2022-08-03 19:59:56 -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
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
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
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
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
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
Peter Edwards
c3a2756065 Apply latest consecutive resize, not earliest.
If there are consecutive resize events in the userstream to be applied in
"serve", we should apply the last/latest one in the sequence, not the
first/earliest one.

This fixes a problem where a flurry of resize events (eg, generated
by a window manager resizing the client), can cause mosh to have an
out-of-date idea as to what the physical geometry of the window is.
2019-01-04 04:06:30 -08:00
John Hood
71829ff631 unicode-later-combining.test: Document slightly. 2018-08-29 22:44:04 -04:00
John Hood
fecd4ee29b Some more namespace hygiene for "using decl;". 2018-08-15 19:28:38 -04:00
John Hood
756f4f8e98 Remove "using namespace std;". 2018-08-15 19:27:23 -04:00
John Hood
fb23168ed9 Always use std::min, std::max. 2018-08-15 19:26:27 -04:00
John Hood
e5f8a826ef Fix bind(2) being misinterpreted as std::bind() with libc++7 on FreeBSD.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230624
2018-08-15 01:11:48 -04:00
John Hood
4aff80b872 Fix more inappropriate const_iterator usage. 2018-08-03 19:39:08 -04:00
John Hood
9a606c2f3d src/statesync/completeterminal.cc: fix bad iterator type 2018-08-03 17:32:07 -04:00
John Hood
8ac80db419 C++03 bound functions are not available in C++17; remove
This makes me a little sad, it's time to move to C++11 or greater.
2018-08-03 16:13:47 -04:00
John Hood
5cdbad68b8 Ignore select() errors on Travis/MacOS. 2018-08-03 15:16:55 -04:00
John Hood
3ea9e3e5a4 mosh-server: improve error logging
Also stop using _exit(), believed unnecessary now with proper stdio
flushing.
2018-08-03 15:16:55 -04:00
John Hood
2a5b5410b2 Fix gcc8 snprintf truncation warning. 2018-04-11 18:10:59 -04:00