diff options
| author | Cedric Xing <cedric.xing@intel.com> | 2025-05-13 11:41:54 -0500 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2025-05-13 11:02:33 -0700 |
| commit | b0ca403a9e381140cf626ca94519fb468370fc3e (patch) | |
| tree | 8a4aec091751920b58e7cfdb7a06d0329ce8d7b9 | |
| parent | 1f450730ff39807360e96105adbec1c818905a70 (diff) | |
tsm-mr: Fix init breakage after bin_attrs constification by scoping non-const pointers to init phase
Commit 9bec944506fa ("sysfs: constify attribute_group::bin_attrs") enforced
the ro-after-init principle by making elements of bin_attrs_new pointing to
const.
To align with this change, introduce a temporary variable `bap` within the
initialization loop. This improves code clarity by explicitly marking the
initialization scope and eliminates the need for type casts when assigning
to bin_attrs_new.
Signed-off-by: Cedric Xing <cedric.xing@intel.com>
Link: https://patch.msgid.link/20250513164154.10109-1-cedric.xing@intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
| -rw-r--r-- | drivers/virt/coco/tsm-mr.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/drivers/virt/coco/tsm-mr.c b/drivers/virt/coco/tsm-mr.c index 1f0c43a516fb..feb30af90a20 100644 --- a/drivers/virt/coco/tsm-mr.c +++ b/drivers/virt/coco/tsm-mr.c @@ -173,7 +173,7 @@ tsm_mr_create_attribute_group(const struct tsm_measurements *tm) * so that we don't have to free MR names one-by-one in * tsm_mr_free_attribute_group() */ - const struct bin_attribute * const *attrs __free(kfree) = + const struct bin_attribute **attrs __free(kfree) = kzalloc(sizeof(*attrs) * (tm->nr_mrs + 1) + nlen, GFP_KERNEL); struct tm_context *ctx __free(kfree) = kzalloc(struct_size(ctx, mrs, tm->nr_mrs), GFP_KERNEL); @@ -187,16 +187,14 @@ tsm_mr_create_attribute_group(const struct tsm_measurements *tm) end = name + nlen; for (size_t i = 0; i < tm->nr_mrs; ++i) { - /* break const for init */ - struct bin_attribute **bas = (struct bin_attribute **)attrs; + struct bin_attribute *bap = &ctx->mrs[i]; - bas[i] = &ctx->mrs[i]; - sysfs_bin_attr_init(bas[i]); + sysfs_bin_attr_init(bap); if (tm->mrs[i].mr_flags & TSM_MR_F_NOHASH) - bas[i]->attr.name = tm->mrs[i].mr_name; + bap->attr.name = tm->mrs[i].mr_name; else if (name < end) { - bas[i]->attr.name = name; + bap->attr.name = name; name += snprintf(name, end - name, "%s:%s", tm->mrs[i].mr_name, hash_algo_name[tm->mrs[i].mr_hash]); @@ -206,21 +204,23 @@ tsm_mr_create_attribute_group(const struct tsm_measurements *tm) /* check for duplicated MR definitions */ for (size_t j = 0; j < i; ++j) - if (!strcmp(bas[i]->attr.name, bas[j]->attr.name)) + if (!strcmp(bap->attr.name, attrs[j]->attr.name)) return ERR_PTR(-EINVAL); if (tm->mrs[i].mr_flags & TSM_MR_F_READABLE) { - bas[i]->attr.mode |= 0444; - bas[i]->read_new = tm_digest_read; + bap->attr.mode |= 0444; + bap->read_new = tm_digest_read; } if (tm->mrs[i].mr_flags & TSM_MR_F_WRITABLE) { - bas[i]->attr.mode |= 0200; - bas[i]->write_new = tm_digest_write; + bap->attr.mode |= 0200; + bap->write_new = tm_digest_write; } - bas[i]->size = tm->mrs[i].mr_size; - bas[i]->private = ctx; + bap->size = tm->mrs[i].mr_size; + bap->private = ctx; + + attrs[i] = bap; } if (name != end) @@ -244,7 +244,7 @@ EXPORT_SYMBOL_GPL(tsm_mr_create_attribute_group); void tsm_mr_free_attribute_group(const struct attribute_group *attr_grp) { if (!IS_ERR_OR_NULL(attr_grp)) { - kfree(attr_grp->bin_attrs); + kfree(attr_grp->bin_attrs_new); kfree(container_of(attr_grp, struct tm_context, agrp)); } } |
