Re: [RFC PATCH v2 3/4] liveupdate: Replace compatibility string with a 2-bit pair feature header
From: David Matlack
Date: Wed Oct 21 2026 - 14:48:09 EST
On Wed, Oct 21, 2026 at 11:40 AM <tarunsahu@xxxxxxxxxx> wrote:
>
> Pasha Tatashin <pasha.tatashin@xxxxxxxxxx> writes:
>
> > On Wed, Oct 21, 2026 at 11:25 AM Tarun Sahu <tarunsahu@xxxxxxxxxx> wrote:
> >>
> >> LUO and its file handlers validate handed-over state with monolithic
> >> compatibility strings ("luo-v5", "memfd-v2"). Any change to a serialized
> >> structure, even an optional additive one, must bump the string, which
> >> breaks live update between adjacent kernels. Replace the string in
> >> struct luo_ser with a feature header, so that the target kernel can
> >> accept or reject the source kernel state per feature.
> >>
> >> struct luo_feature_hdr is a fixed 128-byte header: the serialized
> >
> > This patch is all wrong; 128 bytes is far too large. For every _ser
> > struct, we only need 8 bytes instead.
>
> NOO, It is not. It is intended to avoid complex mess with unnecessary
> over-engineering.
>
> >
> > The first 4 bytes are the size, and the next 4 bytes are flags (i.e.,
> > 30 feature flags + 2 reserved bits for flags extension). The last two
> > bits of the flags indicate whether an extended flags field is present.
> > Each extended flags field is 8 bytes, and its last two bits indicate
> > that yet another extended flags field follows.
>
> If we will have dynamic extension of flags, Think about this.
To support dynamic extensions in a backward compatible way you want
something like this:
struct luo_feature_hdr {
size
flags
extensions // offset of first luo_feature_extensions (or 0)
}
struct luo_feature_extentions {
flags
extensions // offset of next luo_feature_extensions (or 0)
}
And then an example serialization struct would be:
struct foo_ser {
struct luo_feature_hdr header;
... fields ...
struct luo_feature_extension extensions1;
... fields ...
struct luo_feature_extension extensions2;
}