[libvirt] [PATCH v2 1/2] util: Check if kernel-provided info is consistent with itself
Peter Krempa
pkrempa at redhat.com
Mon Feb 5 10:14:58 UTC 2018
On Mon, Feb 05, 2018 at 10:37:25 +0100, Martin Kletzander wrote:
> On Fri, Feb 02, 2018 at 06:02:22PM +0100, Peter Krempa wrote:
> > On Fri, Feb 02, 2018 at 15:27:21 +0100, Martin Kletzander wrote:
> > > Just in case someone re-mounted /sys/fs/resctrl with different mount
> > > options (cdp), add a check here.
> > >
> > > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1540780
> > >
> > > Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> > > ---
> > > src/util/virresctrl.c | 11 +++++++++++
> > > 1 file changed, 11 insertions(+)
> > >
> > > diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c
> > > index ef388757a704..6860e86e649d 100644
> > > --- a/src/util/virresctrl.c
> > > +++ b/src/util/virresctrl.c
> > > @@ -941,6 +941,17 @@ virResctrlAllocParseProcessCache(virResctrlInfoPtr resctrl,
> > > if (!mask)
> > > return -1;
> > >
> > > + if (!resctrl ||
> > > + level >= resctrl->nlevels ||
> > > + !resctrl->levels[level] ||
> > > + !resctrl->levels[level]->types[type]) {
> >
> > The only caller of this function checks the range of type by converting
> > it from string with 'virResctrlTypeFromString' but the type in this
> > function is 'virCacheType' and you use 'virCacheTypeToString'.
> >
> > Given the inconsistency and the fact that C will not validate the passed
> > type in this case you should also validate that 'type' has the correct
> > range.
> >
> > ACK with that check added.
>
> There are three "inconsistent" types, but they all use VIR_CACHE_TYPE_LAST in
> their VIR_ENUM_IMPL:
>
> - virResctrl - That's the naming we need to use when writing into resctrl schemata file
>
> - virCache - That's the naming that was decide upstream that we should use in our XML
>
> - virCacheKernel - That's what kernel uses when we read from cache info from sysfs
>
> I have no problem with adding one extra check here, but I think this is taken
> care of by the fact that they all use the same enum for the implementation. I
> can just extract the const char * fromt he error message before the check and
> just add `str != NULL` in the condition. I'll leave that choice up to you. I
> agree the code is not as nice as it could be and I'm already working on at least
> the minimal refactoring that needs tobe done, but in the meantime I'd like to
> have this working at least. The number of workarounds we need to make due to
> IMNSHO poor implementation of resctrl in kernel is sickening^Wtiring let's say.
>
> Just so we don't misunderstand each other, I'm not against any changes to that
> code. Feel free to suggest any other things that might be made better, I'm all
> for making this nicer. It's just that most of the time I couldn't find any
> nicer way to do some of these _suboptimal_ things.
Hmm, okay fair enough. Maybe just add a comment to the enum
implementations that they should all be terminated via VIR_CACHE_TYPE_LAST
since code depends on it.
It can definitely be separate in this case.
ACK to this patch as-is.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180205/ff018f0d/attachment-0001.sig>
More information about the libvir-list
mailing list