lkml.org 
[lkml]   [2022]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 5/7] powerpc/secvar: Handle max object size in the consumer
    Date
    Currently the max object size is handled in the core secvar code with an
    entirely OPAL-specific implementation, so create a new max_size() op and
    move the existing implementation into the powernv platform. Should be
    no functional change.

    Signed-off-by: Russell Currey <ruscur@russell.cc>
    ---
    arch/powerpc/include/asm/secvar.h | 1 +
    arch/powerpc/kernel/secvar-sysfs.c | 17 +++--------------
    arch/powerpc/platforms/powernv/opal-secvar.c | 19 +++++++++++++++++++
    3 files changed, 23 insertions(+), 14 deletions(-)

    diff --git a/arch/powerpc/include/asm/secvar.h b/arch/powerpc/include/asm/secvar.h
    index 3b7e5a3625bd..92d2c051918b 100644
    --- a/arch/powerpc/include/asm/secvar.h
    +++ b/arch/powerpc/include/asm/secvar.h
    @@ -21,6 +21,7 @@ struct secvar_operations {
    int (*set)(const char *key, uint64_t key_len, u8 *data,
    uint64_t data_size);
    ssize_t (*format)(char *buf);
    + int (*max_size)(uint64_t *max_size);
    };

    #ifdef CONFIG_PPC_SECURE_BOOT
    diff --git a/arch/powerpc/kernel/secvar-sysfs.c b/arch/powerpc/kernel/secvar-sysfs.c
    index 190238f51335..aa1daec480e1 100644
    --- a/arch/powerpc/kernel/secvar-sysfs.c
    +++ b/arch/powerpc/kernel/secvar-sysfs.c
    @@ -122,27 +122,16 @@ static struct kobj_type secvar_ktype = {
    static int update_kobj_size(void)
    {

    - struct device_node *node;
    u64 varsize;
    - int rc = 0;
    + int rc = secvar_ops->max_size(&varsize);

    - node = of_find_compatible_node(NULL, NULL, "ibm,secvar-backend");
    - if (!of_device_is_available(node)) {
    - rc = -ENODEV;
    - goto out;
    - }
    -
    - rc = of_property_read_u64(node, "max-var-size", &varsize);
    if (rc)
    - goto out;
    + return rc;

    data_attr.size = varsize;
    update_attr.size = varsize;

    -out:
    - of_node_put(node);
    -
    - return rc;
    + return 0;
    }

    static int secvar_sysfs_load(void)
    diff --git a/arch/powerpc/platforms/powernv/opal-secvar.c b/arch/powerpc/platforms/powernv/opal-secvar.c
    index 5e9de06b2533..07260460e966 100644
    --- a/arch/powerpc/platforms/powernv/opal-secvar.c
    +++ b/arch/powerpc/platforms/powernv/opal-secvar.c
    @@ -125,11 +125,30 @@ static ssize_t opal_secvar_format(char *buf)
    return rc;
    }

    +static int opal_secvar_max_size(uint64_t *max_size)
    +{
    + int rc;
    + struct device_node *node;
    +
    + node = of_find_compatible_node(NULL, NULL, "ibm,secvar-backend");
    + if (!of_device_is_available(node)) {
    + rc = -ENODEV;
    + goto out;
    + }
    +
    + rc = of_property_read_u64(node, "max-var-size", max_size);
    +
    +out:
    + of_node_put(node);
    + return rc;
    +}
    +
    static const struct secvar_operations opal_secvar_ops = {
    .get = opal_get_variable,
    .get_next = opal_get_next_variable,
    .set = opal_set_variable,
    .format = opal_secvar_format,
    + .max_size = opal_secvar_max_size,
    };

    static int opal_secvar_probe(struct platform_device *pdev)
    --
    2.38.1
    \
     
     \ /
      Last update: 2023-03-26 23:23    [W:4.172 / U:0.724 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site