nss-systemd: fix off-by-one in nss_pack_group_record_shadow()

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
This commit is contained in:
Milan Kyselica
2026-04-12 21:20:15 +01:00
committed by Luca Boccassi
parent 03fa2f8982
commit aa85a742fe
+3 -1
View 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;