On Mon, 2004-12-27 at 17:25, Serge E. Hallyn wrote:
+ security_compute_av(tsec->sid, tsec->sid,
SECCLASS_CAPABILITY, ~0,
+ &avd);
+ cap_mask(NETLINK_CB(skb).eff_cap, avd.allowed);
Sorry, on second thought, we likely don't want the performance and
locking overhead of security_compute_av() imposed on all netlink sends,
so I'd suggest the diff below relative to your patch to switch back to
using avc_has_perm_noaudit(), but clearing avd.allowed first to ensure a
well-defined value even upon error return and casting to void to avoid a
warning about ignoring the return value.
--- linux-2.6/security/selinux/hooks.c.orig 2004-12-28 07:55:06.526688392 -0500
+++ linux-2.6/security/selinux/hooks.c 2004-12-28 07:56:09.234155408 -0500
@@ -3551,8 +3551,9 @@ static int selinux_netlink_send(struct s
tsec = current->security;
- security_compute_av(tsec->sid, tsec->sid, SECCLASS_CAPABILITY, ~0,
- &avd);
+ avd.allowed = 0;
+ (void)avc_has_perm_noaudit(tsec->sid, tsec->sid,
+ SECCLASS_CAPABILITY, ~0, &avd);
cap_mask(NETLINK_CB(skb).eff_cap, avd.allowed);
if (policydb_loaded_version >= POLICYDB_VERSION_NLCLASS)
--
Stephen Smalley <sds(a)epoch.ncsc.mil>
National Security Agency