diff options
Diffstat (limited to 'net/ipv4')
| -rw-r--r-- | net/ipv4/af_inet.c | 1 | ||||
| -rw-r--r-- | net/ipv4/inet_connection_sock.c | 2 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 1 | ||||
| -rw-r--r-- | net/ipv4/ip_sockglue.c | 6 | ||||
| -rw-r--r-- | net/ipv4/ipmr.c | 2 | ||||
| -rw-r--r-- | net/ipv4/raw.c | 6 | ||||
| -rw-r--r-- | net/ipv4/tcp.c | 10 | ||||
| -rw-r--r-- | net/ipv4/tcp_output.c | 11 | ||||
| -rw-r--r-- | net/ipv4/udp.c | 7 | ||||
| -rw-r--r-- | net/ipv4/udp_impl.h | 4 |
10 files changed, 27 insertions, 23 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 58c4b0f7c4aa..57737b8d1711 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
| @@ -1119,6 +1119,7 @@ int inet_sk_rebuild_header(struct sock *sk) | |||
| 1119 | { | 1119 | { |
| 1120 | struct flowi fl = { | 1120 | struct flowi fl = { |
| 1121 | .oif = sk->sk_bound_dev_if, | 1121 | .oif = sk->sk_bound_dev_if, |
| 1122 | .mark = sk->sk_mark, | ||
| 1122 | .nl_u = { | 1123 | .nl_u = { |
| 1123 | .ip4_u = { | 1124 | .ip4_u = { |
| 1124 | .daddr = daddr, | 1125 | .daddr = daddr, |
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 22cd19ee44e5..4351ca2cf0b8 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
| @@ -714,7 +714,7 @@ int inet_csk_compat_getsockopt(struct sock *sk, int level, int optname, | |||
| 714 | EXPORT_SYMBOL_GPL(inet_csk_compat_getsockopt); | 714 | EXPORT_SYMBOL_GPL(inet_csk_compat_getsockopt); |
| 715 | 715 | ||
| 716 | int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, | 716 | int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, |
| 717 | char __user *optval, int optlen) | 717 | char __user *optval, unsigned int optlen) |
| 718 | { | 718 | { |
| 719 | const struct inet_connection_sock *icsk = inet_csk(sk); | 719 | const struct inet_connection_sock *icsk = inet_csk(sk); |
| 720 | 720 | ||
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 9fe5d7b81580..f9895180f481 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -335,6 +335,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
| 335 | 335 | ||
| 336 | { | 336 | { |
| 337 | struct flowi fl = { .oif = sk->sk_bound_dev_if, | 337 | struct flowi fl = { .oif = sk->sk_bound_dev_if, |
| 338 | .mark = sk->sk_mark, | ||
| 338 | .nl_u = { .ip4_u = | 339 | .nl_u = { .ip4_u = |
| 339 | { .daddr = daddr, | 340 | { .daddr = daddr, |
| 340 | .saddr = inet->saddr, | 341 | .saddr = inet->saddr, |
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 5a0693576e82..0c0b6e363a20 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c | |||
| @@ -440,7 +440,7 @@ out: | |||
| 440 | */ | 440 | */ |
| 441 | 441 | ||
| 442 | static int do_ip_setsockopt(struct sock *sk, int level, | 442 | static int do_ip_setsockopt(struct sock *sk, int level, |
| 443 | int optname, char __user *optval, int optlen) | 443 | int optname, char __user *optval, unsigned int optlen) |
| 444 | { | 444 | { |
| 445 | struct inet_sock *inet = inet_sk(sk); | 445 | struct inet_sock *inet = inet_sk(sk); |
| 446 | int val = 0, err; | 446 | int val = 0, err; |
| @@ -950,7 +950,7 @@ e_inval: | |||
| 950 | } | 950 | } |
| 951 | 951 | ||
| 952 | int ip_setsockopt(struct sock *sk, int level, | 952 | int ip_setsockopt(struct sock *sk, int level, |
| 953 | int optname, char __user *optval, int optlen) | 953 | int optname, char __user *optval, unsigned int optlen) |
| 954 | { | 954 | { |
| 955 | int err; | 955 | int err; |
| 956 | 956 | ||
| @@ -975,7 +975,7 @@ EXPORT_SYMBOL(ip_setsockopt); | |||
| 975 | 975 | ||
| 976 | #ifdef CONFIG_COMPAT | 976 | #ifdef CONFIG_COMPAT |
| 977 | int compat_ip_setsockopt(struct sock *sk, int level, int optname, | 977 | int compat_ip_setsockopt(struct sock *sk, int level, int optname, |
| 978 | char __user *optval, int optlen) | 978 | char __user *optval, unsigned int optlen) |
| 979 | { | 979 | { |
| 980 | int err; | 980 | int err; |
| 981 | 981 | ||
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index c43ec2d51ce2..630a56df7b47 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
| @@ -931,7 +931,7 @@ static void mrtsock_destruct(struct sock *sk) | |||
| 931 | * MOSPF/PIM router set up we can clean this up. | 931 | * MOSPF/PIM router set up we can clean this up. |
| 932 | */ | 932 | */ |
| 933 | 933 | ||
| 934 | int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, int optlen) | 934 | int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsigned int optlen) |
| 935 | { | 935 | { |
| 936 | int ret; | 936 | int ret; |
| 937 | struct vifctl vif; | 937 | struct vifctl vif; |
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index ebb1e5848bc6..757c9171e7c2 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
| @@ -741,7 +741,7 @@ out: return ret; | |||
| 741 | } | 741 | } |
| 742 | 742 | ||
| 743 | static int do_raw_setsockopt(struct sock *sk, int level, int optname, | 743 | static int do_raw_setsockopt(struct sock *sk, int level, int optname, |
| 744 | char __user *optval, int optlen) | 744 | char __user *optval, unsigned int optlen) |
| 745 | { | 745 | { |
| 746 | if (optname == ICMP_FILTER) { | 746 | if (optname == ICMP_FILTER) { |
| 747 | if (inet_sk(sk)->num != IPPROTO_ICMP) | 747 | if (inet_sk(sk)->num != IPPROTO_ICMP) |
| @@ -753,7 +753,7 @@ static int do_raw_setsockopt(struct sock *sk, int level, int optname, | |||
| 753 | } | 753 | } |
| 754 | 754 | ||
| 755 | static int raw_setsockopt(struct sock *sk, int level, int optname, | 755 | static int raw_setsockopt(struct sock *sk, int level, int optname, |
| 756 | char __user *optval, int optlen) | 756 | char __user *optval, unsigned int optlen) |
| 757 | { | 757 | { |
| 758 | if (level != SOL_RAW) | 758 | if (level != SOL_RAW) |
| 759 | return ip_setsockopt(sk, level, optname, optval, optlen); | 759 | return ip_setsockopt(sk, level, optname, optval, optlen); |
| @@ -762,7 +762,7 @@ static int raw_setsockopt(struct sock *sk, int level, int optname, | |||
| 762 | 762 | ||
| 763 | #ifdef CONFIG_COMPAT | 763 | #ifdef CONFIG_COMPAT |
| 764 | static int compat_raw_setsockopt(struct sock *sk, int level, int optname, | 764 | static int compat_raw_setsockopt(struct sock *sk, int level, int optname, |
| 765 | char __user *optval, int optlen) | 765 | char __user *optval, unsigned int optlen) |
| 766 | { | 766 | { |
| 767 | if (level != SOL_RAW) | 767 | if (level != SOL_RAW) |
| 768 | return compat_ip_setsockopt(sk, level, optname, optval, optlen); | 768 | return compat_ip_setsockopt(sk, level, optname, optval, optlen); |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 21387ebabf00..64d0af675823 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
| @@ -580,7 +580,7 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos, | |||
| 580 | 580 | ||
| 581 | lock_sock(sk); | 581 | lock_sock(sk); |
| 582 | 582 | ||
| 583 | timeo = sock_rcvtimeo(sk, flags & SPLICE_F_NONBLOCK); | 583 | timeo = sock_rcvtimeo(sk, sock->file->f_flags & O_NONBLOCK); |
| 584 | while (tss.len) { | 584 | while (tss.len) { |
| 585 | ret = __tcp_splice_read(sk, &tss); | 585 | ret = __tcp_splice_read(sk, &tss); |
| 586 | if (ret < 0) | 586 | if (ret < 0) |
| @@ -2032,7 +2032,7 @@ int tcp_disconnect(struct sock *sk, int flags) | |||
| 2032 | * Socket option code for TCP. | 2032 | * Socket option code for TCP. |
| 2033 | */ | 2033 | */ |
| 2034 | static int do_tcp_setsockopt(struct sock *sk, int level, | 2034 | static int do_tcp_setsockopt(struct sock *sk, int level, |
| 2035 | int optname, char __user *optval, int optlen) | 2035 | int optname, char __user *optval, unsigned int optlen) |
| 2036 | { | 2036 | { |
| 2037 | struct tcp_sock *tp = tcp_sk(sk); | 2037 | struct tcp_sock *tp = tcp_sk(sk); |
| 2038 | struct inet_connection_sock *icsk = inet_csk(sk); | 2038 | struct inet_connection_sock *icsk = inet_csk(sk); |
| @@ -2047,7 +2047,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
| 2047 | return -EINVAL; | 2047 | return -EINVAL; |
| 2048 | 2048 | ||
| 2049 | val = strncpy_from_user(name, optval, | 2049 | val = strncpy_from_user(name, optval, |
| 2050 | min(TCP_CA_NAME_MAX-1, optlen)); | 2050 | min_t(long, TCP_CA_NAME_MAX-1, optlen)); |
| 2051 | if (val < 0) | 2051 | if (val < 0) |
| 2052 | return -EFAULT; | 2052 | return -EFAULT; |
| 2053 | name[val] = 0; | 2053 | name[val] = 0; |
| @@ -2220,7 +2220,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
| 2220 | } | 2220 | } |
| 2221 | 2221 | ||
| 2222 | int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, | 2222 | int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, |
| 2223 | int optlen) | 2223 | unsigned int optlen) |
| 2224 | { | 2224 | { |
| 2225 | struct inet_connection_sock *icsk = inet_csk(sk); | 2225 | struct inet_connection_sock *icsk = inet_csk(sk); |
| 2226 | 2226 | ||
| @@ -2232,7 +2232,7 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, | |||
| 2232 | 2232 | ||
| 2233 | #ifdef CONFIG_COMPAT | 2233 | #ifdef CONFIG_COMPAT |
| 2234 | int compat_tcp_setsockopt(struct sock *sk, int level, int optname, | 2234 | int compat_tcp_setsockopt(struct sock *sk, int level, int optname, |
| 2235 | char __user *optval, int optlen) | 2235 | char __user *optval, unsigned int optlen) |
| 2236 | { | 2236 | { |
| 2237 | if (level != SOL_TCP) | 2237 | if (level != SOL_TCP) |
| 2238 | return inet_csk_compat_setsockopt(sk, level, optname, | 2238 | return inet_csk_compat_setsockopt(sk, level, optname, |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 5200aab0ca97..fcd278a7080e 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -361,6 +361,7 @@ static inline int tcp_urg_mode(const struct tcp_sock *tp) | |||
| 361 | #define OPTION_SACK_ADVERTISE (1 << 0) | 361 | #define OPTION_SACK_ADVERTISE (1 << 0) |
| 362 | #define OPTION_TS (1 << 1) | 362 | #define OPTION_TS (1 << 1) |
| 363 | #define OPTION_MD5 (1 << 2) | 363 | #define OPTION_MD5 (1 << 2) |
| 364 | #define OPTION_WSCALE (1 << 3) | ||
| 364 | 365 | ||
| 365 | struct tcp_out_options { | 366 | struct tcp_out_options { |
| 366 | u8 options; /* bit field of OPTION_* */ | 367 | u8 options; /* bit field of OPTION_* */ |
| @@ -427,7 +428,7 @@ static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp, | |||
| 427 | TCPOLEN_SACK_PERM); | 428 | TCPOLEN_SACK_PERM); |
| 428 | } | 429 | } |
| 429 | 430 | ||
| 430 | if (unlikely(opts->ws)) { | 431 | if (unlikely(OPTION_WSCALE & opts->options)) { |
| 431 | *ptr++ = htonl((TCPOPT_NOP << 24) | | 432 | *ptr++ = htonl((TCPOPT_NOP << 24) | |
| 432 | (TCPOPT_WINDOW << 16) | | 433 | (TCPOPT_WINDOW << 16) | |
| 433 | (TCPOLEN_WINDOW << 8) | | 434 | (TCPOLEN_WINDOW << 8) | |
| @@ -494,8 +495,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb, | |||
| 494 | } | 495 | } |
| 495 | if (likely(sysctl_tcp_window_scaling)) { | 496 | if (likely(sysctl_tcp_window_scaling)) { |
| 496 | opts->ws = tp->rx_opt.rcv_wscale; | 497 | opts->ws = tp->rx_opt.rcv_wscale; |
| 497 | if (likely(opts->ws)) | 498 | opts->options |= OPTION_WSCALE; |
| 498 | size += TCPOLEN_WSCALE_ALIGNED; | 499 | size += TCPOLEN_WSCALE_ALIGNED; |
| 499 | } | 500 | } |
| 500 | if (likely(sysctl_tcp_sack)) { | 501 | if (likely(sysctl_tcp_sack)) { |
| 501 | opts->options |= OPTION_SACK_ADVERTISE; | 502 | opts->options |= OPTION_SACK_ADVERTISE; |
| @@ -537,8 +538,8 @@ static unsigned tcp_synack_options(struct sock *sk, | |||
| 537 | 538 | ||
| 538 | if (likely(ireq->wscale_ok)) { | 539 | if (likely(ireq->wscale_ok)) { |
| 539 | opts->ws = ireq->rcv_wscale; | 540 | opts->ws = ireq->rcv_wscale; |
| 540 | if (likely(opts->ws)) | 541 | opts->options |= OPTION_WSCALE; |
| 541 | size += TCPOLEN_WSCALE_ALIGNED; | 542 | size += TCPOLEN_WSCALE_ALIGNED; |
| 542 | } | 543 | } |
| 543 | if (likely(doing_ts)) { | 544 | if (likely(doing_ts)) { |
| 544 | opts->options |= OPTION_TS; | 545 | opts->options |= OPTION_TS; |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index ebaaa7f973d7..6ec6a8a4a224 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
| @@ -696,6 +696,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
| 696 | 696 | ||
| 697 | if (rt == NULL) { | 697 | if (rt == NULL) { |
| 698 | struct flowi fl = { .oif = ipc.oif, | 698 | struct flowi fl = { .oif = ipc.oif, |
| 699 | .mark = sk->sk_mark, | ||
| 699 | .nl_u = { .ip4_u = | 700 | .nl_u = { .ip4_u = |
| 700 | { .daddr = faddr, | 701 | { .daddr = faddr, |
| 701 | .saddr = saddr, | 702 | .saddr = saddr, |
| @@ -1359,7 +1360,7 @@ void udp_destroy_sock(struct sock *sk) | |||
| 1359 | * Socket option code for UDP | 1360 | * Socket option code for UDP |
| 1360 | */ | 1361 | */ |
| 1361 | int udp_lib_setsockopt(struct sock *sk, int level, int optname, | 1362 | int udp_lib_setsockopt(struct sock *sk, int level, int optname, |
| 1362 | char __user *optval, int optlen, | 1363 | char __user *optval, unsigned int optlen, |
| 1363 | int (*push_pending_frames)(struct sock *)) | 1364 | int (*push_pending_frames)(struct sock *)) |
| 1364 | { | 1365 | { |
| 1365 | struct udp_sock *up = udp_sk(sk); | 1366 | struct udp_sock *up = udp_sk(sk); |
| @@ -1441,7 +1442,7 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname, | |||
| 1441 | EXPORT_SYMBOL(udp_lib_setsockopt); | 1442 | EXPORT_SYMBOL(udp_lib_setsockopt); |
| 1442 | 1443 | ||
| 1443 | int udp_setsockopt(struct sock *sk, int level, int optname, | 1444 | int udp_setsockopt(struct sock *sk, int level, int optname, |
| 1444 | char __user *optval, int optlen) | 1445 | char __user *optval, unsigned int optlen) |
| 1445 | { | 1446 | { |
| 1446 | if (level == SOL_UDP || level == SOL_UDPLITE) | 1447 | if (level == SOL_UDP || level == SOL_UDPLITE) |
| 1447 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, | 1448 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, |
| @@ -1451,7 +1452,7 @@ int udp_setsockopt(struct sock *sk, int level, int optname, | |||
| 1451 | 1452 | ||
| 1452 | #ifdef CONFIG_COMPAT | 1453 | #ifdef CONFIG_COMPAT |
| 1453 | int compat_udp_setsockopt(struct sock *sk, int level, int optname, | 1454 | int compat_udp_setsockopt(struct sock *sk, int level, int optname, |
| 1454 | char __user *optval, int optlen) | 1455 | char __user *optval, unsigned int optlen) |
| 1455 | { | 1456 | { |
| 1456 | if (level == SOL_UDP || level == SOL_UDPLITE) | 1457 | if (level == SOL_UDP || level == SOL_UDPLITE) |
| 1457 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, | 1458 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, |
diff --git a/net/ipv4/udp_impl.h b/net/ipv4/udp_impl.h index 9f4a6165f722..aaad650d47d9 100644 --- a/net/ipv4/udp_impl.h +++ b/net/ipv4/udp_impl.h | |||
| @@ -11,13 +11,13 @@ extern void __udp4_lib_err(struct sk_buff *, u32, struct udp_table *); | |||
| 11 | extern int udp_v4_get_port(struct sock *sk, unsigned short snum); | 11 | extern int udp_v4_get_port(struct sock *sk, unsigned short snum); |
| 12 | 12 | ||
| 13 | extern int udp_setsockopt(struct sock *sk, int level, int optname, | 13 | extern int udp_setsockopt(struct sock *sk, int level, int optname, |
| 14 | char __user *optval, int optlen); | 14 | char __user *optval, unsigned int optlen); |
| 15 | extern int udp_getsockopt(struct sock *sk, int level, int optname, | 15 | extern int udp_getsockopt(struct sock *sk, int level, int optname, |
| 16 | char __user *optval, int __user *optlen); | 16 | char __user *optval, int __user *optlen); |
| 17 | 17 | ||
| 18 | #ifdef CONFIG_COMPAT | 18 | #ifdef CONFIG_COMPAT |
| 19 | extern int compat_udp_setsockopt(struct sock *sk, int level, int optname, | 19 | extern int compat_udp_setsockopt(struct sock *sk, int level, int optname, |
| 20 | char __user *optval, int optlen); | 20 | char __user *optval, unsigned int optlen); |
| 21 | extern int compat_udp_getsockopt(struct sock *sk, int level, int optname, | 21 | extern int compat_udp_getsockopt(struct sock *sk, int level, int optname, |
| 22 | char __user *optval, int __user *optlen); | 22 | char __user *optval, int __user *optlen); |
| 23 | #endif | 23 | #endif |
