Message ID | 20200120023700.5373-12-erichte@linux.ibm.com |
---|---|
State | Superseded |
Headers | show |
Series | Add initial secure variable storage and backend drivers | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch master (d75e82dbfbb9443efeb3f9a5921ac23605aab469) |
snowpatch_ozlabs/apply_patch | fail | Failed to apply to any branch |
On 1/19/20 9:36 PM, Eric Richter wrote: > Since there is a constructor function for alloc_secvar, there should be a > matching destructor function for any of its non-toplevel allocations. > > This patch introduces dealloc_secvar(), which frees a whole secvar_node > reference including its children allocations. This also updates the > clear_bank_list() helper function to use this destructor. > > Signed-off-by: Eric Richter <erichte@linux.ibm.com> > --- > libstb/secvar/secvar.h | 1 + > libstb/secvar/secvar_util.c | 10 ++++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/libstb/secvar/secvar.h b/libstb/secvar/secvar.h > index 771ff648..1bc00476 100644 > --- a/libstb/secvar/secvar.h > +++ b/libstb/secvar/secvar.h > @@ -45,6 +45,7 @@ extern struct secvar_backend_driver secvar_backend; > void clear_bank_list(struct list_head *bank); > struct secvar_node *alloc_secvar(uint64_t size); > int realloc_secvar(struct secvar_node *node, uint64_t size); > +void dealloc_secvar(struct secvar_node *node); > struct secvar_node *find_secvar(const char *key, uint64_t key_len, struct list_head *bank); > int is_key_empty(const char *key, uint64_t key_len); > int list_length(struct list_head *bank); > diff --git a/libstb/secvar/secvar_util.c b/libstb/secvar/secvar_util.c > index a143d0bc..eb0def29 100644 > --- a/libstb/secvar/secvar_util.c > +++ b/libstb/secvar/secvar_util.c > @@ -64,6 +64,16 @@ int realloc_secvar(struct secvar_node *node, uint64_t size) > return 0; > } > > +void dealloc_secvar(struct secvar_node *node) > +{ > + if (!node) > + return; > + > + if (node->var) > + free(node->var); No need to check node->var, just call free() on it; it knows how to handle NULL as well. > + free(node); > +} > + > struct secvar_node *find_secvar(const char *key, uint64_t key_len, struct list_head *bank) > { > struct secvar_node *node = NULL;
diff --git a/libstb/secvar/secvar.h b/libstb/secvar/secvar.h index 771ff648..1bc00476 100644 --- a/libstb/secvar/secvar.h +++ b/libstb/secvar/secvar.h @@ -45,6 +45,7 @@ extern struct secvar_backend_driver secvar_backend; void clear_bank_list(struct list_head *bank); struct secvar_node *alloc_secvar(uint64_t size); int realloc_secvar(struct secvar_node *node, uint64_t size); +void dealloc_secvar(struct secvar_node *node); struct secvar_node *find_secvar(const char *key, uint64_t key_len, struct list_head *bank); int is_key_empty(const char *key, uint64_t key_len); int list_length(struct list_head *bank); diff --git a/libstb/secvar/secvar_util.c b/libstb/secvar/secvar_util.c index a143d0bc..eb0def29 100644 --- a/libstb/secvar/secvar_util.c +++ b/libstb/secvar/secvar_util.c @@ -64,6 +64,16 @@ int realloc_secvar(struct secvar_node *node, uint64_t size) return 0; } +void dealloc_secvar(struct secvar_node *node) +{ + if (!node) + return; + + if (node->var) + free(node->var); + free(node); +} + struct secvar_node *find_secvar(const char *key, uint64_t key_len, struct list_head *bank) { struct secvar_node *node = NULL;
Since there is a constructor function for alloc_secvar, there should be a matching destructor function for any of its non-toplevel allocations. This patch introduces dealloc_secvar(), which frees a whole secvar_node reference including its children allocations. This also updates the clear_bank_list() helper function to use this destructor. Signed-off-by: Eric Richter <erichte@linux.ibm.com> --- libstb/secvar/secvar.h | 1 + libstb/secvar/secvar_util.c | 10 ++++++++++ 2 files changed, 11 insertions(+)