[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] Fix two problems in the microcode parsers
On 12.09.2024 23:11, Demi Marie Obenour wrote: > The microcode might come from a questionable source, so it is necessary > for the parsers to treat it as untrusted. The CPU will validate the > microcode before applying it, so loading microcode from unofficial > sources is actually a legitimate thing to do in some cases. Okay, this explains the background. But nothing is said about what's actually wrong with the code that's being changed. As to the subject: Please have it have a proper prefix. > --- a/xen/arch/x86/cpu/microcode/amd.c > +++ b/xen/arch/x86/cpu/microcode/amd.c > @@ -338,8 +338,7 @@ static struct microcode_patch *cf_check > cpu_request_microcode( > if ( size < sizeof(*et) || > (et = buf)->type != UCODE_EQUIV_CPU_TABLE_TYPE || > size - sizeof(*et) < et->len || > - et->len % sizeof(et->eq[0]) || > - et->eq[(et->len / sizeof(et->eq[0])) - 1].installed_cpu ) > + et->len % sizeof(et->eq[0]) ) > { > printk(XENLOG_ERR "microcode: Bad equivalent cpu table\n"); > error = -EINVAL; > @@ -365,7 +364,8 @@ static struct microcode_patch *cf_check > cpu_request_microcode( > if ( size < sizeof(*mc) || > (mc = buf)->type != UCODE_UCODE_TYPE || > size - sizeof(*mc) < mc->len || > - mc->len < sizeof(struct microcode_patch) ) > + mc->len < sizeof(struct microcode_patch) || > + mc->len % 4 != 0 ) What's this literal 4? Wants to be some alignof(), sizeof(), or alike imo. > --- a/xen/arch/x86/cpu/microcode/intel.c > +++ b/xen/arch/x86/cpu/microcode/intel.c > @@ -149,8 +149,8 @@ static int microcode_sanity_check(const struct > microcode_patch *patch) > { > const struct extended_sigtable *ext; > const uint32_t *ptr; > - unsigned int total_size = get_totalsize(patch); > - unsigned int data_size = get_datasize(patch); > + uint32_t total_size = get_totalsize(patch); > + uint32_t data_size = get_datasize(patch); I see no reason for moving in the wrong direction here, as far as ./CODING_STYLE goes. If this is truly needed,it needs justifying in the description. > @@ -159,7 +159,8 @@ static int microcode_sanity_check(const struct > microcode_patch *patch) > * must fit within it. > */ > if ( (total_size & 1023) || > - data_size > (total_size - MC_HEADER_SIZE) ) > + data_size > (total_size - MC_HEADER_SIZE) || > + (data_size % 4) != 0 ) See above as to the use of literal numbers. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |