While uid_t and gid_t are both unsigned, the values (uid_t) -1 and (gid_t) -1 are reserved. A uid or gid argument of -1 to the chown(2) system call means to leave the uid/gid unchanged. Catch this case so that trying to set a uid or gid to -1 will result in an error. Test cases: chown 4294967295 file chown :4294967295 file chgrp 4294967295 file Andreas Gruenbacher --- src/chgrp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: src/chgrp.c =================================================================== --- src/chgrp.c.orig +++ src/chgrp.c @@ -89,7 +89,7 @@ parse_group (char const *name) { uintmax_t tmp; if (! (xstrtoumax (name, NULL, 10, &tmp, "") == LONGINT_OK - && tmp <= GID_T_MAX)) + && tmp <= GID_T_MAX && (gid_t) tmp != (gid_t) -1)) die (EXIT_FAILURE, 0, _("invalid group: %s"), quote (name)); gid = tmp;