Hi,
On 12/21/20 7:38 PM, J.R.T. Clarke wrote:
Hi Luis,
@@ -556,20 +539,79 @@ capability::set_offset (uint64_t offset) ...
- (2) - If the top 64 bits are non-zero and the representation isCOMPACT, the capability has the following format:You're missing documentation for this format.
Indeed. I've added the generic format from the documentation.
...
/* Handle attributes. */if (get_tag () == false)- attr_str = "invalid ";
if (get_otype () == CAP_SEAL_TYPE_RB)- attr_str = "sentry ";
if (is_sealed ())- attr_str = "sealed ";
These are supposed to be comma-separated, with no trailing space.
For some reason I missed the comma-separate entry. Fixed now.
Also sentries are not printed as sealed capabilities (but see below).
cap_str += "{";There are no curly braces in the specification.
I've added this one due to how GDB prints things. When showing the list of arguments for a function, it looks slightly confusing where things begin and end.
cap_str = val_str + " [" + perm_str + "," + range_str + "]";if (!attr_str.empty ())- cap_str += " ( " + attr_str + ")";
There should be no leading space.
Fixed.
I also couldn't help but notice you have the following:
inline bool is_sealed (void) { return check_permissions (CAP_PERM_SEAL); }
(in capability.h)
Whether a capability is sealed and whether a capability can be used to seal are not the same thing.
Good catch. I think I had the right idea (since I check otype in some other place), but ended up handling the sealed property incorrectly.
Fixed now locally. I will push later.
Thanks!