diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/ipv4/route.c | 24 | ||||
| -rw-r--r-- | net/ipv6/sysctl_net_ipv6.c | 2 | ||||
| -rw-r--r-- | net/sctp/auth.c | 4 | ||||
| -rw-r--r-- | net/sctp/socket.c | 5 |
4 files changed, 30 insertions, 5 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index cca921ea8550..e91bafeb32f4 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
| @@ -3116,14 +3116,23 @@ static ctl_table ipv4_route_table[] = { | |||
| 3116 | { .ctl_name = 0 } | 3116 | { .ctl_name = 0 } |
| 3117 | }; | 3117 | }; |
| 3118 | 3118 | ||
| 3119 | static __net_initdata struct ctl_path ipv4_route_path[] = { | 3119 | static struct ctl_table empty[1]; |
| 3120 | |||
| 3121 | static struct ctl_table ipv4_skeleton[] = | ||
| 3122 | { | ||
| 3123 | { .procname = "route", .ctl_name = NET_IPV4_ROUTE, | ||
| 3124 | .child = ipv4_route_table}, | ||
| 3125 | { .procname = "neigh", .ctl_name = NET_IPV4_NEIGH, | ||
| 3126 | .child = empty}, | ||
| 3127 | { } | ||
| 3128 | }; | ||
| 3129 | |||
| 3130 | static __net_initdata struct ctl_path ipv4_path[] = { | ||
| 3120 | { .procname = "net", .ctl_name = CTL_NET, }, | 3131 | { .procname = "net", .ctl_name = CTL_NET, }, |
| 3121 | { .procname = "ipv4", .ctl_name = NET_IPV4, }, | 3132 | { .procname = "ipv4", .ctl_name = NET_IPV4, }, |
| 3122 | { .procname = "route", .ctl_name = NET_IPV4_ROUTE, }, | ||
| 3123 | { }, | 3133 | { }, |
| 3124 | }; | 3134 | }; |
| 3125 | 3135 | ||
| 3126 | |||
| 3127 | static struct ctl_table ipv4_route_flush_table[] = { | 3136 | static struct ctl_table ipv4_route_flush_table[] = { |
| 3128 | { | 3137 | { |
| 3129 | .ctl_name = NET_IPV4_ROUTE_FLUSH, | 3138 | .ctl_name = NET_IPV4_ROUTE_FLUSH, |
| @@ -3136,6 +3145,13 @@ static struct ctl_table ipv4_route_flush_table[] = { | |||
| 3136 | { .ctl_name = 0 }, | 3145 | { .ctl_name = 0 }, |
| 3137 | }; | 3146 | }; |
| 3138 | 3147 | ||
| 3148 | static __net_initdata struct ctl_path ipv4_route_path[] = { | ||
| 3149 | { .procname = "net", .ctl_name = CTL_NET, }, | ||
| 3150 | { .procname = "ipv4", .ctl_name = NET_IPV4, }, | ||
| 3151 | { .procname = "route", .ctl_name = NET_IPV4_ROUTE, }, | ||
| 3152 | { }, | ||
| 3153 | }; | ||
| 3154 | |||
| 3139 | static __net_init int sysctl_route_net_init(struct net *net) | 3155 | static __net_init int sysctl_route_net_init(struct net *net) |
| 3140 | { | 3156 | { |
| 3141 | struct ctl_table *tbl; | 3157 | struct ctl_table *tbl; |
| @@ -3287,7 +3303,7 @@ int __init ip_rt_init(void) | |||
| 3287 | */ | 3303 | */ |
| 3288 | void __init ip_static_sysctl_init(void) | 3304 | void __init ip_static_sysctl_init(void) |
| 3289 | { | 3305 | { |
| 3290 | register_sysctl_paths(ipv4_route_path, ipv4_route_table); | 3306 | register_sysctl_paths(ipv4_path, ipv4_skeleton); |
| 3291 | } | 3307 | } |
| 3292 | #endif | 3308 | #endif |
| 3293 | 3309 | ||
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c index e6dfaeac6be3..587f8f60c489 100644 --- a/net/ipv6/sysctl_net_ipv6.c +++ b/net/ipv6/sysctl_net_ipv6.c | |||
| @@ -156,7 +156,7 @@ static struct ctl_table_header *ip6_base; | |||
| 156 | int ipv6_static_sysctl_register(void) | 156 | int ipv6_static_sysctl_register(void) |
| 157 | { | 157 | { |
| 158 | static struct ctl_table empty[1]; | 158 | static struct ctl_table empty[1]; |
| 159 | ip6_base = register_net_sysctl_rotable(net_ipv6_ctl_path, empty); | 159 | ip6_base = register_sysctl_paths(net_ipv6_ctl_path, empty); |
| 160 | if (ip6_base == NULL) | 160 | if (ip6_base == NULL) |
| 161 | return -ENOMEM; | 161 | return -ENOMEM; |
| 162 | return 0; | 162 | return 0; |
diff --git a/net/sctp/auth.c b/net/sctp/auth.c index 675a5c3e68a6..1fcb4cf2f4c9 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c | |||
| @@ -80,6 +80,10 @@ static struct sctp_auth_bytes *sctp_auth_create_key(__u32 key_len, gfp_t gfp) | |||
| 80 | { | 80 | { |
| 81 | struct sctp_auth_bytes *key; | 81 | struct sctp_auth_bytes *key; |
| 82 | 82 | ||
| 83 | /* Verify that we are not going to overflow INT_MAX */ | ||
| 84 | if ((INT_MAX - key_len) < sizeof(struct sctp_auth_bytes)) | ||
| 85 | return NULL; | ||
| 86 | |||
| 83 | /* Allocate the shared key */ | 87 | /* Allocate the shared key */ |
| 84 | key = kmalloc(sizeof(struct sctp_auth_bytes) + key_len, gfp); | 88 | key = kmalloc(sizeof(struct sctp_auth_bytes) + key_len, gfp); |
| 85 | if (!key) | 89 | if (!key) |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index bb5c9ef13046..afa952e726d7 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
| @@ -3144,6 +3144,11 @@ static int sctp_setsockopt_auth_key(struct sock *sk, | |||
| 3144 | goto out; | 3144 | goto out; |
| 3145 | } | 3145 | } |
| 3146 | 3146 | ||
| 3147 | if (authkey->sca_keylength > optlen) { | ||
| 3148 | ret = -EINVAL; | ||
| 3149 | goto out; | ||
| 3150 | } | ||
| 3151 | |||
| 3147 | asoc = sctp_id2assoc(sk, authkey->sca_assoc_id); | 3152 | asoc = sctp_id2assoc(sk, authkey->sca_assoc_id); |
| 3148 | if (!asoc && authkey->sca_assoc_id && sctp_style(sk, UDP)) { | 3153 | if (!asoc && authkey->sca_assoc_id && sctp_style(sk, UDP)) { |
| 3149 | ret = -EINVAL; | 3154 | ret = -EINVAL; |
