The sysfs core now allows instances of 'struct bin_attribute' to be
moved into read-only memory. Make use of that to protect them against
accidental or malicious modifications.

Signed-off-by: Thomas Weißschuh <li...@weissschuh.net>
---
 arch/powerpc/platforms/powernv/opal-core.c   | 10 +++++-----
 arch/powerpc/platforms/powernv/opal-dump.c   |  4 ++--
 arch/powerpc/platforms/powernv/opal-elog.c   |  4 ++--
 arch/powerpc/platforms/powernv/opal-flash.c  |  4 ++--
 arch/powerpc/platforms/powernv/opal-msglog.c |  6 +++---
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/opal-core.c 
b/arch/powerpc/platforms/powernv/opal-core.c
index 
c9a9b759cc928b931a0ac18f7ed7469a6ecd52b5..d95a5f67211b73724d61a0404336a32116872527
 100644
--- a/arch/powerpc/platforms/powernv/opal-core.c
+++ b/arch/powerpc/platforms/powernv/opal-core.c
@@ -159,7 +159,7 @@ static Elf64_Word *__init auxv_to_elf64_notes(Elf64_Word 
*buf,
  * Returns number of bytes read on success, -errno on failure.
  */
 static ssize_t read_opalcore(struct file *file, struct kobject *kobj,
-                            struct bin_attribute *bin_attr, char *to,
+                            const struct bin_attribute *bin_attr, char *to,
                             loff_t pos, size_t count)
 {
        struct opalcore *m;
@@ -206,9 +206,9 @@ static ssize_t read_opalcore(struct file *file, struct 
kobject *kobj,
        return (tpos - pos);
 }
 
-static struct bin_attribute opal_core_attr = {
+static struct bin_attribute opal_core_attr __ro_after_init = {
        .attr = {.name = "core", .mode = 0400},
-       .read = read_opalcore
+       .read_new = read_opalcore
 };
 
 /*
@@ -599,7 +599,7 @@ static struct attribute *mpipl_attr[] = {
        NULL,
 };
 
-static struct bin_attribute *mpipl_bin_attr[] = {
+static const struct bin_attribute *const mpipl_bin_attr[] = {
        &opal_core_attr,
        NULL,
 
@@ -607,7 +607,7 @@ static struct bin_attribute *mpipl_bin_attr[] = {
 
 static const struct attribute_group mpipl_group = {
        .attrs = mpipl_attr,
-       .bin_attrs =  mpipl_bin_attr,
+       .bin_attrs_new =  mpipl_bin_attr,
 };
 
 static int __init opalcore_init(void)
diff --git a/arch/powerpc/platforms/powernv/opal-dump.c 
b/arch/powerpc/platforms/powernv/opal-dump.c
index 
608e4b68c5ea9d1610e2270b1ba08ed12b69860e..27e25693cf3990e4f53687d38355c4f4c0a7d8c5
 100644
--- a/arch/powerpc/platforms/powernv/opal-dump.c
+++ b/arch/powerpc/platforms/powernv/opal-dump.c
@@ -286,7 +286,7 @@ static int64_t dump_read_data(struct dump_obj *dump)
 }
 
 static ssize_t dump_attr_read(struct file *filep, struct kobject *kobj,
-                             struct bin_attribute *bin_attr,
+                             const struct bin_attribute *bin_attr,
                              char *buffer, loff_t pos, size_t count)
 {
        ssize_t rc;
@@ -342,7 +342,7 @@ static void create_dump_obj(uint32_t id, size_t size, 
uint32_t type)
        dump->dump_attr.attr.name = "dump";
        dump->dump_attr.attr.mode = 0400;
        dump->dump_attr.size = size;
-       dump->dump_attr.read = dump_attr_read;
+       dump->dump_attr.read_new = dump_attr_read;
 
        dump->id = id;
        dump->size = size;
diff --git a/arch/powerpc/platforms/powernv/opal-elog.c 
b/arch/powerpc/platforms/powernv/opal-elog.c
index 
5db1e733143bfa8c7cb4bda1ab604e825b3f176f..de33f354e9fdd1440f39407aecf1e7085e9b52df
 100644
--- a/arch/powerpc/platforms/powernv/opal-elog.c
+++ b/arch/powerpc/platforms/powernv/opal-elog.c
@@ -156,7 +156,7 @@ static const struct kobj_type elog_ktype = {
 #define OPAL_MAX_ERRLOG_SIZE   16384
 
 static ssize_t raw_attr_read(struct file *filep, struct kobject *kobj,
-                            struct bin_attribute *bin_attr,
+                            const struct bin_attribute *bin_attr,
                             char *buffer, loff_t pos, size_t count)
 {
        int opal_rc;
@@ -203,7 +203,7 @@ static void create_elog_obj(uint64_t id, size_t size, 
uint64_t type)
        elog->raw_attr.attr.name = "raw";
        elog->raw_attr.attr.mode = 0400;
        elog->raw_attr.size = size;
-       elog->raw_attr.read = raw_attr_read;
+       elog->raw_attr.read_new = raw_attr_read;
 
        elog->id = id;
        elog->size = size;
diff --git a/arch/powerpc/platforms/powernv/opal-flash.c 
b/arch/powerpc/platforms/powernv/opal-flash.c
index 
d5ea04e8e4c526b99ca8f1ab613266b385362d82..fd8c8621e97340cdf5570d72ce82f86516cb2786
 100644
--- a/arch/powerpc/platforms/powernv/opal-flash.c
+++ b/arch/powerpc/platforms/powernv/opal-flash.c
@@ -432,7 +432,7 @@ static int alloc_image_buf(char *buffer, size_t count)
  * and pre-allocate required memory.
  */
 static ssize_t image_data_write(struct file *filp, struct kobject *kobj,
-                               struct bin_attribute *bin_attr,
+                               const struct bin_attribute *bin_attr,
                                char *buffer, loff_t pos, size_t count)
 {
        int rc;
@@ -493,7 +493,7 @@ static ssize_t image_data_write(struct file *filp, struct 
kobject *kobj,
 static const struct bin_attribute image_data_attr = {
        .attr = {.name = "image", .mode = 0200},
        .size = MAX_IMAGE_SIZE, /* Limit image size */
-       .write = image_data_write,
+       .write_new = image_data_write,
 };
 
 static struct kobj_attribute validate_attribute =
diff --git a/arch/powerpc/platforms/powernv/opal-msglog.c 
b/arch/powerpc/platforms/powernv/opal-msglog.c
index 
22d6efe17b0d01223d1c216a9fb21203a350bddf..f1988d0ab45ce49f09f47c9e8859cc5dfcee3a6d
 100644
--- a/arch/powerpc/platforms/powernv/opal-msglog.c
+++ b/arch/powerpc/platforms/powernv/opal-msglog.c
@@ -94,15 +94,15 @@ ssize_t opal_msglog_copy(char *to, loff_t pos, size_t count)
 }
 
 static ssize_t opal_msglog_read(struct file *file, struct kobject *kobj,
-                               struct bin_attribute *bin_attr, char *to,
+                               const struct bin_attribute *bin_attr, char *to,
                                loff_t pos, size_t count)
 {
        return opal_msglog_copy(to, pos, count);
 }
 
-static struct bin_attribute opal_msglog_attr = {
+static struct bin_attribute opal_msglog_attr __ro_after_init = {
        .attr = {.name = "msglog", .mode = 0400},
-       .read = opal_msglog_read
+       .read_new = opal_msglog_read
 };
 
 struct memcons *__init memcons_init(struct device_node *node, const char 
*mc_prop_name)

-- 
2.47.1


Reply via email to