]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Constify 'struct bin_attribute'
authorThomas Weißschuh <linux@weissschuh.net>
Mon, 16 Dec 2024 11:34:50 +0000 (12:34 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Feb 2025 08:20:31 +0000 (09:20 +0100)
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 <linux@weissschuh.net>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Link: https://lore.kernel.org/r/20241216-sysfs-const-bin_attr-drm-v1-4-210f2b36b9bf@weissschuh.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c

index d100bb7a137cdfe3f82f43a1d9fe26f73bea112d..e6fa63f97687a5b4abae528a3bbd447dc73fc63e 100644 (file)
@@ -225,7 +225,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);
@@ -261,8 +261,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)
 {
index e5fc80ed06eaea285481eff414c31fa6b38f2893..bb02846797eb7ca978c41bece6dcab36ab435f73 100644 (file)
@@ -4000,7 +4000,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);
@@ -4036,7 +4036,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);
@@ -4088,11 +4088,11 @@ rel_buf:
  * 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,
 };
 
 /**
@@ -4119,7 +4119,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
 };
@@ -4155,7 +4155,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,
 };
index f0924aa3f4e485ac60f05f5d71e7d65f5ed162c9..83a5f7180cde12ec5b2079ef103b0140840ab742 100644 (file)
@@ -1733,7 +1733,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 =
@@ -2065,8 +2065,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,
@@ -2088,7 +2088,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,
        };
@@ -2114,11 +2114,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);