Posts
4641
Following
318
Followers
484
Linux kernel hacker and maintainer etc.

OpenPGP: 3AB05486C7752FE1

Jarkko Sakkinen

i just added parser for i8 as tpm2_protocol was able to parse u8 only previously :-) at least the type granularity is working
0
0
0

Jarkko Sakkinen

my daughter had her first day at the local university hooray.

and she does not proactively hate me

biggest success in my life at least
1
0
2

Jarkko Sakkinen

Yet another post in the series of of C-senior and Rust-junior posts. I also expose this as group therapy sort of influencing reason i.e, perhaps there are kernel devs with some uncertainty when it comes to Rust.Thus, I expose mine :-)

I seem to do this two-step process a lot with Rust:

1. Refine the code for capability and implement that capability.
2. Decouple the capability from the (sub)crate.

E.g., in 0.7.0 I had reworked the whole code base so that lifetime-parameters would be relaxed and finally it was Any-compatible and I had dyn_eq and those shenanigans in the crate.

i.e., straight up the very first commit after tagging:

https://github.com/puavo-org/tpm2_library/commit/c704938ec64d31a1aaa1b88a3f686d5d25045c0b

I also felt ultimately stupid as I already had e.g. pretty_printer.rs that should have "showed me the way". Still I think it was worth it because of all bottlenecks the codebase had with lifetimes that I could not have noticed w/o first going way too far :-)

Pretty printer for reference: https://github.com/puavo-org/tpm2_library/blob/main/tpm2sh/src/pretty_printer.rs

In my Z-Modem crates next version I'm going to follow the learnings and make it walk and talk like some entity in futures/streams without being coupled to async and of course make it also zero deps:

https://codeberg.org/jarkko/zmodem2/commits/branch/main

I will demonstrate async-ready capability with refined versions of RZM and SZM. Then you can finally have ZModem in your next Tokio project :-)

#linux #rust #kernel
1
1
3

Jarkko Sakkinen

Edited 4 days ago
tpm2sh 0.8.0 with print-stack sink:
1
0
0

Jarkko Sakkinen

tpm2sh starts to look pretty good and has at least the features i want it to have for kernel testing.

tpm2_protocol is "kernel-ready" (including Box<dyn TpmObject>, which is essential for a driver uapi) and this the full list of commands it lacks for 100% TCG TPM 2.0 specification coverage:

https://github.com/puavo-org/tpm2_library/issues/4

I'm pretty much done with this project for the moment :-)
1
0
0

Jarkko Sakkinen

IMHO the thing in Rust and drivers is not memory safe per se or like "overflow check type of stuff".

It's the structural integrity check that levels up over C really. E.g. in C world I check that a TPM command holding buffer is not too large.

In Rust world I'll check in byte granularity that the data coming from user space and the chip is correct.
1
0
0

Jarkko Sakkinen

Edited 5 days ago
Do rustc eBPF branches unroll loops if they have const limit known by compiler?

I'm just thinking of theory of running tpm2_protocol inside eBPF filter i.e., is it possible and how much effort it would take it realize.

would be just a cool demo

it has lot of characteristics i.e. no-alloc (fully in-stack) and test program compiles without cargo with just rustc.

#linux #kernel #ebpf #rust #tpm
1
0
1

Jarkko Sakkinen

Edited 5 days ago
Conventions I'm converged on tpm2_protocol (for lib.rs):

//! * `alloc` is disallowed.
//! * Dependencies are disallowed.
//! * Developer dependencies are disallowed.
//! * Panics are disallowed.
0
0
0

Jarkko Sakkinen

Edited 5 days ago
the future of zmodem is async as I refined zmodem2 API as follows:

1. ZmodemSession holds the protocol state.
2. ZmodemEvent provides the interface for consuming next events.

I.e. it is to bind to the future (while being still decoupled from them). Also next version of protocol will be zero deps and can compile with rustc only.

#zmodem #rust
0
0
0

Jarkko Sakkinen

tpm2_protocol 0.6.1

0.6.0 and 0.6.1 are really the same, i just fucked up tpm2sh 0.6.0 so...

https://lore.kernel.org/tpm2/aKI-xQsBNNvjeBSk@kernel.org/T/#u
0
0
0

Jarkko Sakkinen

Edited 5 days ago
OK, learning Rust as I got but I was still missing Any implementation so here it is:

https://github.com/puavo-org/tpm2_library/commit/5066da1e529c2c6fc3667ae1e4f2be397836684b

This is a milestone commit given that the implementation is capable of empowering driver, which is a consequence of being able to dynamically interpret the protocol byte stream. I.e. starting from this commit ID it would it driver implementation ready.

It is proven by the test that builds a 100 element list of random objects, streams the list and parses from stream another list, and finally compares that the lists have equal amount of element and each element matches each other.

The test is here:

https://github.com/puavo-org/tpm2_library/blob/main/tpm2sh/tests/dynamic.rs
1
0
1

Jarkko Sakkinen

My favorite command-line parser for Rust:

https://github.com/blyxxyz/lexopt

I.e. it does not create command-line for you and you can fully control of the user experience.
1
0
0

Jarkko Sakkinen

still in progress but this will be a nice debugging feature:
1
0
0

Jarkko Sakkinen

Edited 7 days ago
I mean cli is a gui of one form and usuall guis are not sprayed to the source code

https://github.com/puavo-org/tpm2_library/commit/ddbce9387119c77b618988cd875dcbec812d7b96
1
0
0

Jarkko Sakkinen

I wonder if it either is or could be allowed kselftest to be written in Rust assuming that it requires only rustc and has at most std dependencies? Not talking a cargo build here.
1
0
0

Jarkko Sakkinen

Procedural macros in Rust:

- How to use them with plain rustc?
- Why they need to be in a lib crate?
0
0
0

Jarkko Sakkinen

Edited 7 days ago
The most important setting in fish shell:

set -g fish_autosuggestion_enabled 0

Fucking worst default in a shell that anyone has ever put to any shell (unless you are going epileptic seizure)
0
0
0

Jarkko Sakkinen

My tpm2_protocol crate could be useful also for e.g. some scenarios where you to format your crypto proofs in TPM2 structures wi/o having TPM.
0
0
0

Jarkko Sakkinen

Great, I've used before external crate for this:
https://doc.rust-lang.org/beta/std/io/trait.IsTerminal.html

Apparently std has had this for over two years already.
0
0
0
Show older