struct hist_elt_data {
        char *comm;
        u64 *var_ref_vals;
-       char *field_var_str[SYNTH_FIELDS_MAX];
+       char **field_var_str;
+       int n_field_var_str;
 };
 
 struct snapshot_context {
 {
        unsigned int i;
 
-       for (i = 0; i < SYNTH_FIELDS_MAX; i++)
+       for (i = 0; i < elt_data->n_field_var_str; i++)
                kfree(elt_data->field_var_str[i]);
 
+       kfree(elt_data->field_var_str);
+
        kfree(elt_data->comm);
        kfree(elt_data);
 }
 
        size = STR_VAR_LEN_MAX;
 
+       elt_data->field_var_str = kcalloc(n_str, sizeof(char *), GFP_KERNEL);
+       if (!elt_data->field_var_str) {
+               hist_elt_data_free(elt_data);
+               return -EINVAL;
+       }
+       elt_data->n_field_var_str = n_str;
+
        for (i = 0; i < n_str; i++) {
                elt_data->field_var_str[i] = kzalloc(size, GFP_KERNEL);
                if (!elt_data->field_var_str[i]) {