diff options
Diffstat (limited to 'security/selinux/ss/mls.c')
-rw-r--r-- | security/selinux/ss/mls.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/security/selinux/ss/mls.c b/security/selinux/ss/mls.c index c713af23250a..2cca8e251624 100644 --- a/security/selinux/ss/mls.c +++ b/security/selinux/ss/mls.c | |||
@@ -640,8 +640,13 @@ int mls_export_cat(const struct context *context, | |||
640 | { | 640 | { |
641 | int rc = -EPERM; | 641 | int rc = -EPERM; |
642 | 642 | ||
643 | if (!selinux_mls_enabled) | 643 | if (!selinux_mls_enabled) { |
644 | *low = NULL; | ||
645 | *low_len = 0; | ||
646 | *high = NULL; | ||
647 | *high_len = 0; | ||
644 | return 0; | 648 | return 0; |
649 | } | ||
645 | 650 | ||
646 | if (low != NULL) { | 651 | if (low != NULL) { |
647 | rc = ebitmap_export(&context->range.level[0].cat, | 652 | rc = ebitmap_export(&context->range.level[0].cat, |
@@ -661,10 +666,16 @@ int mls_export_cat(const struct context *context, | |||
661 | return 0; | 666 | return 0; |
662 | 667 | ||
663 | export_cat_failure: | 668 | export_cat_failure: |
664 | if (low != NULL) | 669 | if (low != NULL) { |
665 | kfree(*low); | 670 | kfree(*low); |
666 | if (high != NULL) | 671 | *low = NULL; |
672 | *low_len = 0; | ||
673 | } | ||
674 | if (high != NULL) { | ||
667 | kfree(*high); | 675 | kfree(*high); |
676 | *high = NULL; | ||
677 | *high_len = 0; | ||
678 | } | ||
668 | return rc; | 679 | return rc; |
669 | } | 680 | } |
670 | 681 | ||