Merge a430d95c5e ("Merge tag 'lsm-pr-20240911' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm") into android-mainline
Steps on the way to 6.12-rc1 Bug: 367265496 Change-Id: I2d1107f51e1fc2cf7df866a66009097a1f26061f Signed-off-by: Matthias Maennich <maennich@google.com>
This commit is contained in:
@@ -55,6 +55,7 @@ targets += module.lds
|
||||
subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
|
||||
subdir-$(CONFIG_MODVERSIONS) += genksyms
|
||||
subdir-$(CONFIG_SECURITY_SELINUX) += selinux
|
||||
subdir-$(CONFIG_SECURITY_IPE) += ipe
|
||||
|
||||
# Let clean descend into subdirs
|
||||
subdir- += basic dtc gdb kconfig mod
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
subdir-y := polgen
|
||||
@@ -0,0 +1,2 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
polgen
|
||||
@@ -0,0 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
hostprogs-always-y := polgen
|
||||
HOST_EXTRACFLAGS += \
|
||||
-I$(srctree)/include \
|
||||
-I$(srctree)/include/uapi \
|
||||
@@ -0,0 +1,145 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
static void usage(const char *const name)
|
||||
{
|
||||
printf("Usage: %s OutputFile (PolicyFile)\n", name);
|
||||
exit(EINVAL);
|
||||
}
|
||||
|
||||
static int policy_to_buffer(const char *pathname, char **buffer, size_t *size)
|
||||
{
|
||||
size_t fsize;
|
||||
size_t read;
|
||||
char *lbuf;
|
||||
int rc = 0;
|
||||
FILE *fd;
|
||||
|
||||
fd = fopen(pathname, "r");
|
||||
if (!fd) {
|
||||
rc = errno;
|
||||
goto out;
|
||||
}
|
||||
|
||||
fseek(fd, 0, SEEK_END);
|
||||
fsize = ftell(fd);
|
||||
rewind(fd);
|
||||
|
||||
lbuf = malloc(fsize);
|
||||
if (!lbuf) {
|
||||
rc = ENOMEM;
|
||||
goto out_close;
|
||||
}
|
||||
|
||||
read = fread((void *)lbuf, sizeof(*lbuf), fsize, fd);
|
||||
if (read != fsize) {
|
||||
rc = -1;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
*buffer = lbuf;
|
||||
*size = fsize;
|
||||
fclose(fd);
|
||||
|
||||
return rc;
|
||||
|
||||
out_free:
|
||||
free(lbuf);
|
||||
out_close:
|
||||
fclose(fd);
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int write_boot_policy(const char *pathname, const char *buf, size_t size)
|
||||
{
|
||||
int rc = 0;
|
||||
FILE *fd;
|
||||
size_t i;
|
||||
|
||||
fd = fopen(pathname, "w");
|
||||
if (!fd) {
|
||||
rc = errno;
|
||||
goto err;
|
||||
}
|
||||
|
||||
fprintf(fd, "/* This file is automatically generated.");
|
||||
fprintf(fd, " Do not edit. */\n");
|
||||
fprintf(fd, "#include <linux/stddef.h>\n");
|
||||
fprintf(fd, "\nextern const char *const ipe_boot_policy;\n\n");
|
||||
fprintf(fd, "const char *const ipe_boot_policy =\n");
|
||||
|
||||
if (!buf || size == 0) {
|
||||
fprintf(fd, "\tNULL;\n");
|
||||
fclose(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fprintf(fd, "\t\"");
|
||||
|
||||
for (i = 0; i < size; ++i) {
|
||||
switch (buf[i]) {
|
||||
case '"':
|
||||
fprintf(fd, "\\\"");
|
||||
break;
|
||||
case '\'':
|
||||
fprintf(fd, "'");
|
||||
break;
|
||||
case '\n':
|
||||
fprintf(fd, "\\n\"\n\t\"");
|
||||
break;
|
||||
case '\\':
|
||||
fprintf(fd, "\\\\");
|
||||
break;
|
||||
case '\t':
|
||||
fprintf(fd, "\\t");
|
||||
break;
|
||||
case '\?':
|
||||
fprintf(fd, "\\?");
|
||||
break;
|
||||
default:
|
||||
fprintf(fd, "%c", buf[i]);
|
||||
}
|
||||
}
|
||||
fprintf(fd, "\";\n");
|
||||
fclose(fd);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
if (fd)
|
||||
fclose(fd);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int main(int argc, const char *const argv[])
|
||||
{
|
||||
char *policy = NULL;
|
||||
size_t len = 0;
|
||||
int rc = 0;
|
||||
|
||||
if (argc < 2)
|
||||
usage(argv[0]);
|
||||
|
||||
if (argc > 2) {
|
||||
rc = policy_to_buffer(argv[2], &policy, &len);
|
||||
if (rc != 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
rc = write_boot_policy(argv[1], policy, len);
|
||||
cleanup:
|
||||
if (policy)
|
||||
free(policy);
|
||||
if (rc != 0)
|
||||
perror("An error occurred during policy conversion: ");
|
||||
return rc;
|
||||
}
|
||||
Reference in New Issue
Block a user