linux-user: Support setgroups syscall with no groups
Signed-off-by: Dillon Amburgey <dillona@dillona.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
		
							parent
							
								
									bfb669f39f
								
							
						
					
					
						commit
						f2b79ce9dc
					
				| 
						 | 
				
			
			@ -7680,18 +7680,20 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
 | 
			
		|||
        {
 | 
			
		||||
            int gidsetsize = arg1;
 | 
			
		||||
            target_id *target_grouplist;
 | 
			
		||||
            gid_t *grouplist;
 | 
			
		||||
            gid_t *grouplist = NULL;
 | 
			
		||||
            int i;
 | 
			
		||||
 | 
			
		||||
            if (gidsetsize) {
 | 
			
		||||
                grouplist = alloca(gidsetsize * sizeof(gid_t));
 | 
			
		||||
                target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 2, 1);
 | 
			
		||||
                if (!target_grouplist) {
 | 
			
		||||
                    ret = -TARGET_EFAULT;
 | 
			
		||||
                    goto fail;
 | 
			
		||||
                }
 | 
			
		||||
            for(i = 0;i < gidsetsize; i++)
 | 
			
		||||
                for (i = 0; i < gidsetsize; i++) {
 | 
			
		||||
                    grouplist[i] = low2highgid(tswapid(target_grouplist[i]));
 | 
			
		||||
                }
 | 
			
		||||
                unlock_user(target_grouplist, arg2, 0);
 | 
			
		||||
            }
 | 
			
		||||
            ret = get_errno(setgroups(gidsetsize, grouplist));
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue