diff options
author | np <np@FreeBSD.org> | 2012-04-03 18:38:00 +0000 |
---|---|---|
committer | np <np@FreeBSD.org> | 2012-04-03 18:38:00 +0000 |
commit | 307ef13f94d231bebdcdc61d234470e47ffec9b0 (patch) | |
tree | a2d684478b096453445fd1ad570b88d437bfb547 /sys/kern/uipc_socket.c | |
parent | 9fbf69312ff38418cb89b034bfe7e099c58a791b (diff) | |
download | FreeBSD-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.c | 11 |
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: |