Page MenuHomeFreeBSD

D55881.id.diff
No OneTemporary

D55881.id.diff

diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -2316,10 +2316,21 @@
struct linux_getsockopt_args *args)
{
int error;
+ l_int loptlen;
+ socklen_t optlen;
- error = copyout(val, PTRIN(args->optval), len);
- if (error == 0)
- error = copyout(&len, PTRIN(args->optlen), sizeof(len));
+ error = copyin(PTRIN(args->optlen), &loptlen, sizeof(loptlen));
+ if (error != 0)
+ return (error);
+ if (loptlen < 0)
+ return (EINVAL);
+
+ optlen = (socklen_t)loptlen;
+ error = copyout(val, PTRIN(args->optval), min(len, optlen));
+ if (error == 0) {
+ loptlen = (l_int)len;
+ error = copyout(&loptlen, PTRIN(args->optlen), sizeof(loptlen));
+ }
return (error);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Jun 26, 8:53 AM (15 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33834331
Default Alt Text
D55881.id.diff (782 B)

Event Timeline