]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nss-systemd: fix off-by-one in nss_pack_group_record_shadow()
authorMilan Kyselica <mil.kyselica@gmail.com>
Sat, 11 Apr 2026 08:31:16 +0000 (10:31 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sun, 12 Apr 2026 20:20:15 +0000 (21:20 +0100)
nss_count_strv() counts trailing NULL pointers in n. The pointer area
then used (n + 1), reserving one slot more than the size check
accounted for.

Drop the + 1 since n already includes the trailing NULLs, unlike the
non-shadow nss_pack_group_record() where n does not.

Fixes: https://github.com/systemd/systemd/issues/41591
src/nss-systemd/userdb-glue.c

index 6f1bf1e2af5c3ce298783a18bec479d01c76fd5f..5bc89d5f9bb6957593a9dca48fb665426d2edf62 100644 (file)
@@ -475,7 +475,9 @@ int nss_pack_group_record_shadow(
 
         assert(buffer);
 
-        p = buffer + sizeof(void*) * (n + 1); /* place member strings right after the ptr array */
+        /* n already includes trailing NULL pointers from nss_count_strv(), unlike the
+         * non-shadow nss_pack_group_record() where n does not include them. */
+        p = buffer + sizeof(void*) * n;
         array = (char**) buffer; /* place ptr array at beginning of buffer, under assumption buffer is aligned */
 
         sgrp->sg_mem = array;