]> granicus.if.org Git - strace/commitdiff
nlattr: do not assume that SK_MEMINFO_VARS is constant
authorEugene Syromyatnikov <evgsyr@gmail.com>
Thu, 10 May 2018 17:37:29 +0000 (19:37 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 23 May 2018 23:27:43 +0000 (23:27 +0000)
SK_MEMINFO_VARS changes over time (as it was in Linux commit
v4.7-rc1~154^2~354^2~4, for example), so we cannot use it
for sanity checks.

* nlattr.c (print_meminfo): Remove.
(decode_nla_meminfo): Use generic print_uint32_array_member element
printer callback.
* tests/nlattr_inet_diag_msg.c (main): Update expected output.

nlattr.c
tests/nlattr_inet_diag_msg.c

index 873457ca17a6e3ccbf700bd2018882d2a30e8153..46bf2f4914f37cec6b1aa91584e2760a734a0309 100644 (file)
--- a/nlattr.c
+++ b/nlattr.c
@@ -178,24 +178,6 @@ decode_nla_strn(struct tcb *const tcp,
        return true;
 }
 
-static bool
-print_meminfo(struct tcb *const tcp,
-             void *const elem_buf,
-             const size_t elem_size,
-             void *const opaque_data)
-{
-       unsigned int *const count = opaque_data;
-
-       if ((*count)++ >= SK_MEMINFO_VARS) {
-               tprints("...");
-               return false;
-       }
-
-       tprintf("%" PRIu32, *(uint32_t *) elem_buf);
-
-       return true;
-}
-
 bool
 decode_nla_meminfo(struct tcb *const tcp,
                   const kernel_ulong_t addr,
@@ -210,7 +192,7 @@ decode_nla_meminfo(struct tcb *const tcp,
 
        unsigned int count = 0;
        print_array(tcp, addr, nmemb, &mem, sizeof(mem),
-                   umoven_or_printaddr, print_meminfo, &count);
+                   umoven_or_printaddr, print_uint32_array_member, &count);
 
        return true;
 }
index 6c724d8dcaacd4f8dcce8f37806ea2190759f1bd..752d35ee9ce6823d53e1f72c423c9fed3b4ee86c 100644 (file)
@@ -172,14 +172,9 @@ main(void)
 
        memcpy(bigmem, pattern, sizeof(bigmem));
 
-       TEST_NLATTR(fd, nlh0, hdrlen, init_inet_diag_msg, print_inet_diag_msg,
-                   INET_DIAG_SKMEMINFO, sizeof(bigmem), bigmem, sizeof(bigmem),
-                   size_t i;
-                   for (i = 0; i < SK_MEMINFO_VARS; ++i) {
-                       printf(i ? ", " : "[");
-                       print_uint(&bigmem[i]);
-                   }
-                   printf(", ...]"));
+       TEST_NLATTR_ARRAY(fd, nlh0, hdrlen,
+                         init_inet_diag_msg, print_inet_diag_msg,
+                         INET_DIAG_SKMEMINFO, pattern, bigmem, print_uint);
 
        TEST_NLATTR_OBJECT(fd, nlh0, hdrlen,
                           init_inet_diag_msg, print_inet_diag_msg,