ret = 0;
}
- set_fd_set(n, inp, fds.res_in);
- set_fd_set(n, outp, fds.res_out);
- set_fd_set(n, exp, fds.res_ex);
+ if (set_fd_set(n, inp, fds.res_in) ||
+ set_fd_set(n, outp, fds.res_out) ||
+ set_fd_set(n, exp, fds.res_ex))
+ ret = -EFAULT;
out:
select_bits_free(bits, size);
#ifdef __KERNEL__
+#include <linux/compiler.h>
#include <linux/wait.h>
#include <linux/string.h>
#include <linux/mm.h>
return 0;
}
-static inline
-void set_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset)
+static inline unsigned long __must_check
+set_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset)
{
if (ufdset)
- __copy_to_user(ufdset, fdset, FDS_BYTES(nr));
+ return __copy_to_user(ufdset, fdset, FDS_BYTES(nr));
+ return 0;
}
static inline