Commit graph

621 commits

Author SHA1 Message Date
Byron Hambly
2b8eef42dd Merge 1884ce2f4c into merged_master (Bitcoin PR bitcoin/bitcoin#22937) 2023-05-11 12:38:50 +00:00
Byron Hambly
a1fbc62ba6 Merge fbbbc594ad into merged_master (Bitcoin PR bitcoin/bitcoin#23227) 2023-05-10 13:56:33 +00:00
Byron Hambly
13f7de0975 Merge e418a8e675 into merged_master (Bitcoin PR bitcoin/bitcoin#23255) 2023-05-10 13:45:27 +00:00
Byron Hambly
866564752e Merge 6334ff7364 into merged_master (Bitcoin PR bitcoin/bitcoin#23196) 2023-05-10 11:25:39 +00:00
Byron Hambly
ca29c22820 Merge 0500a22d8c into merged_master (Bitcoin PR bitcoin/bitcoin#23208) 2023-05-09 14:40:24 +00:00
Byron Hambly
3d3f4453de Merge 89b910711c into merged_master (Bitcoin PR bitcoin/bitcoin#23178) 2023-05-09 13:00:05 +00:00
Byron Hambly
05049a9697 Merge c79d9fb2f6 into merged_master (Bitcoin PR bitcoin/bitcoin#23179) 2023-05-09 12:12:33 +00:00
Byron Hambly
498907a233 Merge 816e15ee81 into merged_master (Bitcoin PR bitcoin/bitcoin#22951) 2023-05-09 11:50:39 +00:00
Byron Hambly
cca3f919f8 Merge 9e530c6352 into merged_master (Bitcoin PR bitcoin/bitcoin#20487) 2023-05-09 11:22:04 +00:00
Byron Hambly
1c9eb84570 Merge 42fedb4acd into merged_master (Bitcoin PR bitcoin/bitcoin#23156) 2023-05-09 11:02:14 +00:00
Byron Hambly
d1a87496d0 Merge cdb4dfcbf1 into merged_master (Bitcoin PR bitcoin/bitcoin#20452) 2023-05-09 10:47:06 +00:00
Byron Hambly
9fd90e900c Merge 2d8e0c0c3c into merged_master (Bitcoin PR bitcoin/bitcoin#20457) 2023-04-28 12:41:24 +00:00
Byron Hambly
eea9829aa6 Merge 825f4a64e6 into merged_master (Bitcoin PR bitcoin/bitcoin#22976) 2023-04-24 11:40:49 +00:00
Byron Hambly
f21f92ba69 Merge 8bda5e0988 into merged_master (Bitcoin PR bitcoin/bitcoin#22855) 2023-04-23 09:29:14 +00:00
Byron Hambly
bdb6a66eb5 Merge ec7ec69c7b into merged_master (Bitcoin PR bitcoin/bitcoin#22952) 2023-04-21 11:05:32 +00:00
Byron Hambly
2a48cc4c59 Merge b8336b22d3 into merged_master (Bitcoin PR bitcoin/bitcoin#22675) 2023-04-21 06:41:50 +00:00
James Dorfman
5a22e7ab80 Merge 5446070418 into merged_master (Bitcoin PR bitcoin/bitcoin#22911) 2023-04-21 06:10:28 +00:00
James Dorfman
ffaedbc746 Merge d2dd1697ce into merged_master (Bitcoin PR bitcoin/bitcoin#22904) 2023-04-21 05:24:01 +00:00
James Dorfman
9a0306abb7 Merge 8805e06663 into merged_master (Bitcoin PR bitcoin/bitcoin#22390) 2023-04-21 02:12:32 +00:00
James Dorfman
588cbf79f9 Merge 5e3380b9f5 into merged_master (Bitcoin PR bitcoin/bitcoin#22916) 2023-04-21 01:45:53 +00:00
Byron Hambly
d37b3948cd Merge 91e07cc50d into merged_master (Bitcoin PR bitcoin/bitcoin#22591) 2023-04-20 13:05:24 +00:00
Byron Hambly
162e1f24bd Merge 81f4a3e84d into merged_master (Bitcoin PR bitcoin/bitcoin#22796) 2023-04-11 09:13:05 +00:00
James Dorfman
a50ed38709 Merge b20ad0eb16 into merged_master (Bitcoin PR bitcoin/bitcoin#22772) 2023-04-11 03:33:37 +00:00
James Dorfman
0d8968cf61 Merge 61a843e43b into merged_master (Bitcoin PR bitcoin/bitcoin#22220) 2023-04-11 03:23:21 +00:00
James Dorfman
2e16bd7fe2 Merge f6f7a12462 into merged_master (Bitcoin PR bitcoin/bitcoin#22622) 2023-04-11 01:32:44 +00:00
Byron Hambly
b70d32b713 Merge e9d6eb1b80 into merged_master (Bitcoin PR bitcoin/bitcoin#22217) 2023-04-10 13:07:29 +00:00
Byron Hambly
e536247471 Merge c3545a7396 into merged_master (Bitcoin PR bitcoin/bitcoin#22653) 2023-04-09 06:06:44 +00:00
Byron Hambly
a20c67310c Merge b1a672d158 into merged_master (Bitcoin PR bitcoin/bitcoin#22337) 2023-04-07 11:57:51 +00:00
James Dorfman
751b37293b Merge 3f083a5bbd into merged_master (Bitcoin PR bitcoin/bitcoin#22481) 2023-03-21 18:04:30 +00:00
Andrea Bonel
86db1b70e9 Fix location for default cookie path 2022-09-27 18:56:20 -03:00
W. J. van der Laan
1884ce2f4c
Merge bitcoin/bitcoin#22937: refactor: Forbid calling unsafe fs::path(std::string) constructor and fs::path::string() method
6544ea5035 refactor: Block unsafe fs::path std::string conversion calls (Russell Yanofsky)
b39a477ec6 refactor: Add fs::PathToString, fs::PathFromString, u8string, u8path functions (Russell Yanofsky)

Pull request description:

  The `fs::path` class has a `std::string` constructor which will implicitly convert from strings. Implicit conversions like this are not great in general because they can hide complexity and inefficiencies in the code, but this case is especially bad, because after the transition from `boost::filesystem` to `std::filesystem` in #20744 the behavior of this constructor on windows will be more complicated and can mangle path strings. The `fs::path` class also has a `.string()` method which is inverse of the constructor and has the same problems.

  Fix this by replacing the unsafe method calls with `PathToString` and `PathFromString` function calls, and by forbidding unsafe method calls in the future.

ACKs for top commit:
  kiminuo:
    ACK 6544ea5035
  laanwj:
    Code review ACK 6544ea5035
  hebasto:
    re-ACK 6544ea5035, only added `fsbridge_stem` test case, updated comment, and rebased since my [previous](https://github.com/bitcoin/bitcoin/pull/22937#pullrequestreview-765503126) review. Verified with the following command:

Tree-SHA512: c36324740eb4ee55151146626166c00d5ccc4b6f3df777e75c112bcb4d1db436c1d9cc8c29a1e7fb96051457d317961ab42e6c380c3be2771d135771b2b49fa0
2021-10-15 10:01:56 +02:00
Samuel Dobson
fbbbc594ad
Merge bitcoin/bitcoin#23227: bitcoin-tx: Avoid treating integer overflow as OP_0
fa43e7c2d9 bitcoin-tx: Avoid treating overflow as OP_0 (MarcoFalke)
fa053c0019 style: Fix whitespace in Parse* functions (MarcoFalke)
fa03dec7e9 refactor: Use C++11 range based for loop in ParseScript (MarcoFalke)
fad55e79ca doc: Fixup ToIntegral docs (MarcoFalke)

Pull request description:

  Seems odd to treat integer overflow as `OP_0`, so fix that.

ACKs for top commit:
  theStack:
    re-ACK fa43e7c2d9
  shaavan:
    ACK fa43e7c2d9

Tree-SHA512: 1bbe2de62d853badc18d57d169c6e78ddcdff037e5a85357995dead11c8e67a4fe35087e08a181c60753f8ce91058b7fcc06f5b7901afedc78fbacea8bc3ef4f
2021-10-12 15:32:11 +13:00
MarcoFalke
fab40732a9
util: Add mincore and clone3 to syscall sandbox 2021-10-11 16:26:13 +02:00
MarcoFalke
fad55e79ca
doc: Fixup ToIntegral docs 2021-10-08 15:54:50 +02:00
W. J. van der Laan
6334ff7364
Merge bitcoin/bitcoin#23196: util: Make syscall sandbox compilable with kernel 4.4.0
ac402e749c util: Conditionalize some syscalls in syscall name table (W. J. van der Laan)
64085b37f8 util: Add __NR_copy_file_range syscall constant for sandbox (W. J. van der Laan)

Pull request description:

  Make the new syscall sandbox compilable with kernel 4.4.0.
  This defines a further syscall constant `__NR_copy_file_range` to make sure all syscalls used in the profile are available even if not defined in the kernel headers.

  Also, make a few syscalls optional in the syscall name table:

  - `__NR_pkey_alloc`
  - `__NR_pkey_free`
  - `__NR_pkey_mprotect`
  - `__NR_preadv2`
  - `__NR_pwritev2`

ACKs for top commit:
  practicalswift:
    cr ACK ac402e749c

Tree-SHA512: be6c55bf0a686bcdfad0b80b950d0d7d77a559ac234fc997b47514bdba44865a371c96dd8d34a811ba46424a84f410e23f75485b9b1e69e529b7d40e0b4b91b8
2021-10-07 14:39:13 +02:00
MarcoFalke
fab360aa00
util: Add mremap syscall to AllowAddressSpaceAccess 2021-10-06 13:58:38 +02:00
W. J. van der Laan
ac402e749c util: Conditionalize some syscalls in syscall name table
Put these in `#ifdef` as they are newer syscalls that might not be
defined on all kernels:

     __NR_pkey_alloc
     __NR_pkey_free
     __NR_pkey_mprotect
     __NR_preadv2
     __NR_pwritev2

Thanks to jamesob for reporting.
2021-10-05 19:36:29 +02:00
W. J. van der Laan
64085b37f8 util: Add __NR_copy_file_range syscall constant for sandbox
Kernel 4.4.0 doesn't define this.
2021-10-05 19:35:24 +02:00
Russell Yanofsky
6544ea5035 refactor: Block unsafe fs::path std::string conversion calls
There is no change in behavior. This just helps prepare for the
transition from boost::filesystem to std::filesystem by avoiding calls
to methods which will be unsafe after the transaction to std::filesystem
to due lack of a boost::filesystem::path::imbue equivalent and inability
to set a predictable locale.

Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
Co-authored-by: Kiminuo <kiminuo@protonmail.com>
Co-authored-by: MarcoFalke <falke.marco@gmail.com>
2021-10-05 11:10:47 -04:00
W. J. van der Laan
89b910711c
Merge bitcoin/bitcoin#23178: util: Fix GUIX build with syscall sandbox
2d0279987e util: Make sure syscall numbers used in profile are defined (W. J. van der Laan)
8289d19ea5 util: Define SECCOMP_RET_KILL_PROCESS if not provided by the headers (W. J. van der Laan)

Pull request description:

  Looks like we've broke the GUIX build in #20487. This attempts to fix it:

  - Define `__NR_statx` `__NR_getrandom` `__NR_membarrier` as some kernel headers lack them, and it's important to have the same profile independent on what kernel is used for building.
  - Define `SECCOMP_RET_KILL_PROCESS` as it isn't defined in the headers.

ACKs for top commit:
  practicalswift:
    cr ACK 2d0279987e

Tree-SHA512: c264c66f90af76bf364150e44d0a31876c2ef99f05777fcdd098a23f1e80efef43028f54bf9b3dad016110056d303320ed9741b0cb4c6266175fa9d5589b4277
2021-10-05 16:50:34 +02:00
W. J. van der Laan
2d0279987e util: Make sure syscall numbers used in profile are defined
Define the following syscall numbers for x86_64, so that the profile
will be the same no matter what kernel is built against, including
kernels that don't have `__NR_statx`:
```c++
 #define __NR_statx 332
 #define __NR_getrandom 318
 #define __NR_membarrier 324
```
2021-10-05 14:42:35 +02:00
MarcoFalke
c79d9fb2f6
Merge bitcoin/bitcoin#23179: sandbox: add newfstatat & copy_file_range to allowed filesystem syscalls
44d77d2213 sandbox: add copy_file_range to allowed filesystem syscalls (fanquake)
ee08741c9c sandbox: add newfstatat to allowed filesystem syscalls (fanquake)

Pull request description:

  Similar to #23178, this is a follow up to #20487, which has broken running the unit tests for some developers. Fix this by adding `newfstatat` to the list of allowed filesystem related calls.

ACKs for top commit:
  achow101:
    ACK 44d77d2213
  laanwj:
    Code review ACK  44d77d2213
  practicalswift:
    cr ACK 44d77d2213

Tree-SHA512: ce9d1b441ebf25bd2cf290566e05864223c1418dab315c962e1094ad877db5dd9fcab94ab98a46da8b712a8f5f46675d62ca3349215d8df46ec5b3c4d72dbaa6
2021-10-05 11:35:18 +02:00
MarcoFalke
816e15ee81
Merge bitcoin/bitcoin#22951: consensus: move amount.h into consensus
9d0379cea6 consensus: use <cstdint> over <stdint.h> in amount.h (fanquake)
863e52fe63 consensus: make COIN & MAX_MONEY constexpr (fanquake)
d09071da5b [MOVEONLY] consensus: move amount.h into consensus (fanquake)

Pull request description:

  A first step (of a few) towards some source code reorganization, as well as making libbitcoinconsensus slightly more self contained.

  Related to #15732.

ACKs for top commit:
  MarcoFalke:
    concept ACK 9d0379cea6 🏝

Tree-SHA512: 97fc79262dcb8c00996852a288fee69ddf8398ae2c95700bba5b326f1f38ffcfaf8fa66e29d0cb446d9b3f4e608a96525fae0c2ad9cd531ad98ad2a4a687cd6a
2021-10-05 09:43:23 +02:00
W. J. van der Laan
8289d19ea5 util: Define SECCOMP_RET_KILL_PROCESS if not provided by the headers
Define `SECCOMP_RET_KILL_PROCESS` as it isn't defined in the headers, as
is the case for the GUIX build on this platform.
2021-10-05 08:15:04 +02:00
fanquake
44d77d2213
sandbox: add copy_file_range to allowed filesystem syscalls 2021-10-05 09:13:55 +08:00
fanquake
ee08741c9c
sandbox: add newfstatat to allowed filesystem syscalls 2021-10-05 08:41:41 +08:00
W. J. van der Laan
9e530c6352
Merge bitcoin/bitcoin#20487: Add syscall sandboxing using seccomp-bpf (Linux secure computing mode)
4747da3a5b Add syscall sandboxing (seccomp-bpf) (practicalswift)

Pull request description:

  Add experimental syscall sandboxing using seccomp-bpf (Linux secure computing mode).

  Enable filtering of system calls using seccomp-bpf: allow only explicitly allowlisted (expected) syscalls to be called.

  The syscall sandboxing implemented in this PR is an experimental feature currently available only under Linux x86-64.

  To enable the experimental syscall sandbox the `-sandbox=<mode>` option must be passed to `bitcoind`:

  ```
    -sandbox=<mode>
         Use the experimental syscall sandbox in the specified mode
         (-sandbox=log-and-abort or -sandbox=abort). Allow only expected
         syscalls to be used by bitcoind. Note that this is an
         experimental new feature that may cause bitcoind to exit or crash
         unexpectedly: use with caution. In the "log-and-abort" mode the
         invocation of an unexpected syscall results in a debug handler
         being invoked which will log the incident and terminate the
         program (without executing the unexpected syscall). In the
         "abort" mode the invocation of an unexpected syscall results in
         the entire process being killed immediately by the kernel without
         executing the unexpected syscall.
  ```

  The allowed syscalls are defined on a per thread basis.

  I've used this feature since summer 2020 and I find it to be a helpful testing/debugging addition which makes it much easier to reason about the actual capabilities required of each type of thread in Bitcoin Core.

  ---

  Quick start guide:

  ```
  $ ./configure
  $ src/bitcoind -regtest -debug=util -sandbox=log-and-abort
  …
  2021-06-09T12:34:56Z Experimental syscall sandbox enabled (-sandbox=log-and-abort): bitcoind will terminate if an unexpected (not allowlisted) syscall is invoked.
  …
  2021-06-09T12:34:56Z Syscall filter installed for thread "addcon"
  2021-06-09T12:34:56Z Syscall filter installed for thread "dnsseed"
  2021-06-09T12:34:56Z Syscall filter installed for thread "net"
  2021-06-09T12:34:56Z Syscall filter installed for thread "msghand"
  2021-06-09T12:34:56Z Syscall filter installed for thread "opencon"
  2021-06-09T12:34:56Z Syscall filter installed for thread "init"
  …
  # A simulated execve call to show the sandbox in action:
  2021-06-09T12:34:56Z ERROR: The syscall "execve" (syscall number 59) is not allowed by the syscall sandbox in thread "msghand". Please report.
  …
  Aborted (core dumped)
  $
  ```

  ---

  [About seccomp and seccomp-bpf](https://en.wikipedia.org/wiki/Seccomp):

  > In computer security, seccomp (short for secure computing mode) is a facility in the Linux kernel. seccomp allows a process to make a one-way transition into a "secure" state where it cannot make any system calls except exit(), sigreturn(), and read() and write() to already-open file descriptors. Should it attempt any other system calls, the kernel will terminate the process with SIGKILL or SIGSYS. In this sense, it does not virtualize the system's resources but isolates the process from them entirely.
  >
  > […]
  >
  > seccomp-bpf is an extension to seccomp that allows filtering of system calls using a configurable policy implemented using Berkeley Packet Filter rules. It is used by OpenSSH and vsftpd as well as the Google Chrome/Chromium web browsers on Chrome OS and Linux. (In this regard seccomp-bpf achieves similar functionality, but with more flexibility and higher performance, to the older systrace—which seems to be no longer supported for Linux.)

ACKs for top commit:
  laanwj:
    Code review and lightly tested ACK 4747da3a5b

Tree-SHA512: e1c28e323eb4409a46157b7cc0fc29a057ba58d1ee2de268962e2ade28ebd4421b5c2536c64a3af6e9bd3f54016600fec88d016adb49864b63edea51ad838e17
2021-10-04 22:45:43 +02:00
Andrew Poelstra
b64ca7f411 Merge 6eed792d43 into merged_master (Elements PR ElementsProject/elements#1050)
Conflicts were mostly obvious, except for those in CreateTransactionInternal.
(This function was moved from wallet.cpp to spend.cpp, and substantially
rewritten, between 0.21 and 22.0.) For those I manually applied the changes
from the diff, which wound up taking a slightly different form.

Also had to update the new test because the `addresses` field of the RPC
output was removed.
2021-10-04 15:13:47 +00:00
MarcoFalke
42fedb4acd
Merge bitcoin/bitcoin#23156: refactor: Remove unused ParsePrechecks and ParseDouble
fa9d72a794 Remove unused ParseDouble and ParsePrechecks (MarcoFalke)
fa3cd28535 refactor: Remove unused ParsePrechecks from ParseIntegral (MarcoFalke)

Pull request description:

  All of the `ParsePrechecks` are already done by `ToIntegral`, so remove them from `ParseIntegral`.

  Also:
  * Remove redundant `{}`. See https://github.com/bitcoin/bitcoin/pull/20457#discussion_r720116866
  * Add missing failing c-string test case
  * Add missing failing test cases for non-int32_t integral types

ACKs for top commit:
  laanwj:
    Code review ACK fa9d72a794, good find on ParseDouble not being used at all, and testing for behavior of embedded NULL characters is always a good thing.
  practicalswift:
    cr ACK fa9d72a794

Tree-SHA512: 3d654dcaebbf312dd57e54241f9aa6d35b1d1d213c37e4c6b8b9a69bcbe8267a397474a8b86b57740fbdd8e3d03b4cdb6a189a9eb8e05cd38035dab195410aa7
2021-10-04 15:06:37 +02:00
MarcoFalke
fa9d72a794
Remove unused ParseDouble and ParsePrechecks 2021-10-04 09:46:17 +02:00