diff options
author | emaste <emaste@FreeBSD.org> | 2017-10-07 20:20:01 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2017-10-07 20:20:01 +0000 |
commit | 989ef186383142f1fb1090bd171a86ba3c64d8ad (patch) | |
tree | 2b14a0150a17e603b5ee8c365d5bd328169eccb6 | |
parent | 69177ab7d2a8bcddf297fc36372d151102f66af2 (diff) | |
download | FreeBSD-src-989ef186383142f1fb1090bd171a86ba3c64d8ad.zip FreeBSD-src-989ef186383142f1fb1090bd171a86ba3c64d8ad.tar.gz |
MFC r323675: libsysdecode: report invalid cap_rights_t
Previously we'd have an assertion failure in cap_rights_is_set if
sysdecode_cap_rights is called with an invalid cap_rights_t, so test for
validity first.
PR: 222258
Sponsored by: The FreeBSD Foundation
-rw-r--r-- | lib/libsysdecode/flags.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/libsysdecode/flags.c b/lib/libsysdecode/flags.c index ea477b0..6616960 100644 --- a/lib/libsysdecode/flags.c +++ b/lib/libsysdecode/flags.c @@ -988,8 +988,15 @@ void sysdecode_cap_rights(FILE *fp, cap_rights_t *rightsp) { struct name_table *t; + int i; bool comma; + for (i = 0; i < CAPARSIZE(rightsp); i++) { + if (CAPIDXBIT(rightsp->cr_rights[i]) != 1 << i) { + fprintf(fp, "invalid cap_rights_t"); + return; + } + } comma = false; for (t = caprights; t->str != NULL; t++) { if (cap_rights_is_set(rightsp, t->val)) { |