forked from mirrors/linux
		
	oprofile, x86: fix init_sysfs error handling
On failure init_sysfs() might not properly free resources. The error code of the function is not checked. And, when reinitializing the exit function might be called twice. This patch fixes all this. Cc: stable@kernel.org Signed-off-by: Robert Richter <robert.richter@amd.com>
This commit is contained in:
		
							parent
							
								
									750d857c68
								
							
						
					
					
						commit
						10f0412f57
					
				
					 1 changed files with 13 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -568,8 +568,13 @@ static int __init init_sysfs(void)
 | 
			
		|||
	int error;
 | 
			
		||||
 | 
			
		||||
	error = sysdev_class_register(&oprofile_sysclass);
 | 
			
		||||
	if (!error)
 | 
			
		||||
		error = sysdev_register(&device_oprofile);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
 | 
			
		||||
	error = sysdev_register(&device_oprofile);
 | 
			
		||||
	if (error)
 | 
			
		||||
		sysdev_class_unregister(&oprofile_sysclass);
 | 
			
		||||
 | 
			
		||||
	return error;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -695,6 +700,8 @@ int __init op_nmi_init(struct oprofile_operations *ops)
 | 
			
		|||
	char *cpu_type = NULL;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
 | 
			
		||||
	using_nmi = 0;
 | 
			
		||||
 | 
			
		||||
	if (!cpu_has_apic)
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -774,7 +781,10 @@ int __init op_nmi_init(struct oprofile_operations *ops)
 | 
			
		|||
 | 
			
		||||
	mux_init(ops);
 | 
			
		||||
 | 
			
		||||
	init_sysfs();
 | 
			
		||||
	ret = init_sysfs();
 | 
			
		||||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	using_nmi = 1;
 | 
			
		||||
	printk(KERN_INFO "oprofile: using NMI interrupt.\n");
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue