summaryrefslogtreecommitdiffstats
path: root/net/netlabel
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2020-05-12 14:43:14 +0200
committerDavid S. Miller <davem@davemloft.net>2020-05-12 18:12:40 -0700
commiteead1c2ea2509fd754c6da893a94f0e69e83ebe4 (patch)
tree74a6833236e82b1de6ec523ef9ae7e3bde1250fa /net/netlabel
parent24adbc1676af4e134e709ddc7f34cf2adc2131e4 (diff)
downloadlinux-stable-eead1c2ea2509fd754c6da893a94f0e69e83ebe4.tar.gz
linux-stable-eead1c2ea2509fd754c6da893a94f0e69e83ebe4.tar.bz2
linux-stable-eead1c2ea2509fd754c6da893a94f0e69e83ebe4.zip
netlabel: cope with NULL catmap
The cipso and calipso code can set the MLS_CAT attribute on successful parsing, even if the corresponding catmap has not been allocated, as per current configuration and external input. Later, selinux code tries to access the catmap if the MLS_CAT flag is present via netlbl_catmap_getlong(). That may cause null ptr dereference while processing incoming network traffic. Address the issue setting the MLS_CAT flag only if the catmap is really allocated. Additionally let netlbl_catmap_getlong() cope with NULL catmap. Reported-by: Matthew Sheets <matthew.sheets@gd-ms.com> Fixes: 4b8feff251da ("netlabel: fix the horribly broken catmap functions") Fixes: ceba1832b1b2 ("calipso: Set the calipso socket label to match the secattr.") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Acked-by: Paul Moore <paul@paul-moore.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlabel')
-rw-r--r--net/netlabel/netlabel_kapi.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
index 409a3ae47ce2..5e1239cef000 100644
--- a/net/netlabel/netlabel_kapi.c
+++ b/net/netlabel/netlabel_kapi.c
@@ -734,6 +734,12 @@ int netlbl_catmap_getlong(struct netlbl_lsm_catmap *catmap,
if ((off & (BITS_PER_LONG - 1)) != 0)
return -EINVAL;
+ /* a null catmap is equivalent to an empty one */
+ if (!catmap) {
+ *offset = (u32)-1;
+ return 0;
+ }
+
if (off < catmap->startbit) {
off = catmap->startbit;
*offset = off;