summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket.c
diff options
context:
space:
mode:
authornp <np@FreeBSD.org>2012-04-03 18:38:00 +0000
committernp <np@FreeBSD.org>2012-04-03 18:38:00 +0000
commit307ef13f94d231bebdcdc61d234470e47ffec9b0 (patch)
treea2d684478b096453445fd1ad570b88d437bfb547 /sys/kern/uipc_socket.c
parent9fbf69312ff38418cb89b034bfe7e099c58a791b (diff)
downloadFreeBSD-src-307ef13f94d231bebdcdc61d234470e47ffec9b0.zip
FreeBSD-src-307ef13f94d231bebdcdc61d234470e47ffec9b0.tar.gz
- Remove redundant call to pr_ctloutput from code that handles SO_SETFIB.
- Add a check for errors during copyin while here. Reviewed by: julian, bz MFC after: 2 weeks
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r--sys/kern/uipc_socket.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 4233dda..f18afec 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -2504,20 +2504,19 @@ sosetopt(struct socket *so, struct sockopt *sopt)
case SO_SETFIB:
error = sooptcopyin(sopt, &optval, sizeof optval,
sizeof optval);
+ if (error)
+ goto bad;
+
if (optval < 0 || optval >= rt_numfibs) {
error = EINVAL;
goto bad;
}
if (((so->so_proto->pr_domain->dom_family == PF_INET) ||
(so->so_proto->pr_domain->dom_family == PF_INET6) ||
- (so->so_proto->pr_domain->dom_family == PF_ROUTE))) {
+ (so->so_proto->pr_domain->dom_family == PF_ROUTE)))
so->so_fibnum = optval;
- /* Note: ignore error */
- if (so->so_proto->pr_ctloutput)
- (*so->so_proto->pr_ctloutput)(so, sopt);
- } else {
+ else
so->so_fibnum = 0;
- }
break;
case SO_USER_COOKIE:
OpenPOWER on IntegriCloud