lkml.org 
[lkml]   [2023]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 08/26] powerpc/secvar: Handle max object size in the consumer
    Date
    From: Russell Currey <ruscur@russell.cc>

    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>
    Signed-off-by: Andrew Donnellan <ajd@linux.ibm.com>
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>

    ---

    v3: Change uint64_t type to u64 (mpe)

    v4: Return immediately if node is NULL (gjoyce)
    ---
    arch/powerpc/include/asm/secvar.h | 1 +
    arch/powerpc/kernel/secvar-sysfs.c | 17 +++------------
    arch/powerpc/platforms/powernv/opal-secvar.c | 22 ++++++++++++++++++++
    3 files changed, 26 insertions(+), 14 deletions(-)

    diff --git a/arch/powerpc/include/asm/secvar.h b/arch/powerpc/include/asm/secvar.h
    index 1a2c696a48ad..bf396215903d 100644
    --- a/arch/powerpc/include/asm/secvar.h
    +++ b/arch/powerpc/include/asm/secvar.h
    @@ -18,6 +18,7 @@ struct secvar_operations {
    int (*get_next)(const char *key, u64 *key_len, u64 keybufsize);
    int (*set)(const char *key, u64 key_len, u8 *data, u64 data_size);
    ssize_t (*format)(char *buf, size_t bufsize);
    + int (*max_size)(u64 *max_size);
    };

    #ifdef CONFIG_PPC_SECURE_BOOT
    diff --git a/arch/powerpc/kernel/secvar-sysfs.c b/arch/powerpc/kernel/secvar-sysfs.c
    index e4661559c855..0966806f28c7 100644
    --- a/arch/powerpc/kernel/secvar-sysfs.c
    +++ b/arch/powerpc/kernel/secvar-sysfs.c
    @@ -132,27 +132,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 e33bb703ecbc..a8436bf35e2f 100644
    --- a/arch/powerpc/platforms/powernv/opal-secvar.c
    +++ b/arch/powerpc/platforms/powernv/opal-secvar.c
    @@ -122,11 +122,33 @@ static ssize_t opal_secvar_format(char *buf, size_t bufsize)
    return rc;
    }

    +static int opal_secvar_max_size(u64 *max_size)
    +{
    + int rc;
    + struct device_node *node;
    +
    + node = of_find_compatible_node(NULL, NULL, "ibm,secvar-backend");
    + if (!node)
    + return -ENODEV;
    +
    + 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.39.1
    \
     
     \ /
      Last update: 2023-03-27 00:17    [W:4.772 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site