]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ask-password-api: fix error handling on invalid unicode character
authorKevin Backhouse <securitylab@github.com>
Fri, 12 Mar 2021 17:00:56 +0000 (18:00 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 12 Mar 2021 17:25:58 +0000 (18:25 +0100)
The integer overflow happens when utf8_encoded_valid_unichar() returns an error
code. The error code is a negative number: -22. This overflows when it is
assigned to `z` (type `size_t`). This can cause an infinite loop if the value
of `q` is 22 or larger.

To reproduce the bug, you need to run `systemd-ask-password` and enter an
invalid unicode character, followed by a backspace character.

GHSL-2021-052

src/shared/ask-password-api.c

index 9aad834ee28ab5e72bd1b1b6ffdb77519009cc54..729aa1fb00a20ec4ab7c522f87853fa304cd58f2 100644 (file)
@@ -581,10 +581,10 @@ int ask_password_tty(
                                  * last one begins */
                                 q = 0;
                                 for (;;) {
-                                        size_t z;
+                                        int z;
 
                                         z = utf8_encoded_valid_unichar(passphrase + q, SIZE_MAX);
-                                        if (z == 0) {
+                                        if (z <= 0) {
                                                 q = SIZE_MAX; /* Invalid UTF8! */
                                                 break;
                                         }