The branch main has been updated by dougm:

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

commit e5f93d10782dd804d0ee776c22b972ec582f5c99
Author:     Doug Moore <[email protected]>
AuthorDate: 2022-10-01 17:20:04 +0000
Commit:     Doug Moore <[email protected]>
CommitDate: 2022-10-01 17:20:04 +0000

    show_sysctl_all: reduce copying, please coverity
    
    Modify db_show_sysctl_all so that it does not copy more than once the
    data of the input oid, and so that what it passes to db_show_oid does
    not alarm coverity.
    
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D36847
---
 sys/kern/kern_sysctl.c | 47 ++++++++++++++++++++++-------------------------
 1 file changed, 22 insertions(+), 25 deletions(-)

diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 8e4b69bb6eee..6427ff0c7ecf 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -2765,12 +2765,12 @@ static void
 db_show_oid_name(int *oid, size_t nlen)
 {
        struct sysctl_oid *oidp;
-       int qoid[CTL_MAXNAME+2];
+       int qoid[CTL_MAXNAME + 2];
        int error;
 
-       qoid[0] = 0;
+       qoid[0] = CTL_SYSCTL;
+       qoid[1] = CTL_SYSCTL_NAME;
        memcpy(qoid + 2, oid, nlen * sizeof(int));
-       qoid[1] = 1;
 
        error = sysctl_find_oid(qoid, nlen + 2, &oidp, NULL, NULL);
        if (error)
@@ -2856,25 +2856,24 @@ static int
 db_show_sysctl_all(int *oid, size_t len, int flags)
 {
        struct sysctl_oid *oidp;
-       int name1[CTL_MAXNAME + 2], name2[CTL_MAXNAME + 2];
-       size_t l1, l2;
+       int qoid[CTL_MAXNAME + 2], next[CTL_MAXNAME];
+       size_t nlen;
 
-       name1[0] = CTL_SYSCTL;
-       name1[1] = CTL_SYSCTL_NEXT;
-       l1 = 2;
+       qoid[0] = CTL_SYSCTL;
+       qoid[1] = CTL_SYSCTL_NEXT;
        if (len) {
-               memcpy(name1 + 2, oid, len * sizeof(int));
-               l1 += len;
+               nlen = len;
+               memcpy(&qoid[2], oid, nlen * sizeof(int));
        } else {
-               name1[2] = CTL_KERN;
-               l1++;
+               nlen = 1;
+               qoid[2] = CTL_KERN;
        }
        for (;;) {
-               int i, error;
+               int error;
+               size_t nextsize = sizeof(next);
 
-               l2 = sizeof(name2);
-               error = kernel_sysctl(kdb_thread, name1, l1,
-                   name2, &l2, NULL, 0, &l2, 0);
+               error = kernel_sysctl(kdb_thread, qoid, nlen + 2,
+                   next, &nextsize, NULL, 0, &nlen, 0);
                if (error != 0) {
                        if (error == ENOENT)
                                return (0);
@@ -2882,27 +2881,25 @@ db_show_sysctl_all(int *oid, size_t len, int flags)
                                db_error("sysctl(next)");
                }
 
-               l2 /= sizeof(int);
+               nlen /= sizeof(int);
 
-               if (l2 < (unsigned int)len)
+               if (nlen < (unsigned int)len)
                        return (0);
 
-               for (i = 0; i < len; i++)
-                       if (name2[i] != oid[i])
-                               return (0);
+               if (memcmp(&oid[0], &next[0], len * sizeof(int)) != 0)
+                       return (0);
 
                /* Find the OID in question */
-               error = sysctl_find_oid(name2, l2, &oidp, NULL, NULL);
+               error = sysctl_find_oid(next, nlen, &oidp, NULL, NULL);
                if (error)
                        return (error);
 
-               i = db_show_oid(oidp, name2, l2, flags | DB_SYSCTL_SAFE_ONLY);
+               (void)db_show_oid(oidp, next, nlen, flags | 
DB_SYSCTL_SAFE_ONLY);
 
                if (db_pager_quit)
                        return (0);
 
-               memcpy(name1+2, name2, l2 * sizeof(int));
-               l1 = 2 + l2;
+               memcpy(&qoid[2 + len], &next[len], (nlen - len) * sizeof(int));
        }
 }
 

Reply via email to