Skip to content

Commit

Permalink
[BZ #6980]
Browse files Browse the repository at this point in the history
	* debug/getgroups_chk.c (__getgroups_chk): Return EINVAL error for
	negative sizees.
	* posix/bits/unistd.h (getgroups): Call __getgroups_chk for
	negative __size.
  • Loading branch information
Ulrich Drepper committed Oct 31, 2008
1 parent 3cf4491 commit 4bed549
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
2008-10-31 Ulrich Drepper <drepper@redhat.com>

[BZ #6980]
* debug/getgroups_chk.c (__getgroups_chk): Return EINVAL error for
negative sizees.
* posix/bits/unistd.h (getgroups): Call __getgroups_chk for
negative __size.

[BZ #6995]
* sysdeps/powerpc/powerpc32/dl-machine.c: Fix typo in message.

Expand Down
8 changes: 7 additions & 1 deletion debug/getgroups_chk.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (C) 2005 Free Software Foundation, Inc.
/* Copyright (C) 2005, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand All @@ -23,6 +23,12 @@
int
__getgroups_chk (int size, __gid_t list[], size_t listlen)
{
if (__builtin_expect (size < 0, 0))
{
__set_errno (EINVAL);
return -1;
}

if (__builtin_expect (size * sizeof (__gid_t) > listlen, 0))
__chk_fail ();

Expand Down
4 changes: 2 additions & 2 deletions posix/bits/unistd.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Checking macros for unistd functions.
Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand Down Expand Up @@ -267,7 +267,7 @@ __NTH (getgroups (int __size, __gid_t __list[]))
{
if (__bos (__list) != (size_t) -1)
{
if (!__builtin_constant_p (__size))
if (!__builtin_constant_p (__size) || __size < 0)
return __getgroups_chk (__size, __list, __bos (__list));

if (__size * sizeof (__gid_t) > __bos (__list))
Expand Down

0 comments on commit 4bed549

Please sign in to comment.