File Index
Files and directories
Sign in
FILE

sysmap_is_sealed.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/mseal_system_mappings/sysmap_is_sealed.c C
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * test system mappings are sealed when
  4 * KCONFIG_MSEAL_SYSTEM_MAPPINGS=y
  5 */
  6
  7#define _GNU_SOURCE
  8#include <stdio.h>
  9#include <errno.h>
 10#include <unistd.h>
 11#include <string.h>
 12#include <stdbool.h>
 13
 14#include "kselftest.h"
 15#include "kselftest_harness.h"
 16
 17#define VMFLAGS "VmFlags:"
 18#define MSEAL_FLAGS "sl"
 19#define MAX_LINE_LEN 512
 20
 21bool has_mapping(char *name, FILE *maps)
 22{
 23	char line[MAX_LINE_LEN];
 24
 25	while (fgets(line, sizeof(line), maps)) {
 26		if (strstr(line, name))
 27			return true;
 28	}
 29
 30	return false;
 31}
 32
 33bool mapping_is_sealed(char *name, FILE *maps)
 34{
 35	char line[MAX_LINE_LEN];
 36
 37	while (fgets(line, sizeof(line), maps)) {
 38		if (!strncmp(line, VMFLAGS, strlen(VMFLAGS))) {
 39			if (strstr(line, MSEAL_FLAGS))
 40				return true;
 41
 42			return false;
 43		}
 44	}
 45
 46	return false;
 47}
 48
 49FIXTURE(basic) {
 50	FILE *maps;
 51};
 52
 53FIXTURE_SETUP(basic)
 54{
 55	self->maps = fopen("/proc/self/smaps", "r");
 56	if (!self->maps)
 57		SKIP(return, "Could not open /proc/self/smap, errno=%d",
 58			errno);
 59};
 60
 61FIXTURE_TEARDOWN(basic)
 62{
 63	if (self->maps)
 64		fclose(self->maps);
 65};
 66
 67FIXTURE_VARIANT(basic)
 68{
 69	char *name;
 70	bool sealed;
 71};
 72
 73FIXTURE_VARIANT_ADD(basic, vdso) {
 74	.name = "[vdso]",
 75	.sealed = true,
 76};
 77
 78FIXTURE_VARIANT_ADD(basic, vvar) {
 79	.name = "[vvar]",
 80	.sealed = true,
 81};
 82
 83FIXTURE_VARIANT_ADD(basic, vvar_vclock) {
 84	.name = "[vvar_vclock]",
 85	.sealed = true,
 86};
 87
 88FIXTURE_VARIANT_ADD(basic, sigpage) {
 89	.name = "[sigpage]",
 90	.sealed = true,
 91};
 92
 93FIXTURE_VARIANT_ADD(basic, vectors) {
 94	.name = "[vectors]",
 95	.sealed = true,
 96};
 97
 98FIXTURE_VARIANT_ADD(basic, uprobes) {
 99	.name = "[uprobes]",
100	.sealed = true,
101};
102
103FIXTURE_VARIANT_ADD(basic, stack) {
104	.name = "[stack]",
105	.sealed = false,
106};
107
108TEST_F(basic, check_sealed)
109{
110	if (!has_mapping(variant->name, self->maps)) {
111		SKIP(return, "could not find the mapping, %s",
112			variant->name);
113	}
114
115	EXPECT_EQ(variant->sealed,
116		mapping_is_sealed(variant->name, self->maps));
117};
118
119TEST_HARNESS_MAIN
~/ Read-only file preview.