On Fri, Feb 11, 2022 at 11:32:45AM +0100, Jan Beulich wrote:
> On 11.02.2022 10:02, Roger Pau Monné wrote:
> > On Fri, Feb 11, 2022 at 08:23:27AM +0100, Norbert Manthey wrote:
> >> When re-identifying CPU data, we might use uninitialized data when
> >> checking for the cache line property to adapt the cache
> >> alignment. The data that depends on this uninitialized read is
> >> currently not forwarded.
> >>
> >> To avoid problems in the future, initialize the data cpuinfo
> >> structure before re-identifying the CPU again.
> >>
> >> The trace to hit the uninitialized read reported by Coverity is:
> >>
> >> bool recheck_cpu_features(unsigned int cpu)
> >> ...
> >>     struct cpuinfo_x86 c;
> >>     ...
> >>     identify_cpu(&c);
> >>
> >> void identify_cpu(struct cpuinfo_x86 *c)
> >> ...
> >>     generic_identify(c)
> >>
> >> static void generic_identify(struct cpuinfo_x86 *c)
> >> ...
> > 
> > Would it be more appropriate for generic_identify to also set
> > x86_cache_alignment like it's done in early_cpu_init?
> > 
> > generic_identify already re-fetches a bunch of stuff that's also
> > set by early_cpu_init for the BSP.
> 
> This would be an option, but how sure are you that there isn't
> (going to be) another field with similar properties? We better
> wouldn't require _everything_ to be re-filled in generic_identify().

So you think generic_identify should call into early_cpu_init, or even
split the cpuinfo_x86 filling done in early_cpu_init into a non-init
function that could be called by both generic_identify and
early_cpu_init?

Thanks, Roger.

Reply via email to