diff options
author | dtucker@openbsd.org <dtucker@openbsd.org> | 2015-06-22 12:29:57 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2015-06-23 10:34:46 +1000 |
commit | 63b78d003bd8ca111a736e6cea6333da50f5f09b (patch) | |
tree | 8df403cbe170b1547a1e194c0bc1b28c50cd72be | |
parent | 5c15e22c691c79a47747bcf5490126656f97cecd (diff) | |
download | openssh-git-63b78d003bd8ca111a736e6cea6333da50f5f09b.tar.gz |
upstream commit
Don't call setgroups if we have zero groups; there's no
guarantee that it won't try to deref the pointer. Based on a patch from mail
at quitesimple.org, ok djm deraadt
Upstream-ID: 2fff85e11d7a9a387ef7fddf41fbfaf566708ab1
-rw-r--r-- | uidswap.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: uidswap.c,v 1.37 2015/01/16 06:40:12 deraadt Exp $ */ +/* $OpenBSD: uidswap.c,v 1.38 2015/06/22 12:29:57 dtucker Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -113,7 +113,7 @@ temporarily_use_uid(struct passwd *pw) } } /* Set the effective uid to the given (unprivileged) uid. */ - if (setgroups(user_groupslen, user_groups) < 0) + if (user_groupslen > 0 && setgroups(user_groupslen, user_groups) < 0) fatal("setgroups: %.100s", strerror(errno)); #ifndef SAVED_IDS_WORK_WITH_SETEUID /* Propagate the privileged gid to all of our gids. */ @@ -187,7 +187,8 @@ restore_uid(void) setgid(getgid()); #endif /* SAVED_IDS_WORK_WITH_SETEUID */ - if (setgroups(saved_egroupslen, saved_egroups) < 0) + if (saved_egroupslen > 0 && + setgroups(saved_egroupslen, saved_egroups) < 0) fatal("setgroups: %.100s", strerror(errno)); temporarily_use_uid_effective = 0; } |