X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Futils.c;h=febd75c185ddd87c177f388dfb7ba464e44cbf5c;hb=d72eb77f6e7a272889ad0eace21da52ae483800e;hp=391e6d77e8da494375dd586ceb0815f91e4d8fba;hpb=4b082b1252f03d83e732102b97bb6115da5728ab;p=lttng-tools.git diff --git a/src/common/utils.c b/src/common/utils.c index 391e6d77e..febd75c18 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -2,11 +2,12 @@ * Copyright (C) 2012 David Goulet * Copyright (C) 2013 Jérémie Galarneau * - * SPDX-License-Identifier: GPL-2.0-only + * SPDX-License-Identifier: LGPL-2.1-only * */ #include "common/macros.h" +#include #define _LGPL_SOURCE #include #include @@ -1062,7 +1063,7 @@ end: } static -int read_proc_meminfo_field(const char *field, size_t *value) +int read_proc_meminfo_field(const char *field, uint64_t *value) { int ret; FILE *proc_meminfo; @@ -1080,10 +1081,10 @@ int read_proc_meminfo_field(const char *field, size_t *value) * field. */ while (!feof(proc_meminfo)) { - unsigned long value_kb; + uint64_t value_kb; ret = fscanf(proc_meminfo, - "%" MAX_NAME_LEN_SCANF_IS_A_BROKEN_API "s %lu kB\n", + "%" MAX_NAME_LEN_SCANF_IS_A_BROKEN_API "s %" SCNu64 " kB\n", name, &value_kb); if (ret == EOF) { /* @@ -1100,7 +1101,12 @@ int read_proc_meminfo_field(const char *field, size_t *value) * This number is displayed in kilo-bytes. Return the * number of bytes. */ - *value = ((size_t) value_kb) * 1024; + if (value_kb > UINT64_MAX / 1024) { + ERR("Overflow on kb to bytes conversion"); + break; + } + + *value = value_kb * 1024; ret = 0; goto found; } @@ -1120,7 +1126,7 @@ fopen_error: * a best guess. */ LTTNG_HIDDEN -int utils_get_memory_available(size_t *value) +int utils_get_memory_available(uint64_t *value) { return read_proc_meminfo_field(PROC_MEMINFO_MEMAVAILABLE_LINE, value); } @@ -1130,7 +1136,7 @@ int utils_get_memory_available(size_t *value) * the information in `/proc/meminfo`. */ LTTNG_HIDDEN -int utils_get_memory_total(size_t *value) +int utils_get_memory_total(uint64_t *value) { return read_proc_meminfo_field(PROC_MEMINFO_MEMTOTAL_LINE, value); }