Re: [PATCH 1/2] kernel/sys.c: return the current gid when error occurs

From: Andy Lutomirski
Date: Tue Aug 06 2013 - 16:21:56 EST


On 08/06/2013 01:01 AM, Chen Gang wrote:
> According to the API definition, when error occurs, need return current
> fsgid instead of the previous one.
>
> The related informations ("man setfsgid"):
>
> RETURN VALUE
> On success, the previous value of fsgid is returned. On error, the current value of fsgid is returned.
>
> Signed-off-by: Chen Gang <gang.chen@xxxxxxxxxxx>
> ---
> kernel/sys.c | 6 +++---
> 1 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/kernel/sys.c b/kernel/sys.c
> index 771129b..9356dc8 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -775,11 +775,11 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
>
> kgid = make_kgid(old->user_ns, gid);
> if (!gid_valid(kgid))
> - return old_fsgid;
> + return gid;

Huh? So if 1234567 is not a valid gid, then setfsgid(1234567) is
supposed to return 1234567? This makes no sense.

I assume that what the man page means is that the return value is
whatever fsgid was prior to the call. On error, fsgid isn't changed, so
the return value is still "current".

(FWIW, this behavior is awful and is probably the cause of a security
bug or three, since success and failure are indistinguishable. But I
think your patch is wrong.)

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/