> On 27 Jun 2025, at 1:12 PM, chench246 <chench...@gmail.com> wrote: > > TPCM(Trusted Platform Control Module) is a Chinese standard and has similar > function > to tpm, but tpcm adds the function of active monitoring and control to the > system. > It can realize active startup measurement when the system starts,as well as > dynamic > measurement and monitoring when the program is running, further enhance the > security > of the system. > > Signed-off-by: hao chen <chench...@gmail.com> > --- > grub-core/Makefile.core.def | 7 +++ > grub-core/commands/tpcm.c | 99 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 106 insertions(+) > create mode 100755 grub-core/commands/tpcm.c > > diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def > index 24e8c8437..fc31dbca4 100644 > --- a/grub-core/Makefile.core.def > +++ b/grub-core/Makefile.core.def > @@ -2600,6 +2600,13 @@ module = { > cppflags = '-I$(srcdir)/lib/tss2 -I$(srcdir)/lib/libtasn1-grub'; > }; > > +module = { > + name = tpcm; > + common = commands/tpcm.c; > + efi = commands/efi/tpcm.c; > + enable = x86_64_efi; > +}; > + > module = { > name = tr; > common = commands/tr.c; > diff --git a/grub-core/commands/tpcm.c b/grub-core/commands/tpcm.c > new file mode 100755 > index 000000000..1c8bd77ce > --- /dev/null > +++ b/grub-core/commands/tpcm.c > @@ -0,0 +1,99 @@ > +/* > + * GRUB -- GRand Unified Bootloader > + * Copyright (C) 2018 Free Software Foundation, Inc. > + * > + * GRUB is free software: you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation, either version 3 of the License, or > + * (at your option) any later version. > + * > + * GRUB is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. > + * > + * Core TPCM support code. > + */ > + > +#include <grub/err.h> > +#include <grub/verify.h> > +#include <grub/dl.h> > +#include <grub/efi/tpcm.h> > + > +GRUB_MOD_LICENSE ("GPLv3+"); > + > +static char context_buf[TPCM_MAX_BUF_SIZE]; > + > +static grub_err_t grub_tpcm_verify_init(grub_file_t io, > + enum grub_file_type type, > + void **context, > + enum grub_verify_flags *flags)
Hi hao chen, Please use the single space after function name and newline after return type when declare and defining function. Correct it every where. static grub_err_t grub_tpcm_verify_init (grub_file_t io, enum grub_file_type type, void **context, enum grub_verify_flags *flags) > +{ > + grub_memset(context_buf, 0, TPCM_MAX_BUF_SIZE); Use single space after function name when calling the function grub_memset (context_buf, 0, TPCM_MAX_BUF_SIZE); > + grub_snprintf(context_buf, TPCM_MAX_BUF_SIZE, "%d|%s", (type & > GRUB_FILE_TYPE_MASK), io->name); Use space before () > + *context = context_buf; > + *flags |= GRUB_VERIFY_FLAGS_SINGLE_CHUNK; > + > + return GRUB_ERR_NONE; > +} > + > +static grub_err_t grub_tpcm_verify_write(void *context, void *buf , > grub_size_t size ) Use it like static grub_err_t grub_tpcm_verify_write (void *context, void *buf , grub_size_t size ) > +{ > + return grub_tpcm_measure_memory(context, (grub_addr_t)buf, size); > +} > + > +static grub_err_t grub_tpcm_verify_string (char *str, enum > grub_verify_string_type type) Use it like static grub_err_t grub_tpcm_verify_string (char *str, enum grub_verify_string_type type) > +{ > + const char *prefix = NULL; > + char *description, *context; > + grub_err_t status; > + > + switch (type) > + { > + case GRUB_VERIFY_KERNEL_CMDLINE: > + prefix = "kernel_cmdline: "; > + break; > + case GRUB_VERIFY_MODULE_CMDLINE: > + prefix = "module_cmdline: "; > + break; > + case GRUB_VERIFY_COMMAND: > + prefix = "grub_cmd: "; > + break; > + } > + > + context = grub_zalloc(grub_strlen (str) + grub_strlen (prefix) + 1 + 4); > /* 4 for type */ Use space before () like context = grub_zalloc (grub_strlen (str) + grub_strlen (prefix) + 1 + 4); /* 4 for type */ > + if (!context) Use context != NULL > + return grub_errno; > + > + grub_snprintf(context, 4, "%d|", (type & GRUB_FILE_TYPE_MASK)); > + description = context + grub_strlen(context); > + grub_memcpy(description, prefix, grub_strlen (prefix)); > + grub_memcpy(description + grub_strlen (prefix), str, grub_strlen (str) + > 1); Use space before () for all the above functions > + > + status = grub_tpcm_measure_memory(context, (grub_addr_t)str, > grub_strlen(str)); Use space before () like status = grub_tpcm_measure_memory (context, (grub_addr_t) str, grub_strlen (str)); > + > + grub_free(context); > + > + return status; > +} > + > +struct grub_file_verifier grub_tpcm_verifier = { > + .name = "tpcm", > + .init = grub_tpcm_verify_init, > + .write = grub_tpcm_verify_write, > + .verify_string = grub_tpcm_verify_string, > +}; > + > +GRUB_MOD_INIT (tpcm) > +{ > + grub_verifier_register(&grub_tpcm_verifier); Use space before () like grub_verifier_register (&grub_tpcm_verifier); > +} > + > +GRUB_MOD_FINI (tpcm) > +{ > + grub_verifier_unregister(&grub_tpcm_verifier); Use space before () like grub_verifier_unregister (&grub_tpcm_verifier); > +} > + > -- > 2.17.1 > Thanks, Sudhakar > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel