aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/netlabel.h
diff options
context:
space:
mode:
authorPaul Moore <pmoore@redhat.com>2014-08-01 11:17:03 -0400
committerPaul Moore <pmoore@redhat.com>2014-08-01 11:17:03 -0400
commit41c3bd2039e0d7b3dc32313141773f20716ec524 (patch)
treeb47057cfbaeded529570a91b39f14007594203fc /include/net/netlabel.h
parent615e51fdda6f274e94b1e905fcaf6111e0d9aa20 (diff)
netlabel: fix a problem when setting bits below the previously lowest bit
The NetLabel category (catmap) functions have a problem in that they assume categories will be set in an increasing manner, e.g. the next category set will always be larger than the last. Unfortunately, this is not a valid assumption and could result in problems when attempting to set categories less than the startbit in the lowest catmap node. In some cases kernel panics and other nasties can result. This patch corrects the problem by checking for this and allocating a new catmap node instance and placing it at the front of the list. Cc: stable@vger.kernel.org Reported-by: Christian Evans <frodox@zoho.com> Signed-off-by: Paul Moore <pmoore@redhat.com> Tested-by: Casey Schaufler <casey@schaufler-ca.com>
Diffstat (limited to 'include/net/netlabel.h')
-rw-r--r--include/net/netlabel.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/include/net/netlabel.h b/include/net/netlabel.h
index 4fe018c48ed9..1c40d658d008 100644
--- a/include/net/netlabel.h
+++ b/include/net/netlabel.h
@@ -394,10 +394,10 @@ int netlbl_secattr_catmap_walk(struct netlbl_lsm_secattr_catmap *catmap,
394 u32 offset); 394 u32 offset);
395int netlbl_secattr_catmap_walk_rng(struct netlbl_lsm_secattr_catmap *catmap, 395int netlbl_secattr_catmap_walk_rng(struct netlbl_lsm_secattr_catmap *catmap,
396 u32 offset); 396 u32 offset);
397int netlbl_secattr_catmap_setbit(struct netlbl_lsm_secattr_catmap *catmap, 397int netlbl_secattr_catmap_setbit(struct netlbl_lsm_secattr_catmap **catmap,
398 u32 bit, 398 u32 bit,
399 gfp_t flags); 399 gfp_t flags);
400int netlbl_secattr_catmap_setrng(struct netlbl_lsm_secattr_catmap *catmap, 400int netlbl_secattr_catmap_setrng(struct netlbl_lsm_secattr_catmap **catmap,
401 u32 start, 401 u32 start,
402 u32 end, 402 u32 end,
403 gfp_t flags); 403 gfp_t flags);
@@ -505,14 +505,14 @@ static inline int netlbl_secattr_catmap_walk_rng(
505 return -ENOENT; 505 return -ENOENT;
506} 506}
507static inline int netlbl_secattr_catmap_setbit( 507static inline int netlbl_secattr_catmap_setbit(
508 struct netlbl_lsm_secattr_catmap *catmap, 508 struct netlbl_lsm_secattr_catmap **catmap,
509 u32 bit, 509 u32 bit,
510 gfp_t flags) 510 gfp_t flags)
511{ 511{
512 return 0; 512 return 0;
513} 513}
514static inline int netlbl_secattr_catmap_setrng( 514static inline int netlbl_secattr_catmap_setrng(
515 struct netlbl_lsm_secattr_catmap *catmap, 515 struct netlbl_lsm_secattr_catmap **catmap,
516 u32 start, 516 u32 start,
517 u32 end, 517 u32 end,
518 gfp_t flags) 518 gfp_t flags)