]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: fix a potential divide-by-zero (#37705)
authorAlex <alexguo1023@gmail.com>
Mon, 2 Jun 2025 22:47:49 +0000 (18:47 -0400)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 25 Jun 2025 12:36:10 +0000 (13:36 +0100)
In function `tc_init`, hz is parsed from the content of file
`"/proc/net/psched"` and can be 0.
In function `hierarchy_token_bucket_class_verify`, hz is directly used
as a divisor in
`htb->buffer = htb->rate / hz + htb->mtu;` without any check. This adds a check on hz before using it as a divisor.

Co-authored-by: jinyaoguo <guo846@purdue.edu>
(cherry picked from commit 1a596054a0f937bfc244580f07510759a0e45657)

src/network/tc/htb.c

index 39f436a804d2a6df4cf8168d5725c6499219b29e..e1f6050cbc5f4c6514f36af5fbe31c11c99e5ba1 100644 (file)
@@ -470,6 +470,8 @@ static int hierarchy_token_bucket_class_verify(TClass *tclass) {
         if (r < 0)
                 return log_error_errno(r, "Failed to read /proc/net/psched: %m");
 
+        /* Kernel would never hand us 0 Hz. */
+        assert(hz > 0);
         if (htb->buffer == 0)
                 htb->buffer = htb->rate / hz + htb->mtu;
         if (htb->ceil_buffer == 0)