The branch stable/14 has been updated by asomers:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=3dc01440a064c95bc5f125acf7c0ef6acbb5c257

commit 3dc01440a064c95bc5f125acf7c0ef6acbb5c257
Author:     Alan Somers <asom...@freebsd.org>
AuthorDate: 2024-12-31 20:41:01 +0000
Commit:     Alan Somers <asom...@freebsd.org>
CommitDate: 2025-01-20 16:54:45 +0000

    Fix lib/libc/nss/getgr_test with large numbers of groups
    
    These tests create a linked list with one entry for every group on the
    running system.  On a system with about 30,000 groups, the test took 69
    seconds to run, and crashed Kyua with the below error:
    
    kyua: E: string or blob too big (sqlite op: sqlite3_bind_blob) (sqlite db: 
/root/.kyua/store/results.usr_tests.20241231-203317-570235.db).
    
    Fix the test by limiting it to operating on the first 1024 groups.
    Apply the same change to getpw_test and getserv_test too, which are
    vulnerable to the same problem.
    
    Sponsored by:   ConnectWise
    Reviewed by:    markj
    Differential Revision: https://reviews.freebsd.org/D48275
    
    (cherry picked from commit d11904b350214943dedb64c7121d4602799d7afd)
---
 lib/libc/tests/nss/getgr_test.c   | 4 ++++
 lib/libc/tests/nss/getpw_test.c   | 4 ++++
 lib/libc/tests/nss/getserv_test.c | 4 ++++
 3 files changed, 12 insertions(+)

diff --git a/lib/libc/tests/nss/getgr_test.c b/lib/libc/tests/nss/getgr_test.c
index 7c0e265fa6f6..974632d4b7c7 100644
--- a/lib/libc/tests/nss/getgr_test.c
+++ b/lib/libc/tests/nss/getgr_test.c
@@ -293,6 +293,8 @@ group_fill_test_data(struct group_test_data *td,
     int (*cb)(struct group *, void *))
 {
        struct group *grp;
+       const int limit = 1024;
+       int count = 0;
 
        setgroupent(1);
        while ((grp = getgrent()) != NULL) {
@@ -303,6 +305,8 @@ group_fill_test_data(struct group_test_data *td,
                } else {
                        return (-1);
                }
+               if (++count >= limit)
+                       break;
        }
        endgrent();
 
diff --git a/lib/libc/tests/nss/getpw_test.c b/lib/libc/tests/nss/getpw_test.c
index 3a44497cf848..434d86a31591 100644
--- a/lib/libc/tests/nss/getpw_test.c
+++ b/lib/libc/tests/nss/getpw_test.c
@@ -240,6 +240,8 @@ passwd_fill_test_data(struct passwd_test_data *td,
     int (*cb)(struct passwd *, void *))
 {
        struct passwd *pwd;
+       const int limit = 1024;
+       int count = 0;
 
        setpassent(1);
        while ((pwd = getpwent()) != NULL) {
@@ -250,6 +252,8 @@ passwd_fill_test_data(struct passwd_test_data *td,
                } else {
                        return (-1);
                }
+               if (++count >= limit)
+                       break;
        }
        endpwent();
 
diff --git a/lib/libc/tests/nss/getserv_test.c 
b/lib/libc/tests/nss/getserv_test.c
index 486a8c20836f..cc66fdb2fa52 100644
--- a/lib/libc/tests/nss/getserv_test.c
+++ b/lib/libc/tests/nss/getserv_test.c
@@ -283,6 +283,8 @@ static int
 servent_fill_test_data(struct servent_test_data *td)
 {
        struct servent *serv;
+       const int limit = 1024;
+       int count = 0;
 
        setservent(1);
        while ((serv = getservent()) != NULL) {
@@ -290,6 +292,8 @@ servent_fill_test_data(struct servent_test_data *td)
                        TEST_DATA_APPEND(servent, td, serv);
                else
                        return (-1);
+               if (++count >= limit)
+                       break;
        }
        endservent();
 

Reply via email to