mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	autofs: Fix automounts by using current_real_cred()->uid
Seth Forshee reports that in 4.8-rcN some automounts are failing
because the requesting the automount changed.
The relevant call path is:
follow_automount()
    ->d_automount
    autofs4_d_automount
       autofs4_mount_wait
           autofs4_wait
In autofs4_wait wq_uid and wq_gid are set to current_uid() and
current_gid respectively.  With follow_automount now overriding creds
uid that we export to userspace changes and that breaks existing
setups.
To remove the regression set wq_uid and wq_gid from
current_real_cred()->uid and current_real_cred()->gid respectively.
This restores the current behavior as current->real_cred is identical
to current->cred except when override creds are used.
Cc: stable@vger.kernel.org
Fixes: aeaa4a79ff ("fs: Call d_automount with the filesystems creds")
Reported-by: Seth Forshee <seth.forshee@canonical.com>
Tested-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
			
			
This commit is contained in:
		
							parent
							
								
									d29216842a
								
							
						
					
					
						commit
						069d5ac9ae
					
				
					 1 changed files with 2 additions and 2 deletions
				
			
		| 
						 | 
					@ -431,8 +431,8 @@ int autofs4_wait(struct autofs_sb_info *sbi,
 | 
				
			||||||
		memcpy(&wq->name, &qstr, sizeof(struct qstr));
 | 
							memcpy(&wq->name, &qstr, sizeof(struct qstr));
 | 
				
			||||||
		wq->dev = autofs4_get_dev(sbi);
 | 
							wq->dev = autofs4_get_dev(sbi);
 | 
				
			||||||
		wq->ino = autofs4_get_ino(sbi);
 | 
							wq->ino = autofs4_get_ino(sbi);
 | 
				
			||||||
		wq->uid = current_uid();
 | 
							wq->uid = current_real_cred()->uid;
 | 
				
			||||||
		wq->gid = current_gid();
 | 
							wq->gid = current_real_cred()->gid;
 | 
				
			||||||
		wq->pid = pid;
 | 
							wq->pid = pid;
 | 
				
			||||||
		wq->tgid = tgid;
 | 
							wq->tgid = tgid;
 | 
				
			||||||
		wq->status = -EINTR; /* Status return if interrupted */
 | 
							wq->status = -EINTR; /* Status return if interrupted */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue