mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	do_last(): take fput() on error after opening to out:
make it conditional on *opened & FILE_OPENED; in addition to getting rid of exit_fput: thing, it simplifies atomic_open() cleanup on may_open() failure. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									47f9dbd387
								
							
						
					
					
						commit
						fe9ec8291f
					
				
					 1 changed files with 5 additions and 17 deletions
				
			
		
							
								
								
									
										22
									
								
								fs/namei.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								fs/namei.c
									
									
									
									
									
								
							|  | @ -2919,9 +2919,6 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, | |||
| 		acc_mode = 0; | ||||
| 	} | ||||
| 	error = may_open(&file->f_path, acc_mode, open_flag); | ||||
| 	if (error) | ||||
| 		fput(file); | ||||
| 
 | ||||
| out: | ||||
| 	dput(dentry); | ||||
| 	return error; | ||||
|  | @ -3225,18 +3222,13 @@ static int do_last(struct nameidata *nd, | |||
| 	} | ||||
| opened: | ||||
| 	error = open_check_o_direct(file); | ||||
| 	if (error) | ||||
| 		goto exit_fput; | ||||
| 	error = ima_file_check(file, op->acc_mode, *opened); | ||||
| 	if (error) | ||||
| 		goto exit_fput; | ||||
| 
 | ||||
| 	if (will_truncate) { | ||||
| 	if (!error) | ||||
| 		error = ima_file_check(file, op->acc_mode, *opened); | ||||
| 	if (!error && will_truncate) | ||||
| 		error = handle_truncate(file); | ||||
| 		if (error) | ||||
| 			goto exit_fput; | ||||
| 	} | ||||
| out: | ||||
| 	if (unlikely(error) && (*opened & FILE_OPENED)) | ||||
| 		fput(file); | ||||
| 	if (unlikely(error > 0)) { | ||||
| 		WARN_ON(1); | ||||
| 		error = -EINVAL; | ||||
|  | @ -3246,10 +3238,6 @@ static int do_last(struct nameidata *nd, | |||
| 	path_put(&save_parent); | ||||
| 	return error; | ||||
| 
 | ||||
| exit_fput: | ||||
| 	fput(file); | ||||
| 	goto out; | ||||
| 
 | ||||
| stale_open: | ||||
| 	/* If no saved parent or already retried then can't retry */ | ||||
| 	if (!save_parent.dentry || retried) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Al Viro
						Al Viro