]> 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 17:17:42 +0000 (18:17 +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)
(cherry picked from commit e2c9fdd5c0f84eb234e122fe8fce9c4d949882cd)

src/network/tc/htb.c

index eb2c8cfff4cd14ee415a923261bf4c6c713733da..7b0901653f07dc5518eb414f8cdb2317ab3eaeb9 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)