Introduce a new kernel configuration API for NetLabel - for Smack Version 5
Subsystems (2)
PATCH 1/1 Introduce a new kernel configuration API for NetLabel - for Smack Version 5
From: Paul Moore <[email protected]>
Add a new set of configuration functions to the NetLabel/LSM API so that LSMs can perform their own configuration of the NetLabel subsystem without relying on assistance from userspace.
Signed-off-by Paul Moore <[email protected]>
---
This update fixes a memory leak on error conditions.
include/net/netlabel.h | 47 ++++++++-- net/ipv4/cipso_ipv4.c | 4 - net/netlabel/netlabel_cipso_v4.c | 2 net/netlabel/netlabel_cipso_v4.h | 3 + net/netlabel/netlabel_domainhash.h | 1 net/netlabel/netlabel_kapi.c | 177 ++++++++++++++++++++++++++++++++++++ 6 files changed, 225 insertions(+), 9 deletions(-)
include/net/netlabel.h +41 -6
@@ -36,6 +36,8 @@#include <net/netlink.h> #include <asm/atomic.h> +struct cipso_v4_doi ; +/* * NetLabel - A management interface for maintaining network packet label * mapping tables for explicit packet labling protocols.
@@ -99,12 +101,6 @@ struct netlbl_audit {uid_t loginuid; }; -/* Domain mapping definition struct */ -struct netlbl_dom_map ; - -/* Domain mapping operations */ -int netlbl_domhsh_remove (const char *domain,struct netlbl_audit *audit_info); -/* LSM security attributes */ struct netlbl_lsm_cache {atomic_t refcount;
@@ -285,6 +281,19 @@ static inline void netlbl_secattr_free(struct netlbl_lsm_secattr *secattr)#ifdef CONFIG_NETLABEL /* +* LSM configuration operations +*/ +int netlbl_cfg_map_del (const char *domain,struct netlbl_audit *audit_info); +int netlbl_cfg_unlbl_add_map (const char *domain, +struct netlbl_audit *audit_info); +int netlbl_cfg_cipsov4_add (struct cipso_v4_doi *doi_def, +struct netlbl_audit *audit_info); +int netlbl_cfg_cipsov4_add_map (struct cipso_v4_doi *doi_def, +const char *domain, +struct netlbl_audit *audit_info); +int netlbl_cfg_cipsov4_del (u32 doi,struct netlbl_audit *audit_info); + +/* * LSM security attribute operations */ int netlbl_secattr_catmap_walk(struct netlbl_lsm_secattr_catmap *catmap,
@@ -318,6 +327,32 @@ void netlbl_cache_invalidate(void);int netlbl_cache_add (const struct sk_buff *skb,const struct netlbl_lsm_secattr *secattr);#else +static inline int netlbl_cfg_map_del (const char *domain, +struct netlbl_audit *audit_info) +{ +return -ENOSYS ; +} +static inline int netlbl_cfg_unlbl_add_map (const char *domain, +struct netlbl_audit *audit_info) +{ +return -ENOSYS ; +} +static inline int netlbl_cfg_cipsov4_add (struct cipso_v4_doi *doi_def, +struct netlbl_audit *audit_info) +{ +return -ENOSYS ; +} +static inline int netlbl_cfg_cipsov4_add_map (struct cipso_v4_doi *doi_def, +const char *domain, +struct netlbl_audit *audit_info) +{ +return -ENOSYS ; +} +static inline int netlbl_cfg_cipsov4_del (u32 doi, +struct netlbl_audit *audit_info) +{ +return -ENOSYS ; +}static inline int netlbl_secattr_catmap_walk (struct netlbl_lsm_secattr_catmap *catmap,u32 offset)
net/ipv4/cipso_ipv4.c +2 -2
@@ -557,8 +557,8 @@ int cipso_v4_doi_remove(u32 doi,spin_unlock (&cipso_v4_doi_list_lock);list_for_each_entry_rcu (dom_iter, &doi_def->dom_list, list)if (dom_iter->valid) -netlbl_domhsh_remove (dom_iter->domain, - audit_info); +netlbl_cfg_map_del (dom_iter->domain, + audit_info);cipso_v4_cache_invalidate ();rcu_read_unlock ();
net/netlabel/netlabel_cipso_v4.c +1 -1
@@ -89,7 +89,7 @@ static const struct nla_policy netlbl_cipsov4_genl_policy[NLBL_CIPSOV4_A_MAX + 1* safely. * */ -static void netlbl_cipsov4_doi_free (struct rcu_head *entry) +void netlbl_cipsov4_doi_free (struct rcu_head *entry) {struct cipso_v4_doi *ptr;
net/netlabel/netlabel_cipso_v4.h +3 -0
@@ -163,4 +163,7 @@ enum {/* NetLabel protocol functions */ int netlbl_cipsov4_genl_init (void ); +/* Free the memory associated with a CIPSOv4 DOI definition */ +void netlbl_cipsov4_doi_free (struct rcu_head *entry); +#endif
net/netlabel/netlabel_domainhash.h +1 -0
@@ -61,6 +61,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry, struct netlbl_audit *audit_info);int netlbl_domhsh_add_default (struct netlbl_dom_map *entry,struct netlbl_audit *audit_info); +int netlbl_domhsh_remove (const char *domain,struct netlbl_audit *audit_info);int netlbl_domhsh_remove_default (struct netlbl_audit *audit_info);struct netlbl_dom_map *netlbl_domhsh_getentry (const char *domain); int netlbl_domhsh_walk(u32 *skip_bkt,
net/netlabel/netlabel_kapi.c +177 -0
193 lines not on this page · raw message