On 10/05/2012 02:36 AM, M. Mohan Kumar wrote: > From: "M. Mohan Kumar" > > In current implementation of setfsuid/setfsgid there is no way to know > if it failed by checking the return value. This patch assumes > setfsuid/setfsgid returns -1 in case of error. Eventually kernel code > needs to be fixed. According to the Fedora 17 man page: RETURN VALUE On success, the previous value of fsuid is returned. On error, the current value of fsuid is returned. NOTES When glibc determines that the argument is not a valid user ID, it will return -1 and set errno to EINVAL without attempting the system call. BUGS No error messages of any kind are returned to the caller. At the very least, EPERM should be returned when the call fails (because the caller lacks the CAP_SETUID capability). Eww - self-contradictory. I think the reason that F17 marked these functions warn_unused_return is because there HAS been an effort to make these functions return sane values that can be used to detect when errors have occurred. > > Signed-off-by: M. Mohan Kumar > --- > fsdev/virtfs-proxy-helper.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/fsdev/virtfs-proxy-helper.c b/fsdev/virtfs-proxy-helper.c > index f9a8270..ed5eede 100644 > --- a/fsdev/virtfs-proxy-helper.c > +++ b/fsdev/virtfs-proxy-helper.c > @@ -290,9 +290,12 @@ static int setfsugid(int uid, int gid) > CAP_DAC_OVERRIDE, > }; > > - setfsgid(gid); > - setfsuid(uid); > - > + if (setfsgid(gid) < 0) { > + return -errno; > + } > + if (setfsuid(uid) < 0) { > + return -errno; > + } At any rate, this silences the compiler warning I was hitting, so: Tested-by: Eric Blake -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org