From jani.nikula at linux.intel.com Mon Dec 16 11:47:37 2024 From: jani.nikula at linux.intel.com (Jani Nikula) Date: Mon, 16 Dec 2024 13:47:37 +0200 Subject: [PATCH 1/5] drm/sysfs: Constify 'struct bin_attribute' In-Reply-To: <20241216-sysfs-const-bin_attr-drm-v1-1-210f2b36b9bf@weissschuh.net> References: <20241216-sysfs-const-bin_attr-drm-v1-0-210f2b36b9bf@weissschuh.net> <20241216-sysfs-const-bin_attr-drm-v1-1-210f2b36b9bf@weissschuh.net> Message-ID: <87r067svc6.fsf@intel.com> On Mon, 16 Dec 2024, Thomas Wei?schuh wrote: > 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 Reviewed-by: Jani Nikula > --- > drivers/gpu/drm/drm_sysfs.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c > index fb3bbb6adcd16f3f325a2ae8e35f41851c00b272..60c1f26edb6fad23153c32a29fd3be02700fc938 100644 > --- a/drivers/gpu/drm/drm_sysfs.c > +++ b/drivers/gpu/drm/drm_sysfs.c > @@ -261,7 +261,7 @@ static ssize_t enabled_show(struct device *device, > } > > static ssize_t edid_show(struct file *filp, struct kobject *kobj, > - struct bin_attribute *attr, char *buf, loff_t off, > + const struct bin_attribute *attr, char *buf, loff_t off, > size_t count) > { > struct device *connector_dev = kobj_to_dev(kobj); > @@ -315,21 +315,21 @@ static struct attribute *connector_dev_attrs[] = { > NULL > }; > > -static struct bin_attribute edid_attr = { > +static const struct bin_attribute edid_attr = { > .attr.name = "edid", > .attr.mode = 0444, > .size = 0, > - .read = edid_show, > + .read_new = edid_show, > }; > > -static struct bin_attribute *connector_bin_attrs[] = { > +static const struct bin_attribute *const connector_bin_attrs[] = { > &edid_attr, > NULL > }; > > static const struct attribute_group connector_dev_group = { > .attrs = connector_dev_attrs, > - .bin_attrs = connector_bin_attrs, > + .bin_attrs_new = connector_bin_attrs, > }; > > static const struct attribute_group *connector_dev_groups[] = { -- Jani Nikula, Intel From jani.nikula at linux.intel.com Mon Dec 16 11:48:13 2024 From: jani.nikula at linux.intel.com (Jani Nikula) Date: Mon, 16 Dec 2024 13:48:13 +0200 Subject: [PATCH 3/5] drm/i915: Constify 'struct bin_attribute' In-Reply-To: <20241216-sysfs-const-bin_attr-drm-v1-3-210f2b36b9bf@weissschuh.net> References: <20241216-sysfs-const-bin_attr-drm-v1-0-210f2b36b9bf@weissschuh.net> <20241216-sysfs-const-bin_attr-drm-v1-3-210f2b36b9bf@weissschuh.net> Message-ID: <87o71bsvb6.fsf@intel.com> On Mon, 16 Dec 2024, Thomas Wei?schuh wrote: > 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 Reviewed-by: Jani Nikula > --- > drivers/gpu/drm/i915/i915_gpu_error.c | 8 ++++---- > drivers/gpu/drm/i915/i915_sysfs.c | 12 ++++++------ > 2 files changed, 10 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c > index 71c0daef19962660086b37fe55ca2d6b01f2bb9a..a4cb4e731bdd72201c91541fb86e827e96214a8b 100644 > --- a/drivers/gpu/drm/i915/i915_gpu_error.c > +++ b/drivers/gpu/drm/i915/i915_gpu_error.c > @@ -2491,7 +2491,7 @@ void i915_gpu_error_debugfs_register(struct drm_i915_private *i915) > } > > static ssize_t error_state_read(struct file *filp, struct kobject *kobj, > - struct bin_attribute *attr, char *buf, > + const struct bin_attribute *attr, char *buf, > loff_t off, size_t count) > { > > @@ -2527,7 +2527,7 @@ static ssize_t error_state_read(struct file *filp, struct kobject *kobj, > } > > static ssize_t error_state_write(struct file *file, struct kobject *kobj, > - struct bin_attribute *attr, char *buf, > + const struct bin_attribute *attr, char *buf, > loff_t off, size_t count) > { > struct device *kdev = kobj_to_dev(kobj); > @@ -2543,8 +2543,8 @@ static const struct bin_attribute error_state_attr = { > .attr.name = "error", > .attr.mode = S_IRUSR | S_IWUSR, > .size = 0, > - .read = error_state_read, > - .write = error_state_write, > + .read_new = error_state_read, > + .write_new = error_state_write, > }; > > void i915_gpu_error_sysfs_setup(struct drm_i915_private *i915) > diff --git a/drivers/gpu/drm/i915/i915_sysfs.c b/drivers/gpu/drm/i915/i915_sysfs.c > index 8775beab9cb8438c2e8abb0f9d8104dcba7c0df3..f936e8f1f12942287a5a7d6aa7db6ed3a4c28281 100644 > --- a/drivers/gpu/drm/i915/i915_sysfs.c > +++ b/drivers/gpu/drm/i915/i915_sysfs.c > @@ -60,7 +60,7 @@ static int l3_access_valid(struct drm_i915_private *i915, loff_t offset) > > static ssize_t > i915_l3_read(struct file *filp, struct kobject *kobj, > - struct bin_attribute *attr, char *buf, > + const struct bin_attribute *attr, char *buf, > loff_t offset, size_t count) > { > struct device *kdev = kobj_to_dev(kobj); > @@ -88,7 +88,7 @@ i915_l3_read(struct file *filp, struct kobject *kobj, > > static ssize_t > i915_l3_write(struct file *filp, struct kobject *kobj, > - struct bin_attribute *attr, char *buf, > + const struct bin_attribute *attr, char *buf, > loff_t offset, size_t count) > { > struct device *kdev = kobj_to_dev(kobj); > @@ -140,8 +140,8 @@ i915_l3_write(struct file *filp, struct kobject *kobj, > static const struct bin_attribute dpf_attrs = { > .attr = {.name = "l3_parity", .mode = (S_IRUSR | S_IWUSR)}, > .size = GEN7_L3LOG_SIZE, > - .read = i915_l3_read, > - .write = i915_l3_write, > + .read_new = i915_l3_read, > + .write_new = i915_l3_write, > .mmap = NULL, > .private = (void *)0 > }; > @@ -149,8 +149,8 @@ static const struct bin_attribute dpf_attrs = { > static const struct bin_attribute dpf_attrs_1 = { > .attr = {.name = "l3_parity_slice_1", .mode = (S_IRUSR | S_IWUSR)}, > .size = GEN7_L3LOG_SIZE, > - .read = i915_l3_read, > - .write = i915_l3_write, > + .read_new = i915_l3_read, > + .write_new = i915_l3_write, > .mmap = NULL, > .private = (void *)1 > }; -- Jani Nikula, Intel From alexdeucher at gmail.com Mon Dec 16 19:53:26 2024 From: alexdeucher at gmail.com (Alex Deucher) Date: Mon, 16 Dec 2024 14:53:26 -0500 Subject: [PATCH 4/5] drm/amdgpu: Constify 'struct bin_attribute' In-Reply-To: <20241216-sysfs-const-bin_attr-drm-v1-4-210f2b36b9bf@weissschuh.net> References: <20241216-sysfs-const-bin_attr-drm-v1-0-210f2b36b9bf@weissschuh.net> <20241216-sysfs-const-bin_attr-drm-v1-4-210f2b36b9bf@weissschuh.net> Message-ID: On Mon, Dec 16, 2024 at 6:53?AM Thomas Wei?schuh wrote: > > 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 Reviewed-by: Alex Deucher > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 +++--- > drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 14 +++++++------- > drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 13 ++++++------- > 3 files changed, 16 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index d272d95dd5b2f5eb83be279281d55af323f7f508..88459de2cd2e47390d33e5939875c3322b740b4d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -223,7 +223,7 @@ static DEVICE_ATTR(pcie_replay_count, 0444, > amdgpu_device_get_pcie_replay_count, NULL); > > static ssize_t amdgpu_sysfs_reg_state_get(struct file *f, struct kobject *kobj, > - struct bin_attribute *attr, char *buf, > + const struct bin_attribute *attr, char *buf, > loff_t ppos, size_t count) > { > struct device *dev = kobj_to_dev(kobj); > @@ -259,8 +259,8 @@ static ssize_t amdgpu_sysfs_reg_state_get(struct file *f, struct kobject *kobj, > return bytes_read; > } > > -BIN_ATTR(reg_state, 0444, amdgpu_sysfs_reg_state_get, NULL, > - AMDGPU_SYS_REG_STATE_END); > +static const BIN_ATTR(reg_state, 0444, amdgpu_sysfs_reg_state_get, NULL, > + AMDGPU_SYS_REG_STATE_END); > > int amdgpu_reg_state_sysfs_init(struct amdgpu_device *adev) > { > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > index 448f9e742983f3ef0c5fccc18d85f0c2449aa08e..cda25174730a6852bcb6e01aeec858faad172b19 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > @@ -3969,7 +3969,7 @@ int is_psp_fw_valid(struct psp_bin_desc bin) > } > > static ssize_t amdgpu_psp_vbflash_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) > { > struct device *dev = kobj_to_dev(kobj); > @@ -4005,7 +4005,7 @@ static ssize_t amdgpu_psp_vbflash_write(struct file *filp, struct kobject *kobj, > } > > static ssize_t amdgpu_psp_vbflash_read(struct file *filp, struct kobject *kobj, > - struct bin_attribute *bin_attr, char *buffer, > + const struct bin_attribute *bin_attr, char *buffer, > loff_t pos, size_t count) > { > struct device *dev = kobj_to_dev(kobj); > @@ -4057,11 +4057,11 @@ static ssize_t amdgpu_psp_vbflash_read(struct file *filp, struct kobject *kobj, > * Writing to this file will stage an IFWI for update. Reading from this file > * will trigger the update process. > */ > -static struct bin_attribute psp_vbflash_bin_attr = { > +static const struct bin_attribute psp_vbflash_bin_attr = { > .attr = {.name = "psp_vbflash", .mode = 0660}, > .size = 0, > - .write = amdgpu_psp_vbflash_write, > - .read = amdgpu_psp_vbflash_read, > + .write_new = amdgpu_psp_vbflash_write, > + .read_new = amdgpu_psp_vbflash_read, > }; > > /** > @@ -4088,7 +4088,7 @@ static ssize_t amdgpu_psp_vbflash_status(struct device *dev, > } > static DEVICE_ATTR(psp_vbflash_status, 0440, amdgpu_psp_vbflash_status, NULL); > > -static struct bin_attribute *bin_flash_attrs[] = { > +static const struct bin_attribute *const bin_flash_attrs[] = { > &psp_vbflash_bin_attr, > NULL > }; > @@ -4124,7 +4124,7 @@ static umode_t amdgpu_bin_flash_attr_is_visible(struct kobject *kobj, > > const struct attribute_group amdgpu_flash_attr_group = { > .attrs = flash_attrs, > - .bin_attrs = bin_flash_attrs, > + .bin_attrs_new = bin_flash_attrs, > .is_bin_visible = amdgpu_bin_flash_attr_is_visible, > .is_visible = amdgpu_flash_attr_is_visible, > }; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c > index 4c9fa24dd9726a405935907524ed7bf7862779d1..2991e0967b5bfc848328aaa59ddfb9a8f202bae9 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c > @@ -1732,7 +1732,7 @@ static char *amdgpu_ras_badpage_flags_str(unsigned int flags) > */ > > static ssize_t amdgpu_ras_sysfs_badpages_read(struct file *f, > - struct kobject *kobj, struct bin_attribute *attr, > + struct kobject *kobj, const struct bin_attribute *attr, > char *buf, loff_t ppos, size_t count) > { > struct amdgpu_ras *con = > @@ -2063,8 +2063,8 @@ void amdgpu_ras_debugfs_create_all(struct amdgpu_device *adev) > /* debugfs end */ > > /* ras fs */ > -static BIN_ATTR(gpu_vram_bad_pages, S_IRUGO, > - amdgpu_ras_sysfs_badpages_read, NULL, 0); > +static const BIN_ATTR(gpu_vram_bad_pages, S_IRUGO, > + amdgpu_ras_sysfs_badpages_read, NULL, 0); > static DEVICE_ATTR(features, S_IRUGO, > amdgpu_ras_sysfs_features_read, NULL); > static DEVICE_ATTR(version, 0444, > @@ -2086,7 +2086,7 @@ static int amdgpu_ras_fs_init(struct amdgpu_device *adev) > &con->event_state_attr.attr, > NULL > }; > - struct bin_attribute *bin_attrs[] = { > + const struct bin_attribute *bin_attrs[] = { > NULL, > NULL, > }; > @@ -2112,11 +2112,10 @@ static int amdgpu_ras_fs_init(struct amdgpu_device *adev) > > if (amdgpu_bad_page_threshold != 0) { > /* add bad_page_features entry */ > - bin_attr_gpu_vram_bad_pages.private = NULL; > con->badpages_attr = bin_attr_gpu_vram_bad_pages; > + sysfs_bin_attr_init(&con->badpages_attr); > bin_attrs[0] = &con->badpages_attr; > - group.bin_attrs = bin_attrs; > - sysfs_bin_attr_init(bin_attrs[0]); > + group.bin_attrs_new = bin_attrs; > } > > r = sysfs_create_group(&adev->dev->kobj, &group); > > -- > 2.47.1 >