1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Linux Security Module infrastructure tests 4 * Tests for the lsm_set_self_attr system call 5 * 6 * Copyright © 2022 Casey Schaufler <casey@schaufler-ca.com> 7 */ 8 9 #define _GNU_SOURCE 10 #include <linux/lsm.h> 11 #include <string.h> 12 #include <stdio.h> 13 #include <unistd.h> 14 #include <sys/types.h> 15 #include "../kselftest_harness.h" 16 #include "common.h" 17 18 TEST(ctx_null_lsm_set_self_attr) 19 { 20 ASSERT_EQ(-1, lsm_set_self_attr(LSM_ATTR_CURRENT, NULL, 21 sizeof(struct lsm_ctx), 0)); 22 } 23 24 TEST(size_too_small_lsm_set_self_attr) 25 { 26 const long page_size = sysconf(_SC_PAGESIZE); 27 struct lsm_ctx *ctx = calloc(page_size, 1); 28 __u32 size = page_size; 29 30 ASSERT_NE(NULL, ctx); 31 if (attr_lsm_count()) { 32 ASSERT_LE(1, lsm_get_self_attr(LSM_ATTR_CURRENT, ctx, &size, 33 0)); 34 } 35 ASSERT_EQ(-1, lsm_set_self_attr(LSM_ATTR_CURRENT, ctx, 1, 0)); 36 37 free(ctx); 38 } 39 40 TEST(flags_zero_lsm_set_self_attr) 41 { 42 const long page_size = sysconf(_SC_PAGESIZE); 43 struct lsm_ctx *ctx = calloc(page_size, 1); 44 __u32 size = page_size; 45 46 ASSERT_NE(NULL, ctx); 47 if (attr_lsm_count()) { 48 ASSERT_LE(1, lsm_get_self_attr(LSM_ATTR_CURRENT, ctx, &size, 49 0)); 50 } 51 ASSERT_EQ(-1, lsm_set_self_attr(LSM_ATTR_CURRENT, ctx, size, 1)); 52 53 free(ctx); 54 } 55 56 TEST(flags_overset_lsm_set_self_attr) 57 { 58 const long page_size = sysconf(_SC_PAGESIZE); 59 char *ctx = calloc(page_size, 1); 60 __u32 size = page_size; 61 struct lsm_ctx *tctx = (struct lsm_ctx *)ctx; 62 63 ASSERT_NE(NULL, ctx); 64 if (attr_lsm_count()) { 65 ASSERT_LE(1, lsm_get_self_attr(LSM_ATTR_CURRENT, tctx, &size, 66 0)); 67 } 68 ASSERT_EQ(-1, lsm_set_self_attr(LSM_ATTR_CURRENT | LSM_ATTR_PREV, tctx, 69 size, 0)); 70 71 free(ctx); 72 } 73 74 TEST_HARNESS_MAIN 75