|  | @@ -1080,7 +1080,8 @@ log_credential_status(void)
 | 
	
		
			
				|  |  |    /* Read, effective and saved GIDs */
 | 
	
		
			
				|  |  |    gid_t rgid, egid, sgid;
 | 
	
		
			
				|  |  |    /* Supplementary groups */
 | 
	
		
			
				|  |  | -  gid_t sup_gids[NGROUPS_MAX + 1];
 | 
	
		
			
				|  |  | +  gid_t *sup_gids = NULL;
 | 
	
		
			
				|  |  | +  int sup_gids_size;
 | 
	
		
			
				|  |  |    /* Number of supplementary groups */
 | 
	
		
			
				|  |  |    int ngids;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1126,9 +1127,19 @@ log_credential_status(void)
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /* log supplementary groups */
 | 
	
		
			
				|  |  | -  if ((ngids = getgroups(NGROUPS_MAX + 1, sup_gids)) < 0) {
 | 
	
		
			
				|  |  | +  sup_gids_size = 64;
 | 
	
		
			
				|  |  | +  sup_gids = tor_malloc(sizeof(gid_t) * 64);
 | 
	
		
			
				|  |  | +  while ((ngids = getgroups(sup_gids_size, sup_gids)) < 0 &&
 | 
	
		
			
				|  |  | +         errno == EINVAL &&
 | 
	
		
			
				|  |  | +         sup_gids_size < NGROUPS_MAX) {
 | 
	
		
			
				|  |  | +    sup_gids_size *= 2;
 | 
	
		
			
				|  |  | +    sup_gids = tor_realloc(sup_gids, sizeof(gid_t) * sup_gids_size);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (ngids < 0) {
 | 
	
		
			
				|  |  |      log_warn(LD_GENERAL, "Error getting supplementary GIDs: %s",
 | 
	
		
			
				|  |  |               strerror(errno));
 | 
	
		
			
				|  |  | +    tor_free(sup_gids);
 | 
	
		
			
				|  |  |      return -1;
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      int i, retval = 0;
 | 
	
	
		
			
				|  | @@ -1158,6 +1169,7 @@ log_credential_status(void)
 | 
	
		
			
				|  |  |        tor_free(cp);
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |      smartlist_free(elts);
 | 
	
		
			
				|  |  | +    tor_free(sup_gids);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return retval;
 | 
	
		
			
				|  |  |    }
 |