[PATCH 1/4] util: Parse RSS into ullp

Michal Prívozník mprivozn at redhat.com
Mon Jun 12 08:25:26 UTC 2023


On 6/12/23 09:55, Martin Kletzander wrote:
> It is used to fill an unsigned long long anyway and if it is negative
> than there is really an issue somewhere.
> 
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  src/qemu/qemu_driver.c |  2 +-
>  src/util/virprocess.c  | 17 ++++++++++-------
>  src/util/virprocess.h  |  2 +-
>  3 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 56f4cd619715..857fbfb7992c 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -9937,7 +9937,7 @@ qemuDomainMemoryStatsInternal(virDomainObj *vm,
>  
>  {
>      int ret = -1;
> -    long rss;
> +    unsigned long long rss;
>  
>      if (virDomainObjCheckActive(vm) < 0)
>          return -1;
> diff --git a/src/util/virprocess.c b/src/util/virprocess.c
> index d12fe4f7171f..a9f249413ce1 100644
> --- a/src/util/virprocess.c
> +++ b/src/util/virprocess.c
> @@ -23,6 +23,7 @@
>  #include <config.h>
>  
>  #include <fcntl.h>
> +#include <limits.h>
>  #include <signal.h>
>  #ifndef WIN32
>  # include <sys/wait.h>
> @@ -1739,7 +1740,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime,
>                        unsigned long long *userTime,
>                        unsigned long long *sysTime,
>                        int *lastCpu,
> -                      long *vm_rss,
> +                      unsigned long long *vm_rss,
>                        pid_t pid,
>                        pid_t tid)
>  {
> @@ -1748,14 +1749,16 @@ virProcessGetStatInfo(unsigned long long *cpuTime,
>      unsigned long long stime = 0;
>      const unsigned long long jiff2nsec = 1000ull * 1000ull * 1000ull /
>                                           (unsigned long long) sysconf(_SC_CLK_TCK);
> -    long rss = 0;
> +    long pagesize = virGetSystemPageSizeKB();

const please. We don't really want anybody change this value.

> +    unsigned long long rss = 0;
>      int cpu = 0;
>  
>      if (!proc_stat ||
>          virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_UTIME], NULL, 10, &utime) < 0 ||
>          virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_STIME], NULL, 10, &stime) < 0 ||
> -        virStrToLong_l(proc_stat[VIR_PROCESS_STAT_RSS], NULL, 10, &rss) < 0 ||
> -        virStrToLong_i(proc_stat[VIR_PROCESS_STAT_PROCESSOR], NULL, 10, &cpu) < 0) {
> +        virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_RSS], NULL, 10, &rss) < 0 ||
> +        virStrToLong_i(proc_stat[VIR_PROCESS_STAT_PROCESSOR], NULL, 10, &cpu) < 0 ||
> +        rss > ULLONG_MAX / pagesize) {
>          VIR_WARN("cannot parse process status data");
>      }
>  

Michal



More information about the libvir-list mailing list