On Wed, Nov 07, 2018 at 06:57:39PM -0500, John Ferlan wrote: > From: Peter Chubb <[email protected]> > > Commit 901d2b9c introduced virCgroupGetMemoryStat and replaced > the LXC virLXCCgroupGetMemStat logic in commit e634c7cd0. However, > in doing so the replacement wasn't exact as the LXC logic used > getline() to process the cgroup controller data, while the new > virCgroupGetMemoryStat used "memory.stat" manual buffer read/ > processing which neglected to forward through @line in order > to read each line in the output. > > To fix that, we should be sure to carry forward the @line value > for each line read updating it beyond that current @newLine value > once we've calculated the values that we want. > > Signed-off-by: John Ferlan <[email protected]> > --- > src/util/vircgroupv1.c | 7 ++++++- > src/util/vircgroupv2.c | 7 ++++++- > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c > index 28a74474ee..678ffda35c 100644 > --- a/src/util/vircgroupv1.c > +++ b/src/util/vircgroupv1.c > @@ -1476,7 +1476,7 @@ virCgroupV1GetMemoryStat(virCgroupPtr group, > > line = stat; > > - while (line) { > + while (line && *line) {
There is no need to check line, it cannot be NULL.
> char *newLine = strchr(line, '\n');
> char *valueStr = strchr(line, ' ');
> unsigned long long value;
> @@ -1506,6 +1506,11 @@ virCgroupV1GetMemoryStat(virCgroupPtr group,
> inactiveFileVal = value >> 10;
> else if (STREQ(line, "unevictable"))
> unevictableVal = value >> 10;
> +
> + if (newLine)
> + line = newLine + 1;
> + else
> + break;
> }
>
> *cache = cacheVal;
> diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
> index 32adb06784..541e8e790e 100644
> --- a/src/util/vircgroupv2.c
> +++ b/src/util/vircgroupv2.c
> @@ -1068,7 +1068,7 @@ virCgroupV2GetMemoryStat(virCgroupPtr group,
>
> line = stat;
>
> - while (line) {
> + while (line && *line) {
Same here.
> char *newLine = strchr(line, '\n');
> char *valueStr = strchr(line, ' ');
> unsigned long long value;
> @@ -1102,6 +1102,11 @@ virCgroupV2GetMemoryStat(virCgroupPtr group,
> inactiveFileVal = value >> 10;
> else if (STREQ(line, "unevictable"))
> unevictableVal = value >> 10;
> +
> + if (newLine)
> + line = newLine + 1;
> + else
> + break;
> }
>
> *cache = cacheVal;
> --
Reviewed-by: Pavel Hrdina <[email protected]>
signature.asc
Description: PGP signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
