mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	drm/amdgpu: 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: 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>
This commit is contained in:
		
							parent
							
								
									e3626a4565
								
							
						
					
					
						commit
						2d0f5001b6
					
				
					 3 changed files with 16 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -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,7 +261,7 @@ 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,
 | 
			
		||||
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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 @@ 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,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,7 +2065,7 @@ void amdgpu_ras_debugfs_create_all(struct amdgpu_device *adev)
 | 
			
		|||
/* debugfs end */
 | 
			
		||||
 | 
			
		||||
/* ras fs */
 | 
			
		||||
static BIN_ATTR(gpu_vram_bad_pages, S_IRUGO,
 | 
			
		||||
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);
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue