1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-13 12:58:20 +03:00

test: avoid NO_CAST.INTEGER_OVERFLOW in test-oomd-util (#30365)

The  `.mem_total` variable has `uint64_t` type, therefore, when multiplying the number
`20971512` by the number `1024` with the suffix `U`, we will not get the expected result of
`21,474,828,288`, since the number `20971512` without an explicit type indication has
`uint32_t` type.

First, multiplication will occur in accordance with the `uint32_t` type; this operation will
cause a **type overflow**, and only then will this result be assigned to a `uint64_t` type
variable.

It's worth adding the `UL` suffix to the number `20971512` to avoid **overflow**.

Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE.
Author A. Slepykh.

(cherry picked from commit a6f1551fe785e241e7c5534aa0c580b31a83a28b)
(cherry picked from commit 9ee5ab00e04078cf48d827ff13ca4d104b63b56f)
(cherry picked from commit 9a70c36a8655f3a95fb4a1665672a34776ecc4e7)
This commit is contained in:
aslepykh 2023-12-08 04:54:52 +03:00 committed by Luca Boccassi
parent 3a5f1bb3dd
commit 074e3784b8

View File

@ -291,19 +291,19 @@ static void test_oomd_pressure_above(void) {
static void test_oomd_mem_and_swap_free_below(void) {
OomdSystemContext ctx = (OomdSystemContext) {
.mem_total = 20971512 * 1024U,
.mem_used = 3310136 * 1024U,
.swap_total = 20971512 * 1024U,
.swap_used = 20971440 * 1024U,
.mem_total = UINT64_C(20971512) * 1024U,
.mem_used = UINT64_C(3310136) * 1024U,
.swap_total = UINT64_C(20971512) * 1024U,
.swap_used = UINT64_C(20971440) * 1024U,
};
assert_se(oomd_mem_available_below(&ctx, 2000) == false);
assert_se(oomd_swap_free_below(&ctx, 2000) == true);
ctx = (OomdSystemContext) {
.mem_total = 20971512 * 1024U,
.mem_used = 20971440 * 1024U,
.swap_total = 20971512 * 1024U,
.swap_used = 3310136 * 1024U,
.mem_total = UINT64_C(20971512) * 1024U,
.mem_used = UINT64_C(20971440) * 1024U,
.swap_total = UINT64_C(20971512) * 1024U,
.swap_used = UINT64_C(3310136) * 1024U,
};
assert_se(oomd_mem_available_below(&ctx, 2000) == true);
assert_se(oomd_swap_free_below(&ctx, 2000) == false);