mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-25 08:39:28 +00:00
verify framework.
This commit is contained in:
1 parent
aa93127ed8
commit
09bd17faaa
6 files changed
+477
-284
No files matched your search
+1
-1
@@ -170,7 +170,7 @@ extern grub_disk_read_hook_t EXPORT_VAR(grub_file_progress_hook);
|
||||
/* Filters with lower ID are executed first. */
|
||||
typedef enum grub_file_filter_id
|
||||
{
|
||||
GRUB_FILE_FILTER_PUBKEY,
|
||||
GRUB_FILE_FILTER_VERIFY,
|
||||
GRUB_FILE_FILTER_GZIO,
|
||||
GRUB_FILE_FILTER_XZIO,
|
||||
GRUB_FILE_FILTER_LZOPIO,
|
||||
|
||||
@@ -35,6 +35,7 @@ void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
|
||||
void EXPORT_FUNC(grub_list_remove) (grub_list_t item);
|
||||
|
||||
#define FOR_LIST_ELEMENTS(var, list) for ((var) = (list); (var); (var) = (var)->next)
|
||||
#define FOR_LIST_ELEMENTS_NEXT(var, list) for ((var) = (var)->next; (var); (var) = (var)->next)
|
||||
#define FOR_LIST_ELEMENTS_SAFE(var, nxt, list) for ((var) = (list), (nxt) = ((var) ? (var)->next : 0); (var); (var) = (nxt), ((nxt) = (var) ? (var)->next : 0))
|
||||
|
||||
static inline void *
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
#include <grub/file.h>
|
||||
#include <grub/list.h>
|
||||
|
||||
enum grub_verify_flags
|
||||
{
|
||||
GRUB_VERIFY_FLAGS_SKIP_VERIFICATION = 1,
|
||||
GRUB_VERIFY_FLAGS_SINGLE_CHUNK = 2,
|
||||
};
|
||||
|
||||
struct grub_file_verifier
|
||||
{
|
||||
struct grub_file_verifier *next;
|
||||
struct grub_file_verifier **prev;
|
||||
|
||||
const char *name;
|
||||
|
||||
/* Check if file needs to be verified and set up context. */
|
||||
/* init/read/fini is structured in the same way as hash interface. */
|
||||
grub_err_t (*init) (grub_file_t io, enum grub_file_type type,
|
||||
void **context, enum grub_verify_flags *verify_flags);
|
||||
/* Right now we pass the whole file in one call but it
|
||||
will change in the future. If you insist on single buffer we can
|
||||
you need to set GRUB_VERIFY_FLAGS_SINGLE_CHUNK in verify_flags.
|
||||
*/
|
||||
grub_err_t (*write) (void *context, void *buf, grub_size_t sz);
|
||||
grub_err_t (*fini) (void *context);
|
||||
void (*close) (void *context);
|
||||
};
|
||||
|
||||
extern struct grub_file_verifier *grub_file_verifiers;
|
||||
|
||||
static inline void
|
||||
grub_verifier_register (struct grub_file_verifier *ver)
|
||||
{
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_file_verifiers), GRUB_AS_LIST (ver));
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_verifier_unregister (struct grub_file_verifier *ver)
|
||||
{
|
||||
grub_list_remove (GRUB_AS_LIST (ver));
|
||||
}
|
||||
Reference in new issue
Block a user