Posts
4940
Following
327
Followers
492
Linux kernel hacker and maintainer etc.

OpenPGP: 3AB05486C7752FE1

Jarkko Sakkinen

Edited 2 months ago
yay, the most complex macros, tpm_enum! and tpm_struct! have been converted to the parallel universum:

https://git.kernel.org/pub/scm/linux/kernel/git/jarkko/tpm2-protocol.git/commit/?id=4f48396e0df888ee6a5e8a2df92d71cfc05d26d8

After this it is downhill.

I'm doing this like an idiot, i.e. learning as I bump e.g., up until yesterday I was not even aware of Ref and Deref trait :-)
0
0
0

Jarkko Sakkinen

Edited 2 months ago

awesome “cast” version of tpm_enum!:

tpm_enum_cast! {
    name: TpmRcBaseCast,
    repr: TpmUint32,
    value_enum: TpmRcBaseEnumCast,
    value_repr: u32,
    variants: {
        (Success, 0x0000, "TPM_RC_SUCCESS"),
        (BadTag, 0x001E, "TPM_RC_BAD_TAG"),
        (Initialize, TPM_RC_VER1, "TPM_RC_INITIALIZE"),
        (Failure, TPM_RC_VER1 | 0x001, "TPM_RC_FAILURE"),
 // ...
0
0
0

Jarkko Sakkinen

I think zerocopy semantics goes to the level of implementation that using 3rd party crate like Google's "zerocopy" is essentially a PoC quality solution.

I could implement e.g. tpm2-protocol by using that as dependency but never could reach optimal results for the underlying data.
0
0
0

Jarkko Sakkinen

Edited 2 months ago

And this is how it works:

let (ref, tail) = TpmsClockInfoCast::from_slice(bytes);
let TpmsClockInfoFieldRef::clock(clock) = ref.field(TpmsClockInfoField::clock).unwrap()
0
0
0

Jarkko Sakkinen

Edited 2 months ago

Cast version TPM structures starts to shape:

use crate::{tpm_struct_cast, TpmUint32, TpmUint64, TpmUint8};

tpm_struct_cast! {
    name: TpmsClockInfoCast,
    field_enum: TpmsClockInfoField,
    field_ref_enum: TpmsClockInfoFieldRef,
    fields: {
        (pub clock: TpmUint64<'a>),
        (pub reset_count: TpmUint32<'a>),
        (pub restart_count: TpmUint32<'a>),
        (pub safe: TpmUint8<'a>),
    }
}

And after migration is completed:

use crate::{tpm_struct_cast, TpmUint32, TpmUint64, TpmUint8};

tpm_struct! {
    name: TpmsClockInfo,
    field_enum: TpmsClockInfoField,
    field_ref_enum: TpmsClockInfoFieldRef,
    fields: {
        (pub clock: TpmUint64<'a>),
        (pub reset_count: TpmUint32<'a>),
        (pub restart_count: TpmUint32<'a>),
        (pub safe: TpmUint8<'a>),
    }
}
1
0
0
8 KSLOC for 0.10.x branch. It would need like 100 KSLOC in C

0.11 based on smart pointer type of concept will be like 2 KSLOC less or similar figures once I finish it.
0
0
1

Jarkko Sakkinen

If you are C programmer and hate Rust, I'd give a shot on binary protocols. It's really objectively where Rust shines as you can easily go down to single bit level in granularity. I could never have implemented tpm2-protocol in C or even C++, it's simply out of the territory. This project has been for me like "OK, I can cope with this" type of project.
1
0
1
super hooked into refining this type of execution flow, way too much time spent on this lol
0
0
0

Jarkko Sakkinen

making sense of shit now definitely:

https://git.kernel.org/pub/scm/linux/kernel/git/jarkko/tpm2-protocol.git/commit/?id=a0f2b3b7f70f6d1151a85c1fadaac5f181e09d91

I'm just learning Rust while doing, really discovered Deref and DerefMut while doing this transformation.
1
0
0
@cos Great remark ;-) Not swearing this but I recall that ext2 driver could read ext4, it's just the journal part it cannot understand.
0
0
0

Jarkko Sakkinen

My favorite filesystems:

1. Ext4
2. FAT (and its various upgrades)

There's no operating system that could not read them I'm aware of.

Within last 20 years I've never had a situation where I'm in trouble because my machine does not have "advanced filesystem" :-) And basing backup strategy to local snapshots, well good luck with that. I have NAS.
2
0
0
@lkundrak yep exactly ;-) keep calm, carry on and worship satan
0
0
0
@lkundrak ok except for zmodem i'm working on "bcachefs of zmodem implementations": https://codeberg.org/jarkko/zmodem2

:-)

i might continue from that to a replacement of https://en.wikipedia.org/wiki/SMODEM, which is the competitor to the pre-existing MS-DOS version of the protocol.
1
0
0
@lkundrak yeah, i satisfy with modest stuff like that :-) i like most of the time sofware to do that does not exist rather than replacement for software that already exist. kent can do the god mode replacement afterwards
1
0
0
@lkundrak sounds like it's for smarter people than me, i would not pass the IQ test to become a legit power user of bcachefs ;-) what can you do if you're born as an idiot.
1
0
1
@lkundrak for this i chose rust because google made some nice tools for the dislayout itself: https://github.com/google/gpt-disk-rs

I was able to write a rus program that generates ESP+rootfs GPT partition layout to an image and then it with mkfs.ext4 and mkfs.fat generates partition slices of same size which I rewrite to the apprpriate slots.
0
0
1
@lkundrak i know the name "kent overstreet" and "bcachefs". i've read about those from various geek yellow page media outlets ;-) that's really all i know about that topic
1
0
1

Jarkko Sakkinen

Edited 2 months ago
@lkundrak i don't think i have any systems yet that would even use btrfs yet because ext4 has well umh worked :D love it
0
0
0
Show older