summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordchagin <dchagin@FreeBSD.org>2016-06-05 07:38:56 +0000
committerdchagin <dchagin@FreeBSD.org>2016-06-05 07:38:56 +0000
commite8e944c226a0adc2138f6e72bce80f5e6e162ac9 (patch)
tree0ae9e7684ade950c2e681f7582ae1c754803f5dd
parent74905f75d44b12c8f5f872c554ef67e0e7c1ee48 (diff)
downloadFreeBSD-src-e8e944c226a0adc2138f6e72bce80f5e6e162ac9.zip
FreeBSD-src-e8e944c226a0adc2138f6e72bce80f5e6e162ac9.tar.gz
MFC r300416:
Add a missing errno translation for SO_ERROR optname. PR: 135458 Reported by: Stefan Schmidt
-rw-r--r--sys/compat/linux/linux_socket.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index b33b260..4bc4798 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -1594,10 +1594,10 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args)
} */ bsd_args;
l_timeval linux_tv;
struct timeval tv;
- socklen_t tv_len, xulen;
+ socklen_t tv_len, xulen, len;
struct xucred xu;
struct l_ucred lxu;
- int error, name;
+ int error, name, newval;
bsd_args.s = args->s;
bsd_args.level = linux_to_bsd_sockopt_level(args->level);
@@ -1636,6 +1636,15 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args)
return (copyout(&lxu, PTRIN(args->optval), sizeof(lxu)));
/* NOTREACHED */
break;
+ case SO_ERROR:
+ len = sizeof(newval);
+ error = kern_getsockopt(td, args->s, bsd_args.level,
+ name, &newval, UIO_SYSSPACE, &len);
+ if (error)
+ return (error);
+ newval = -SV_ABI_ERRNO(td->td_proc, newval);
+ return (copyout(&newval, PTRIN(args->optval), len));
+ /* NOTREACHED */
default:
break;
}
OpenPOWER on IntegriCloud