diff options
| -rw-r--r-- | net/ipv4/af_inet.c | 3 | ||||
| -rw-r--r-- | net/ipv6/af_inet6.c | 3 | ||||
| -rw-r--r-- | net/irda/af_irda.c | 3 |
3 files changed, 9 insertions, 0 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 14ad21e2f..d915b3575 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -297,6 +297,9 @@ static int inet_create(struct net *net, struct socket *sock, int protocol, int try_loading_module = 0; int err; + if (protocol < 0 || protocol >= IPPROTO_MAX) + return -EINVAL; + if (!current_has_network()) return -EACCES; diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 72aa1a135..93ae4d403 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -123,6 +123,9 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol, int try_loading_module = 0; int err; + if (protocol < 0 || protocol >= IPPROTO_MAX) + return -EINVAL; + if (!current_has_network()) return -EACCES; diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c index c95bafa65..c5fdb89b7 100644 --- a/net/irda/af_irda.c +++ b/net/irda/af_irda.c @@ -1106,6 +1106,9 @@ static int irda_create(struct net *net, struct socket *sock, int protocol, struct sock *sk; struct irda_sock *self; + if (protocol < 0 || protocol > SK_PROTOCOL_MAX) + return -EINVAL; + IRDA_DEBUG(2, "%s()\n", __func__); if (protocol < 0 || protocol > SK_PROTOCOL_MAX) |
