nlattr: do not assume that SK_MEMINFO_VARS is constant

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.
This commit is contained in:
Eugene Syromyatnikov 2018-05-10 19:37:29 +02:00 committed by Dmitry V. Levin
parent 4245bdfe41
commit 0f1cf622ba
2 changed files with 4 additions and 27 deletions

View File

@ -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;
}

View 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,