From 92562b43498f02f17f125f12fc10f6d5d3690ba4 Mon Sep 17 00:00:00 2001 From: Jack May Date: Fri, 8 May 2020 12:37:04 -0700 Subject: [PATCH] Pull in hardened BPF virtual machine (#9931) --- Cargo.lock | 537 ++++++++-------------- programs/bpf/Cargo.lock | 345 +++----------- programs/bpf/Cargo.toml | 2 +- programs/bpf/tests/programs.rs | 2 +- programs/bpf_loader/Cargo.toml | 5 +- programs/bpf_loader/src/allocator_bump.rs | 2 +- programs/bpf_loader/src/bpf_verifier.rs | 306 ++++++------ programs/bpf_loader/src/lib.rs | 60 ++- 8 files changed, 451 insertions(+), 808 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 953fb03010..1ead047115 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -34,15 +34,6 @@ dependencies = [ "winapi 0.3.8", ] -[[package]] -name = "ar" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579681b3fecd1e9d6b5ce6969e05f9feb913f296eddaf595be1166a5ca597bc4" -dependencies = [ - "byteorder", -] - [[package]] name = "arc-swap" version = "0.4.6" @@ -124,9 +115,9 @@ dependencies = [ [[package]] name = "backtrace-sys" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7" +checksum = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399" dependencies = [ "cc", "libc", @@ -165,9 +156,9 @@ checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "base64" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" +checksum = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42" [[package]] name = "bincode" @@ -190,12 +181,12 @@ dependencies = [ "cfg-if", "clang-sys", "clap", - "env_logger 0.7.1", + "env_logger", "lazy_static", "lazycell", "log 0.4.8", "peeking_take_while", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", "regex", "rustc-hash", @@ -203,18 +194,6 @@ dependencies = [ "which", ] -[[package]] -name = "bit-vec" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" - -[[package]] -name = "bit-vec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" - [[package]] name = "bitflags" version = "1.2.1" @@ -232,16 +211,6 @@ dependencies = [ "constant_time_eq", ] -[[package]] -name = "block-buffer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" -dependencies = [ - "arrayref", - "byte-tools 0.2.0", -] - [[package]] name = "block-buffer" version = "0.7.3" @@ -249,7 +218,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ "block-padding", - "byte-tools 0.3.1", + "byte-tools", "byteorder", "generic-array 0.12.3", ] @@ -260,16 +229,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools 0.3.1", -] - -[[package]] -name = "bloom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00ac8e5056d6d65376a3c1aa5c7c34850d6949ace17f0266953a254eb3d6fe8" -dependencies = [ - "bit-vec 0.4.4", + "byte-tools", ] [[package]] @@ -317,12 +277,6 @@ dependencies = [ "serde", ] -[[package]] -name = "byte-tools" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" - [[package]] name = "byte-tools" version = "0.3.1" @@ -401,11 +355,11 @@ checksum = "2db2df1ebc842c41fd2c4ae5b5a577faf63bd5151b953db752fc686812bee318" dependencies = [ "clap", "log 0.4.8", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", "serde", "serde_json", - "syn 1.0.18", + "syn 1.0.19", "tempfile", "toml", ] @@ -442,7 +396,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ "num-integer", - "num-traits 0.2.11", + "num-traits", "serde", "time", ] @@ -453,7 +407,7 @@ version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" dependencies = [ - "glob 0.3.0", + "glob", "libc", "libloading", ] @@ -503,17 +457,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "colored" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" -dependencies = [ - "atty", - "lazy_static", - "winapi 0.3.8", -] - [[package]] name = "combine" version = "2.5.2" @@ -608,7 +551,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "387df94cb74ada1b33e10ce034bb0d9360cc73edb5063e7d7d4120a40ee1c9d2" dependencies = [ "cast", - "num-traits 0.2.11", + "num-traits", "num_cpus", "rand 0.4.6", "thread-scoped", @@ -729,7 +672,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26778518a7f6cffa1d25a44b602b62b979bd88adb9e99ffec546998cf3404839" dependencies = [ "byteorder", - "digest 0.8.1", + "digest", "rand_core 0.5.1", "subtle 2.2.2", "zeroize", @@ -752,15 +695,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" -[[package]] -name = "digest" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" -dependencies = [ - "generic-array 0.9.0", -] - [[package]] name = "digest" version = "0.8.1" @@ -846,7 +780,7 @@ dependencies = [ "curve25519-dalek", "rand 0.7.3", "serde", - "sha2 0.8.1", + "sha2", ] [[package]] @@ -855,33 +789,6 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -[[package]] -name = "elfkit" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f182eda16a7360c80a2f8638d0726e9d5478173058f1505c42536ca666ecd2" -dependencies = [ - "ar", - "bit-vec 0.5.1", - "bitflags", - "bloom", - "byteorder", - "clap", - "colored", - "enum-primitive-derive", - "env_logger 0.5.13", - "fnv", - "glob 0.2.11", - "indexmap", - "itertools 0.7.11", - "log 0.4.8", - "num-traits 0.2.11", - "pretty_env_logger", - "rayon", - "sha2 0.7.1", - "tempfile", -] - [[package]] name = "encode_unicode" version = "0.3.6" @@ -897,30 +804,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-primitive-derive" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b90e520ec62c1864c8c78d637acbfe8baf5f63240f2fb8165b8325c07812dd" -dependencies = [ - "num-traits 0.1.43", - "quote 0.3.15", - "syn 0.11.11", -] - -[[package]] -name = "env_logger" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" -dependencies = [ - "atty", - "humantime 1.3.0", - "log 0.4.8", - "regex", - "termcolor", -] - [[package]] name = "env_logger" version = "0.7.1" @@ -936,9 +819,9 @@ dependencies = [ [[package]] name = "failure" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ "backtrace", "failure_derive", @@ -946,13 +829,13 @@ dependencies = [ [[package]] name = "failure_derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", "synstructure", ] @@ -979,9 +862,9 @@ checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" [[package]] name = "filetime" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e" +checksum = "affc17579b132fc2461adf7c575cc6e8b134ebca52c51f5411388965227dc695" dependencies = [ "cfg-if", "libc", @@ -1094,9 +977,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -1128,15 +1011,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.12.3" @@ -1177,12 +1051,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "glob" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" - [[package]] name = "glob" version = "0.3.0" @@ -1202,6 +1070,17 @@ dependencies = [ "regex", ] +[[package]] +name = "goblin" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd5e3132801a1ac34ac53b97acde50c4685414dd2f291b9ea52afa6f07468c8" +dependencies = [ + "log 0.4.8", + "plain", + "scroll", +] + [[package]] name = "h2" version = "0.1.26" @@ -1222,9 +1101,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" +checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" dependencies = [ "bytes 0.5.4", "fnv", @@ -1235,7 +1114,7 @@ dependencies = [ "indexmap", "log 0.4.8", "slab", - "tokio 0.2.19", + "tokio 0.2.20", "tokio-util", ] @@ -1306,7 +1185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" dependencies = [ "crypto-mac", - "digest 0.8.1", + "digest", ] [[package]] @@ -1433,7 +1312,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.2.4", + "h2 0.2.5", "http 0.2.1", "http-body 0.3.1", "httparse", @@ -1442,7 +1321,7 @@ dependencies = [ "net2", "pin-project", "time", - "tokio 0.2.19", + "tokio 0.2.20", "tower-service", "want 0.3.0", ] @@ -1460,7 +1339,7 @@ dependencies = [ "log 0.4.8", "rustls", "rustls-native-certs", - "tokio 0.2.19", + "tokio 0.2.20", "tokio-rustls", "webpki", ] @@ -1538,15 +1417,6 @@ dependencies = [ "libc", ] -[[package]] -name = "itertools" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.9.0" @@ -1605,9 +1475,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055" +checksum = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" dependencies = [ "wasm-bindgen", ] @@ -1659,9 +1529,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d386855ea963193689078018f46f9f39e06acda14c10d396e153cfd728fc690c" dependencies = [ "proc-macro-crate", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -1776,15 +1646,15 @@ checksum = "883213ae3d09bfc3d104aefe94b25ebb183b6f4d3a515b23b14817e1f4854005" dependencies = [ "bindgen", "cc", - "glob 0.3.0", + "glob", "libc", ] [[package]] name = "linked-hash-map" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" +checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "lock_api" @@ -1895,9 +1765,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" dependencies = [ "cfg-if", "fuchsia-zircon", @@ -1926,9 +1796,9 @@ dependencies = [ [[package]] name = "mio-uds" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" dependencies = [ "iovec", "libc", @@ -1967,9 +1837,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" dependencies = [ "cfg-if", "libc", @@ -2025,9 +1895,9 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c8b15b261814f992e33760b1fca9fe8b693d8a65299f20c9901688636cfb746" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -2037,16 +1907,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ "autocfg 1.0.0", - "num-traits 0.2.11", -] - -[[package]] -name = "num-traits" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" -dependencies = [ - "num-traits 0.2.11", + "num-traits", ] [[package]] @@ -2111,9 +1972,9 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" -version = "0.9.55" +version = "0.9.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" +checksum = "f02309a7f127000ed50594f0b50ecc69e7c654e16d41b4e8156d1b3df8e0b52e" dependencies = [ "autocfg 1.0.0", "cc", @@ -2174,9 +2035,9 @@ dependencies = [ [[package]] name = "paste" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3c897744f63f34f7ae3a024d9162bb5001f4ad661dd24bea0dc9f075d2de1c6" +checksum = "0a229b1c58c692edcaa5b9b0948084f130f55d2dcc15b02fcc5340b2b4521476" dependencies = [ "paste-impl", "proc-macro-hack", @@ -2184,14 +2045,14 @@ dependencies = [ [[package]] name = "paste-impl" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fd6f92e3594f2dd7b3fc23e42d82e292f7bcda6d8e5dcd167072327234ab89" +checksum = "2e0bf239e447e67ff6d16a8bb5e4d4bd2343acf5066061c0e8e06ac5ba8ca68c" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -2224,29 +2085,29 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f6a7f5eee6292c559c793430c55c00aea9d3b3d1905e855806ca4d7253426a2" +checksum = "82c3bfbfb5bb42f99498c7234bbd768c220eb0cea6818259d0d18a1aa3d2595d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8988430ce790d8682672117bc06dda364c0be32d3abd738234f19f3240bad99a" +checksum = "ccbf6449dcfb18562c015526b085b8df1aa3cdab180af8ec2ebd300a3bd28f63" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] name = "pin-project-lite" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" +checksum = "f7505eeebd78492e0f6108f7171c4948dbb120ee8119d9d77d0afa5469bef67f" [[package]] name = "pin-utils" @@ -2260,6 +2121,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "ppv-lite86" version = "0.2.6" @@ -2298,18 +2165,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be91bcc43e73799dc46a6c194a55e7aae1d86cc867c860fd4a436019af21bd8c" -[[package]] -name = "pretty_env_logger" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed8d1e63042e889b85228620629b51c011d380eed2c7e0015f8a644def280c28" -dependencies = [ - "ansi_term", - "chrono", - "env_logger 0.5.13", - "log 0.4.8", -] - [[package]] name = "proc-macro-crate" version = "0.1.4" @@ -2342,9 +2197,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" +checksum = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" dependencies = [ "unicode-xid 0.2.0", ] @@ -2355,12 +2210,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quote" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" - [[package]] name = "quote" version = "0.6.13" @@ -2376,7 +2225,7 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49d77c41ca8767f2f41394c11a4eebccab83da25e7cc035387a3125f02be90a3" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", ] [[package]] @@ -2652,7 +2501,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "time", - "tokio 0.2.19", + "tokio 0.2.20", "tokio-rustls", "url 2.1.1", "wasm-bindgen", @@ -2792,6 +2641,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scroll" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb2332cb595d33f7edd5700f4cbf94892e680c7f0ae56adab58a35190b66cb1" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8584eea9b9ff42825b46faf46a8c24d2cff13ec152fa2a50df788b87c07ee28" +dependencies = [ + "proc-macro2 1.0.12", + "quote 1.0.1", + "syn 1.0.19", +] + [[package]] name = "sct" version = "0.6.0" @@ -2804,9 +2673,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f331b9025654145cd425b9ded0caf8f5ae0df80d418b326e2dc1c3dc5eb0620" +checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" dependencies = [ "bitflags", "core-foundation", @@ -2851,9 +2720,9 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325a073952621257820e7a3469f55ba4726d8b28657e7e36653d1c36dc2c84ae" +checksum = "3bf487fbf5c6239d7ea2ff8b10cb6b811cd4b5080d1c2aeed1dec18753c06e10" dependencies = [ "serde", ] @@ -2864,9 +2733,9 @@ version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -2921,9 +2790,9 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d08338d8024b227c62bd68a12c7c9883f5c66780abaef15c550dc56f46ee6515" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -2932,8 +2801,8 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] @@ -2944,26 +2813,14 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" -[[package]] -name = "sha2" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" -dependencies = [ - "block-buffer 0.3.3", - "byte-tools 0.2.0", - "digest 0.7.6", - "fake-simd", -] - [[package]] name = "sha2" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] @@ -2976,9 +2833,9 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "signal-hook" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b9f3a1686a29f53cfd91ee5e3db3c12313ec02d33765f02c1a9645a1811e2c" +checksum = "7c0893246f276ba1aac4983fb8711dad108e2886fd76bf618a382ab4e30e5bec" dependencies = [ "libc", "signal-hook-registry", @@ -3125,10 +2982,10 @@ name = "solana-bench-exchange" version = "1.1.11" dependencies = [ "clap", - "itertools 0.9.0", + "itertools", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "rand 0.7.3", "rayon", "serde_json", @@ -3193,7 +3050,8 @@ dependencies = [ "libc", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", + "rand 0.7.3", "solana-logger", "solana-sdk", "solana_rbpf", @@ -3208,7 +3066,7 @@ dependencies = [ "hex", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-sdk", @@ -3222,7 +3080,7 @@ dependencies = [ "chrono", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-runtime", @@ -3296,7 +3154,7 @@ dependencies = [ "humantime 2.0.0", "indicatif", "log 0.4.8", - "num-traits 0.2.11", + "num-traits", "pretty-hex", "reqwest", "serde", @@ -3390,7 +3248,7 @@ dependencies = [ "flate2", "fs_extra", "indexmap", - "itertools 0.9.0", + "itertools", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", @@ -3399,7 +3257,7 @@ dependencies = [ "jsonrpc-ws-server", "log 0.4.8", "matches", - "num-traits 0.2.11", + "num-traits", "num_cpus", "rand 0.7.3", "rand_chacha 0.2.2", @@ -3462,7 +3320,7 @@ dependencies = [ "reqwest", "serde", "syn 0.15.44", - "syn 1.0.18", + "syn 1.0.19", "tokio 0.1.22", "winapi 0.3.8", ] @@ -3503,7 +3361,7 @@ dependencies = [ "bincode", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-logger", @@ -3544,7 +3402,7 @@ dependencies = [ name = "solana-genesis" version = "1.1.11" dependencies = [ - "base64 0.12.0", + "base64 0.12.1", "chrono", "clap", "serde", @@ -3647,7 +3505,7 @@ dependencies = [ "dir-diff", "ed25519-dalek", "fs_extra", - "itertools 0.9.0", + "itertools", "lazy_static", "libc", "log 0.4.8", @@ -3660,7 +3518,7 @@ dependencies = [ "rocksdb", "serde", "serde_bytes", - "sha2 0.8.1", + "sha2", "solana-budget-program", "solana-genesis-programs", "solana-logger", @@ -3708,7 +3566,7 @@ name = "solana-local-cluster" version = "1.1.11" dependencies = [ "assert_matches", - "itertools 0.9.0", + "itertools", "log 0.4.8", "rand 0.7.3", "serial_test", @@ -3749,7 +3607,7 @@ dependencies = [ name = "solana-logger" version = "1.1.11" dependencies = [ - "env_logger 0.7.1", + "env_logger", "lazy_static", "log 0.4.8", ] @@ -3778,7 +3636,7 @@ dependencies = [ name = "solana-metrics" version = "1.1.11" dependencies = [ - "env_logger 0.7.1", + "env_logger", "gethostname", "lazy_static", "log 0.4.8", @@ -3835,7 +3693,7 @@ version = "1.1.11" dependencies = [ "bincode", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "solana-runtime", "solana-sdk", "thiserror", @@ -3906,14 +3764,14 @@ dependencies = [ "byteorder", "fnv", "fs_extra", - "itertools 0.9.0", + "itertools", "lazy_static", "libc", "libloading", "log 0.4.8", "memmap", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "num_cpus", "rand 0.7.3", "rayon", @@ -3956,11 +3814,11 @@ dependencies = [ "generic-array 0.13.2", "hex", "hmac", - "itertools 0.9.0", + "itertools", "log 0.4.8", "memmap", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "pbkdf2", "rand 0.7.3", "rand_chacha 0.2.2", @@ -3968,7 +3826,7 @@ dependencies = [ "serde_bytes", "serde_derive", "serde_json", - "sha2 0.8.1", + "sha2", "solana-crate-features", "solana-logger", "solana-sdk-macro", @@ -3995,9 +3853,9 @@ name = "solana-sdk-macro" version = "1.1.11" dependencies = [ "bs58", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -4045,7 +3903,7 @@ dependencies = [ "bincode", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-config-program", @@ -4064,7 +3922,7 @@ dependencies = [ "bincode", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "rand 0.7.3", "serde", "serde_derive", @@ -4156,7 +4014,7 @@ dependencies = [ "bincode", "chrono", "num-derive 0.2.5", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-config-program", @@ -4172,7 +4030,7 @@ dependencies = [ "bincode", "log 0.4.8", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-metrics", @@ -4217,17 +4075,18 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6bee545321a2fed2f9a24066bf7bf08f9b814fd48865b7c629ee40f33f3207" +checksum = "e7baa2550500e75413f031f239fe0c4da2d477ae1b1ff7cb671eba483f963d91" dependencies = [ "byteorder", "combine", - "elfkit", + "goblin", "hash32", "libc", "log 0.4.8", - "num-traits 0.2.11", + "rand 0.7.3", + "scroll", "thiserror", "time", ] @@ -4271,17 +4130,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" -[[package]] -name = "syn" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -dependencies = [ - "quote 0.3.15", - "synom", - "unicode-xid 0.0.4", -] - [[package]] name = "syn" version = "0.15.44" @@ -4295,33 +4143,24 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213" +checksum = "e8e5aa70697bb26ee62214ae3288465ecec0000f05182f039b477001f08f5ae7" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", "unicode-xid 0.2.0", ] -[[package]] -name = "synom" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -dependencies = [ - "unicode-xid 0.0.4", -] - [[package]] name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", "unicode-xid 0.2.0", ] @@ -4441,9 +4280,9 @@ version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f34e0c1caaa462fd840ec6b768946ea1e7842620d94fe29d5b847138f521269" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", ] [[package]] @@ -4483,7 +4322,7 @@ dependencies = [ "pbkdf2", "rand 0.7.3", "rustc-hash", - "sha2 0.8.1", + "sha2", "unicode-normalization", ] @@ -4513,9 +4352,9 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9c43f1bb96970e153bcbae39a65e249ccb942bd9d36dbdf086024920417c9c" +checksum = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1" dependencies = [ "bytes 0.5.4", "fnv", @@ -4620,7 +4459,7 @@ checksum = "4adb8b3e5f86b707f1b54e7c15b6de52617a823608ccda98a15d3a24222f265a" dependencies = [ "futures-core", "rustls", - "tokio 0.2.19", + "tokio 0.2.20", "webpki", ] @@ -4732,7 +4571,7 @@ dependencies = [ "futures-sink", "log 0.4.8", "pin-project-lite", - "tokio 0.2.19", + "tokio 0.2.20", ] [[package]] @@ -4851,12 +4690,6 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" -[[package]] -name = "unicode-xid" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" - [[package]] name = "unicode-xid" version = "0.1.0" @@ -4929,9 +4762,9 @@ checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" [[package]] name = "vec_map" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" @@ -5000,9 +4833,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" +checksum = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" dependencies = [ "cfg-if", "serde", @@ -5012,24 +4845,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd" +checksum = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" dependencies = [ "bumpalo", "lazy_static", "log 0.4.8", - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7add542ea1ac7fdaa9dc25e031a6af33b7d63376292bd24140c637d00d1c312a" +checksum = "8a369c5e1dfb7569e14d62af4da642a3cbc2f9a3652fe586e26ac22222aa4b04" dependencies = [ "cfg-if", "js-sys", @@ -5039,9 +4872,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" +checksum = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" dependencies = [ "quote 1.0.1", "wasm-bindgen-macro-support", @@ -5049,28 +4882,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" +checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" dependencies = [ - "proc-macro2 1.0.10", + "proc-macro2 1.0.12", "quote 1.0.1", - "syn 1.0.18", + "syn 1.0.19", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" +checksum = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" [[package]] name = "web-sys" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb" +checksum = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 60bdfa5139..cd663ff7d3 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -9,30 +9,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ansi_term" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -dependencies = [ - "winapi 0.3.8", -] - -[[package]] -name = "ar" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579681b3fecd1e9d6b5ce6969e05f9feb913f296eddaf595be1166a5ca597bc4" -dependencies = [ - "byteorder 1.3.4", -] - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - [[package]] name = "ascii" version = "0.7.1" @@ -101,34 +77,12 @@ dependencies = [ "serde", ] -[[package]] -name = "bit-vec" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" - -[[package]] -name = "bit-vec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" - [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -[[package]] -name = "block-buffer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" -dependencies = [ - "arrayref", - "byte-tools 0.2.0", -] - [[package]] name = "block-buffer" version = "0.7.3" @@ -136,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ "block-padding", - "byte-tools 0.3.1", + "byte-tools", "byteorder 1.3.4", "generic-array 0.12.3", ] @@ -147,16 +101,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools 0.3.1", -] - -[[package]] -name = "bloom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00ac8e5056d6d65376a3c1aa5c7c34850d6949ace17f0266953a254eb3d6fe8" -dependencies = [ - "bit-vec 0.4.4", + "byte-tools", ] [[package]] @@ -181,12 +126,6 @@ dependencies = [ "serde", ] -[[package]] -name = "byte-tools" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" - [[package]] name = "byte-tools" version = "0.3.1" @@ -245,26 +184,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ "num-integer", - "num-traits 0.2.11", + "num-traits", "serde", "time", ] -[[package]] -name = "clap" -version = "2.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -dependencies = [ - "ansi_term", - "atty", - "bitflags", - "strsim", - "textwrap", - "unicode-width", - "vec_map", -] - [[package]] name = "clear_on_drop" version = "0.2.3" @@ -283,17 +207,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "colored" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" -dependencies = [ - "atty", - "lazy_static", - "winapi 0.3.8", -] - [[package]] name = "combine" version = "2.5.2" @@ -393,21 +306,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26778518a7f6cffa1d25a44b602b62b979bd88adb9e99ffec546998cf3404839" dependencies = [ "byteorder 1.3.4", - "digest 0.8.1", + "digest", "rand_core", "subtle 2.2.2", "zeroize", ] -[[package]] -name = "digest" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" -dependencies = [ - "generic-array 0.9.0", -] - [[package]] name = "digest" version = "0.8.1" @@ -433,7 +337,7 @@ dependencies = [ "curve25519-dalek", "rand", "serde", - "sha2 0.8.1", + "sha2", ] [[package]] @@ -451,33 +355,6 @@ dependencies = [ "byteorder 0.5.3", ] -[[package]] -name = "elfkit" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f182eda16a7360c80a2f8638d0726e9d5478173058f1505c42536ca666ecd2" -dependencies = [ - "ar", - "bit-vec 0.5.1", - "bitflags", - "bloom", - "byteorder 1.3.4", - "clap", - "colored", - "enum-primitive-derive", - "env_logger 0.5.13", - "fnv", - "glob", - "indexmap", - "itertools 0.7.11", - "log", - "num-traits 0.2.11", - "pretty_env_logger", - "rayon", - "sha2 0.7.1", - "tempfile", -] - [[package]] name = "encoding_rs" version = "0.8.22" @@ -487,30 +364,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-primitive-derive" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b90e520ec62c1864c8c78d637acbfe8baf5f63240f2fb8165b8325c07812dd" -dependencies = [ - "num-traits 0.1.43", - "quote 0.3.15", - "syn 0.11.11", -] - -[[package]] -name = "env_logger" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - [[package]] name = "env_logger" version = "0.7.1" @@ -654,15 +507,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.12.3" @@ -704,10 +548,15 @@ dependencies = [ ] [[package]] -name = "glob" -version = "0.2.11" +name = "goblin" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +checksum = "ddd5e3132801a1ac34ac53b97acde50c4685414dd2f291b9ea52afa6f07468c8" +dependencies = [ + "log", + "plain", + "scroll", +] [[package]] name = "h2" @@ -759,7 +608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" dependencies = [ "crypto-mac", - "digest 0.8.1", + "digest", ] [[package]] @@ -869,15 +718,6 @@ dependencies = [ "libc", ] -[[package]] -name = "itertools" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.9.0" @@ -1131,16 +971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ "autocfg", - "num-traits 0.2.11", -] - -[[package]] -name = "num-traits" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" -dependencies = [ - "num-traits 0.2.11", + "num-traits", ] [[package]] @@ -1270,24 +1101,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "ppv-lite86" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" -[[package]] -name = "pretty_env_logger" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed8d1e63042e889b85228620629b51c011d380eed2c7e0015f8a644def280c28" -dependencies = [ - "ansi_term", - "chrono", - "env_logger 0.5.13", - "log", -] - [[package]] name = "proc-macro-hack" version = "0.5.15" @@ -1324,12 +1149,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quote" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" - [[package]] name = "quote" version = "0.6.13" @@ -1569,6 +1388,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scroll" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb2332cb595d33f7edd5700f4cbf94892e680c7f0ae56adab58a35190b66cb1" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8584eea9b9ff42825b46faf46a8c24d2cff13ec152fa2a50df788b87c07ee28" +dependencies = [ + "proc-macro2 1.0.12", + "quote 1.0.4", + "syn 1.0.19", +] + [[package]] name = "sct" version = "0.6.0" @@ -1669,26 +1508,14 @@ dependencies = [ "url", ] -[[package]] -name = "sha2" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" -dependencies = [ - "block-buffer 0.3.3", - "byte-tools 0.2.0", - "digest 0.7.6", - "fake-simd", -] - [[package]] name = "sha2" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] @@ -1723,7 +1550,7 @@ dependencies = [ "libc", "log", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "solana-logger", "solana-sdk", "solana_rbpf", @@ -1792,7 +1619,7 @@ name = "solana-bpf-rust-error-handling" version = "1.1.11" dependencies = [ "num-derive 0.2.5", - "num-traits 0.2.11", + "num-traits", "solana-sdk", "solana-sdk-bpf-test", "thiserror", @@ -1911,7 +1738,7 @@ dependencies = [ name = "solana-logger" version = "1.1.11" dependencies = [ - "env_logger 0.7.1", + "env_logger", "lazy_static", "log", ] @@ -1931,7 +1758,7 @@ dependencies = [ name = "solana-metrics" version = "1.1.11" dependencies = [ - "env_logger 0.7.1", + "env_logger", "gethostname", "lazy_static", "log", @@ -1956,14 +1783,14 @@ dependencies = [ "byteorder 1.3.4", "fnv", "fs_extra", - "itertools 0.9.0", + "itertools", "lazy_static", "libc", "libloading", "log", "memmap", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "num_cpus", "rand", "rayon", @@ -1997,11 +1824,11 @@ dependencies = [ "generic-array 0.13.2", "hex", "hmac", - "itertools 0.9.0", + "itertools", "log", "memmap", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "pbkdf2", "rand", "rand_chacha", @@ -2009,7 +1836,7 @@ dependencies = [ "serde_bytes", "serde_derive", "serde_json", - "sha2 0.8.1", + "sha2", "solana-crate-features", "solana-logger", "solana-sdk-macro", @@ -2037,7 +1864,7 @@ dependencies = [ "bincode", "log", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-config-program", @@ -2054,7 +1881,7 @@ dependencies = [ "bincode", "log", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "rand", "serde", "serde_derive", @@ -2069,7 +1896,7 @@ dependencies = [ "bincode", "log", "num-derive 0.3.0", - "num-traits 0.2.11", + "num-traits", "serde", "serde_derive", "solana-metrics", @@ -2079,17 +1906,18 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6bee545321a2fed2f9a24066bf7bf08f9b814fd48865b7c629ee40f33f3207" +checksum = "e7baa2550500e75413f031f239fe0c4da2d477ae1b1ff7cb671eba483f963d91" dependencies = [ "byteorder 1.3.4", "combine", - "elfkit", + "goblin", "hash32", "libc", "log", - "num-traits 0.2.11", + "rand", + "scroll", "thiserror", "time", ] @@ -2100,12 +1928,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - [[package]] name = "subtle" version = "1.0.0" @@ -2118,17 +1940,6 @@ version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c65d530b10ccaeac294f349038a597e435b18fb456aadd0840a623f83b9e941" -[[package]] -name = "syn" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -dependencies = [ - "quote 0.3.15", - "synom", - "unicode-xid 0.0.4", -] - [[package]] name = "syn" version = "0.15.44" @@ -2151,15 +1962,6 @@ dependencies = [ "unicode-xid 0.2.0", ] -[[package]] -name = "synom" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -dependencies = [ - "unicode-xid 0.0.4", -] - [[package]] name = "synstructure" version = "0.12.3" @@ -2195,15 +1997,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "thiserror" version = "1.0.16" @@ -2514,18 +2307,6 @@ dependencies = [ "smallvec 1.4.0", ] -[[package]] -name = "unicode-width" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" - -[[package]] -name = "unicode-xid" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" - [[package]] name = "unicode-xid" version = "0.1.0" @@ -2555,12 +2336,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" version = "0.9.1" diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 7c3df3d615..c89080ac11 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -26,7 +26,7 @@ solana-bpf-loader-program = { path = "../bpf_loader", version = "1.1.11" } solana-logger = { path = "../../logger", version = "1.1.11" } solana-runtime = { path = "../../runtime", version = "1.1.11" } solana-sdk = { path = "../../sdk", version = "1.1.11" } -solana_rbpf = "=0.1.26" +solana_rbpf = "=0.1.27" [[bench]] name = "bpf_loader" diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 877e10489c..03a4f5d039 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -92,7 +92,7 @@ mod bpf { .native_instruction_processors .push(solana_bpf_loader_program!()); let bank = Arc::new(Bank::new(&genesis_config)); - // Create bank with specific slot, used by solana_bpf_rust_sysvar test + // Create bank with a specific slot, used by solana_bpf_rust_sysvar test let bank = Bank::new_from_parent(&bank, &Pubkey::default(), DEFAULT_SLOTS_PER_EPOCH + 1); let bank_client = BankClient::new(bank); diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 6593da8bf3..f7f9b3b63b 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -17,9 +17,12 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } solana-logger = { path = "../../logger", version = "1.1.11" } solana-sdk = { path = "../../sdk", version = "1.1.11" } -solana_rbpf = "=0.1.26" +solana_rbpf = "=0.1.27" thiserror = "1.0" +[dev-dependencies] +rand = "0.7.3" + [lib] crate-type = ["lib", "cdylib"] name = "solana_bpf_loader_program" diff --git a/programs/bpf_loader/src/allocator_bump.rs b/programs/bpf_loader/src/allocator_bump.rs index 1dcc521c5d..6820ccd22f 100644 --- a/programs/bpf_loader/src/allocator_bump.rs +++ b/programs/bpf_loader/src/allocator_bump.rs @@ -25,7 +25,7 @@ impl BPFAllocator { impl Alloc for BPFAllocator { fn alloc(&mut self, layout: Layout) -> Result { - if self.pos + layout.size() as u64 <= self.len { + if self.pos.saturating_add(layout.size() as u64) <= self.len { let addr = self.start + self.pos; self.pos += layout.size() as u64; Ok(addr) diff --git a/programs/bpf_loader/src/bpf_verifier.rs b/programs/bpf_loader/src/bpf_verifier.rs index 718300ef2b..eba9e602b5 100644 --- a/programs/bpf_loader/src/bpf_verifier.rs +++ b/programs/bpf_loader/src/bpf_verifier.rs @@ -2,36 +2,56 @@ use crate::BPFError; use solana_rbpf::ebpf; use thiserror::Error; +/// Error definitions #[derive(Debug, Error)] pub enum VerifierError { + /// ProgramLengthNotMultiple #[error("program length must be a multiple of {} octets", ebpf::INSN_SIZE)] ProgramLengthNotMultiple, + /// ProgramTooLarge #[error("program too big, max {}, is {}", ebpf::PROG_MAX_INSNS, .0)] ProgramTooLarge(usize), + /// NoProgram #[error("no program set, call prog_set() to load one")] NoProgram, #[error("division by 0 (insn #{0})")] DivisionByZero(usize), + /// UnsupportedLEBEArgument #[error("unsupported argument for LE/BE (insn #{0})")] UnsupportedLEBEArgument(usize), + /// LDDWCannotBeLast #[error("LD_DW instruction cannot be last in program")] LDDWCannotBeLast, + /// IncompleteLDDW #[error("incomplete LD_DW instruction (insn #{0})")] IncompleteLDDW(usize), + /// InfiniteLoop #[error("infinite loop (insn #{0})")] InfiniteLoop(usize), + /// JumpOutOfCode #[error("jump out of code to #{0} (insn #{1})")] JumpOutOfCode(usize, usize), + /// JumpToMiddleOfLDDW #[error("jump to middle of LD_DW at #{0} (insn #{1})")] JumpToMiddleOfLDDW(usize, usize), + /// InvalidSourceRegister #[error("invalid source register (insn #{0})")] InvalidSourceRegister(usize), + /// CannotWriteR10 #[error("cannot write into register r10 (insn #{0})")] CannotWriteR10(usize), + /// InvalidDestinationRegister #[error("invalid destination register (insn #{0})")] InvalidDestinationRegister(usize), + /// UnknownOpCode #[error("unknown eBPF opcode {0:#2x} (insn #{1:?})")] UnknownOpCode(u8, usize), + /// Shift with overflow + #[error("Shift with overflow at instruction {0}")] + ShiftWithOverflow(usize), + /// Invalid register specified + #[error("Invalid register specified at instruction {0}")] + InvalidRegister(usize), } fn check_prog_len(prog: &[u8]) -> Result<(), BPFError> { @@ -102,6 +122,23 @@ fn check_registers(insn: &ebpf::Insn, store: bool, insn_ptr: usize) -> Result<() } } +/// Check that the imm is a valid shift operand +fn check_imm_shift(insn: &ebpf::Insn, insn_ptr: usize) -> Result<(), VerifierError> { + if insn.imm < 0 || insn.imm as u64 >= 64 { + return Err(VerifierError::ShiftWithOverflow(insn_ptr)); + } + Ok(()) +} + +/// Check that the imm is a valid register number +fn check_imm_register(insn: &ebpf::Insn, insn_ptr: usize) -> Result<(), VerifierError> { + if insn.imm < 0 || insn.imm > 10 { + return Err(VerifierError::InvalidRegister(insn_ptr)); + } + Ok(()) +} + +#[rustfmt::skip] pub fn check(prog: &[u8]) -> Result<(), BPFError> { check_prog_len(prog)?; @@ -111,189 +148,126 @@ pub fn check(prog: &[u8]) -> Result<(), BPFError> { let mut store = false; match insn.opc { - // BPF_LD class - ebpf::LD_ABS_B => {} - ebpf::LD_ABS_H => {} - ebpf::LD_ABS_W => {} - ebpf::LD_ABS_DW => {} - ebpf::LD_IND_B => {} - ebpf::LD_IND_H => {} - ebpf::LD_IND_W => {} - ebpf::LD_IND_DW => {} - ebpf::LD_DW_IMM => { + // BPF_LD class + ebpf::LD_ABS_B => {}, + ebpf::LD_ABS_H => {}, + ebpf::LD_ABS_W => {}, + ebpf::LD_ABS_DW => {}, + ebpf::LD_IND_B => {}, + ebpf::LD_IND_H => {}, + ebpf::LD_IND_W => {}, + ebpf::LD_IND_DW => {}, + + ebpf::LD_DW_IMM => { store = true; check_load_dw(prog, insn_ptr)?; insn_ptr += 1; - } + }, // BPF_LDX class - ebpf::LD_B_REG => {} - ebpf::LD_H_REG => {} - ebpf::LD_W_REG => {} - ebpf::LD_DW_REG => {} + ebpf::LD_B_REG => {}, + ebpf::LD_H_REG => {}, + ebpf::LD_W_REG => {}, + ebpf::LD_DW_REG => {}, // BPF_ST class - ebpf::ST_B_IMM => store = true, - ebpf::ST_H_IMM => store = true, - ebpf::ST_W_IMM => store = true, - ebpf::ST_DW_IMM => store = true, + ebpf::ST_B_IMM => store = true, + ebpf::ST_H_IMM => store = true, + ebpf::ST_W_IMM => store = true, + ebpf::ST_DW_IMM => store = true, // BPF_STX class - ebpf::ST_B_REG => store = true, - ebpf::ST_H_REG => store = true, - ebpf::ST_W_REG => store = true, - ebpf::ST_DW_REG => store = true, - ebpf::ST_W_XADD => { - unimplemented!(); - } - ebpf::ST_DW_XADD => { - unimplemented!(); - } + ebpf::ST_B_REG => store = true, + ebpf::ST_H_REG => store = true, + ebpf::ST_W_REG => store = true, + ebpf::ST_DW_REG => store = true, // BPF_ALU class - ebpf::ADD32_IMM => {} - ebpf::ADD32_REG => {} - ebpf::SUB32_IMM => {} - ebpf::SUB32_REG => {} - ebpf::MUL32_IMM => {} - ebpf::MUL32_REG => {} - ebpf::DIV32_IMM => { - check_imm_nonzero(&insn, insn_ptr)?; - } - ebpf::DIV32_REG => {} - ebpf::OR32_IMM => {} - ebpf::OR32_REG => {} - ebpf::AND32_IMM => {} - ebpf::AND32_REG => {} - ebpf::LSH32_IMM => {} - ebpf::LSH32_REG => {} - ebpf::RSH32_IMM => {} - ebpf::RSH32_REG => {} - ebpf::NEG32 => {} - ebpf::MOD32_IMM => { - check_imm_nonzero(&insn, insn_ptr)?; - } - ebpf::MOD32_REG => {} - ebpf::XOR32_IMM => {} - ebpf::XOR32_REG => {} - ebpf::MOV32_IMM => {} - ebpf::MOV32_REG => {} - ebpf::ARSH32_IMM => {} - ebpf::ARSH32_REG => {} - ebpf::LE => { - check_imm_endian(&insn, insn_ptr)?; - } - ebpf::BE => { - check_imm_endian(&insn, insn_ptr)?; - } + ebpf::ADD32_IMM => {}, + ebpf::ADD32_REG => {}, + ebpf::SUB32_IMM => {}, + ebpf::SUB32_REG => {}, + ebpf::MUL32_IMM => {}, + ebpf::MUL32_REG => {}, + ebpf::DIV32_IMM => { check_imm_nonzero(&insn, insn_ptr)?; }, + ebpf::DIV32_REG => {}, + ebpf::OR32_IMM => {}, + ebpf::OR32_REG => {}, + ebpf::AND32_IMM => {}, + ebpf::AND32_REG => {}, + ebpf::LSH32_IMM => { check_imm_shift(&insn, insn_ptr)?; }, + ebpf::LSH32_REG => {}, + ebpf::RSH32_IMM => { check_imm_shift(&insn, insn_ptr)?; }, + ebpf::RSH32_REG => {}, + ebpf::NEG32 => {}, + ebpf::MOD32_IMM => { check_imm_nonzero(&insn, insn_ptr)?; }, + ebpf::MOD32_REG => {}, + ebpf::XOR32_IMM => {}, + ebpf::XOR32_REG => {}, + ebpf::MOV32_IMM => {}, + ebpf::MOV32_REG => {}, + ebpf::ARSH32_IMM => { check_imm_shift(&insn, insn_ptr)?; }, + ebpf::ARSH32_REG => {}, + ebpf::LE => { check_imm_endian(&insn, insn_ptr)?; }, + ebpf::BE => { check_imm_endian(&insn, insn_ptr)?; }, // BPF_ALU64 class - ebpf::ADD64_IMM => {} - ebpf::ADD64_REG => {} - ebpf::SUB64_IMM => {} - ebpf::SUB64_REG => {} - ebpf::MUL64_IMM => { - check_imm_nonzero(&insn, insn_ptr)?; - } - ebpf::MUL64_REG => {} - ebpf::DIV64_IMM => { - check_imm_nonzero(&insn, insn_ptr)?; - } - ebpf::DIV64_REG => {} - ebpf::OR64_IMM => {} - ebpf::OR64_REG => {} - ebpf::AND64_IMM => {} - ebpf::AND64_REG => {} - ebpf::LSH64_IMM => {} - ebpf::LSH64_REG => {} - ebpf::RSH64_IMM => {} - ebpf::RSH64_REG => {} - ebpf::NEG64 => {} - ebpf::MOD64_IMM => {} - ebpf::MOD64_REG => {} - ebpf::XOR64_IMM => {} - ebpf::XOR64_REG => {} - ebpf::MOV64_IMM => {} - ebpf::MOV64_REG => {} - ebpf::ARSH64_IMM => {} - ebpf::ARSH64_REG => {} + ebpf::ADD64_IMM => {}, + ebpf::ADD64_REG => {}, + ebpf::SUB64_IMM => {}, + ebpf::SUB64_REG => {}, + ebpf::MUL64_IMM => { check_imm_nonzero(&insn, insn_ptr)?; }, + ebpf::MUL64_REG => {}, + ebpf::DIV64_IMM => { check_imm_nonzero(&insn, insn_ptr)?; }, + ebpf::DIV64_REG => {}, + ebpf::OR64_IMM => {}, + ebpf::OR64_REG => {}, + ebpf::AND64_IMM => {}, + ebpf::AND64_REG => {}, + ebpf::LSH64_IMM => { check_imm_shift(&insn, insn_ptr)?; }, + ebpf::LSH64_REG => {}, + ebpf::RSH64_IMM => { check_imm_shift(&insn, insn_ptr)?; }, + ebpf::RSH64_REG => {}, + ebpf::NEG64 => {}, + ebpf::MOD64_IMM => { check_imm_nonzero(&insn, insn_ptr)?; }, + ebpf::MOD64_REG => {}, + ebpf::XOR64_IMM => {}, + ebpf::XOR64_REG => {}, + ebpf::MOV64_IMM => {}, + ebpf::MOV64_REG => {}, + ebpf::ARSH64_IMM => { check_imm_shift(&insn, insn_ptr)?; }, + ebpf::ARSH64_REG => {}, // BPF_JMP class - ebpf::JA => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JEQ_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JEQ_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JGT_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JGT_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JGE_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JGE_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JLT_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JLT_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JLE_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JLE_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSET_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSET_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JNE_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JNE_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSGT_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSGT_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSGE_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSGE_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSLT_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSLT_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSLE_IMM => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::JSLE_REG => { - check_jmp_offset(prog, insn_ptr)?; - } - ebpf::CALL_IMM => {} - ebpf::CALL_REG => {} - ebpf::EXIT => {} + ebpf::JA => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JEQ_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JEQ_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JGT_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JGT_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JGE_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JGE_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JLT_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JLT_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JLE_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JLE_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSET_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSET_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JNE_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JNE_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSGT_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSGT_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSGE_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSGE_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSLT_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSLT_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSLE_IMM => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::JSLE_REG => { check_jmp_offset(prog, insn_ptr)?; }, + ebpf::CALL_IMM => {}, + ebpf::CALL_REG => { check_imm_register(&insn, insn_ptr)?; }, + ebpf::EXIT => {}, - _ => { + _ => { return Err(VerifierError::UnknownOpCode(insn.opc, insn_ptr).into()); } } diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 56e3413619..b96c1371be 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -250,8 +250,9 @@ pub fn process_instruction( #[cfg(test)] mod tests { use super::*; + use rand::Rng; use solana_sdk::{account::Account, rent::Rent}; - use std::{fs::File, io::Read}; + use std::{fs::File, io::Read, ops::Range}; #[test] #[should_panic(expected = "ExceededMaxInstructions(10)")] @@ -416,4 +417,61 @@ mod tests { process_instruction(&bpf_loader::id(), &keyed_accounts, &vec![]) ); } + + /// fuzzing utility function + fn fuzz( + bytes: &[u8], + outer_iters: usize, + inner_iters: usize, + offset: Range, + value: Range, + work: F, + ) where + F: Fn(&mut [u8]), + { + let mut rng = rand::thread_rng(); + for _ in 0..outer_iters { + let mut mangled_bytes = bytes.to_vec(); + for _ in 0..inner_iters { + let offset = rng.gen_range(offset.start, offset.end); + let value = rng.gen_range(value.start, value.end); + mangled_bytes[offset] = value; + work(&mut mangled_bytes); + } + } + } + + #[test] + #[ignore] + fn test_fuzz() { + let program_id = Pubkey::new_rand(); + let program_key = Pubkey::new_rand(); + + // Create program account + let mut file = File::open("test_elfs/noop.so").expect("file open failed"); + let mut elf = Vec::new(); + file.read_to_end(&mut elf).unwrap(); + + info!("mangle the whole file"); + fuzz( + &elf, + 1_000_000_000, + 100, + 0..elf.len(), + 0..255, + |bytes: &mut [u8]| { + let program_account = Account::new_ref(1, 0, &program_id); + program_account.borrow_mut().data = bytes.to_vec(); + program_account.borrow_mut().executable = true; + + let parameter_account = Account::new_ref(1, 0, &program_id); + let keyed_accounts = vec![ + KeyedAccount::new(&program_key, false, &program_account), + KeyedAccount::new(&program_key, false, ¶meter_account), + ]; + + let _result = process_instruction(&bpf_loader::id(), &keyed_accounts, &vec![]); + }, + ); + } }