#define cfs_cap_pack(cap) (cap)
#define cfs_cap_unpack(cap) (cap)
-void cfs_cap_raise(cfs_cap_t cap)
-{
- struct cred *cred;
- if ((cred = prepare_creds())) {
- cap_raise(cred->cap_effective, cfs_cap_unpack(cap));
- commit_creds(cred);
- }
-}
-
-void cfs_cap_lower(cfs_cap_t cap)
-{
- struct cred *cred;
- if ((cred = prepare_creds())) {
- cap_lower(cred->cap_effective, cfs_cap_unpack(cap));
- commit_creds(cred);
- }
-}
-
-int cfs_cap_raised(cfs_cap_t cap)
-{
- return cap_raised(current_cap(), cfs_cap_unpack(cap));
-}
-
static void cfs_kernel_cap_pack(kernel_cap_t kcap, cfs_cap_t *cap)
{
#if defined (_LINUX_CAPABILITY_VERSION) && _LINUX_CAPABILITY_VERSION == 0x19980330
!memcmp(entry, key, key_len)) {
entry += key_len + 1;
entry_len -= key_len + 1;
- /* The 'value' buffer passed in is too small.*/
- if (entry_len >= *val_len)
+
+ /* The 'value' buffer passed in is too small.
+ * Copy what fits, but return -EOVERFLOW. */
+ if (entry_len >= *val_len) {
+ memcpy(value, entry, *val_len);
+ value[*val_len - 1] = 0;
GOTO(out, rc = -EOVERFLOW);
+ }
memcpy(value, entry, entry_len);
*val_len = entry_len;
}
EXPORT_SYMBOL(cfs_get_environ);
-EXPORT_SYMBOL(cfs_cap_raise);
-EXPORT_SYMBOL(cfs_cap_lower);
-EXPORT_SYMBOL(cfs_cap_raised);
EXPORT_SYMBOL(cfs_curproc_cap_pack);
EXPORT_SYMBOL(cfs_capable);