Commit f2b62c03 authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Greg Kroah-Hartman
Browse files

powerpc/powernv/opal: Constify 'struct bin_attribute'



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: default avatarThomas Weißschuh <linux@weissschuh.net>
Link: https://lore.kernel.org/r/20241216-sysfs-const-bin_attr-powerpc-v1-4-bbed8906f476@weissschuh.net


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f6295766
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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 =
+3 −3
Original line number Diff line number Diff line
@@ -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)