diff options
author | Paul Moore <pmoore@redhat.com> | 2012-08-27 19:21:12 -0400 |
---|---|---|
committer | Paul Moore <pmoore@redhat.com> | 2012-09-27 17:15:02 -0400 |
commit | 2bc4a32037649359df0d04e5b308ada77dc01225 (patch) | |
tree | af94a75060c9547e473f8ee5c54f7b9c4617ce37 /src/db.h | |
parent | 5bd86eb56fb4fcc1d82bb199cf8ab580dff82133 (diff) | |
download | libseccomp-2bc4a32037649359df0d04e5b308ada77dc01225.tar.gz |
db: enable basic filter collection support
In order to support systems that can run applications from multiple
architectures we need to be able to support multiple filter DBs; were
calling this "filter collections". This patch adds the basic
collection support such that it passes all of the existing tests;
further work may be necessary once we start using the multiple filter
capabilities.
Signed-off-by: Paul Moore <pmoore@redhat.com>
Diffstat (limited to 'src/db.h')
-rw-r--r-- | src/db.h | 37 |
1 files changed, 25 insertions, 12 deletions
@@ -131,16 +131,23 @@ struct db_filter_attr { }; struct db_filter { + /* target architecture */ + const struct arch_def *arch; + + /* syscall filters, kept as a sorted single-linked list */ + struct db_sys_list *syscalls; +}; + +struct db_filter_col { /* verification / state */ int state; - /* target architecture */ - const struct arch_def *arch; /* attributes */ struct db_filter_attr attr; - /* syscall filters, kept as a sorted single-linked list */ - struct db_sys_list *syscalls; + /* individual filters */ + struct db_filter **filters; + unsigned int filter_cnt; }; /** @@ -157,16 +164,22 @@ struct db_filter { int db_action_valid(uint32_t action); -void db_reset(struct db_filter *db, uint32_t def_action); -struct db_filter *db_init(const struct arch_def *arch, uint32_t def_action); -void db_release(struct db_filter *db); +struct db_filter_col *db_col_init(uint32_t def_action); +void db_col_reset(struct db_filter_col *col, uint32_t def_action); +void db_col_release(struct db_filter_col *col); -int db_valid(struct db_filter *db); +int db_col_valid(struct db_filter_col *col); -int db_attr_get(const struct db_filter *db, - enum scmp_filter_attr attr, uint32_t *value); -int db_attr_set(struct db_filter *db, - enum scmp_filter_attr attr, uint32_t value); +int db_col_attr_get(const struct db_filter_col *col, + enum scmp_filter_attr attr, uint32_t *value); +int db_col_attr_set(struct db_filter_col *col, + enum scmp_filter_attr attr, uint32_t value); + +int db_col_db_add(struct db_filter_col *col, struct db_filter *db); + +struct db_filter *db_init(const struct arch_def *arch); +void db_reset(struct db_filter *db); +void db_release(struct db_filter *db); int db_syscall_priority(struct db_filter *db, unsigned int syscall, uint8_t priority); |