aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/vxlan.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index da8479479d01..75a3a740ce19 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -2180,7 +2180,7 @@ static void vxlan_del_work(struct work_struct *work)
2180 * could be used for both IPv4 and IPv6 communications, but 2180 * could be used for both IPv4 and IPv6 communications, but
2181 * users may set bindv6only=1. 2181 * users may set bindv6only=1.
2182 */ 2182 */
2183static int create_v6_sock(struct net *net, __be16 port, struct socket **psock) 2183static struct socket *create_v6_sock(struct net *net, __be16 port)
2184{ 2184{
2185 struct sock *sk; 2185 struct sock *sk;
2186 struct socket *sock; 2186 struct socket *sock;
@@ -2193,7 +2193,7 @@ static int create_v6_sock(struct net *net, __be16 port, struct socket **psock)
2193 rc = sock_create_kern(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, &sock); 2193 rc = sock_create_kern(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, &sock);
2194 if (rc < 0) { 2194 if (rc < 0) {
2195 pr_debug("UDPv6 socket create failed\n"); 2195 pr_debug("UDPv6 socket create failed\n");
2196 return rc; 2196 return ERR_PTR(rc);
2197 } 2197 }
2198 2198
2199 /* Put in proper namespace */ 2199 /* Put in proper namespace */
@@ -2208,28 +2208,27 @@ static int create_v6_sock(struct net *net, __be16 port, struct socket **psock)
2208 pr_debug("bind for UDPv6 socket %pI6:%u (%d)\n", 2208 pr_debug("bind for UDPv6 socket %pI6:%u (%d)\n",
2209 &vxlan_addr.sin6_addr, ntohs(vxlan_addr.sin6_port), rc); 2209 &vxlan_addr.sin6_addr, ntohs(vxlan_addr.sin6_port), rc);
2210 sk_release_kernel(sk); 2210 sk_release_kernel(sk);
2211 return rc; 2211 return ERR_PTR(rc);
2212 } 2212 }
2213 /* At this point, IPv6 module should have been loaded in 2213 /* At this point, IPv6 module should have been loaded in
2214 * sock_create_kern(). 2214 * sock_create_kern().
2215 */ 2215 */
2216 BUG_ON(!ipv6_stub); 2216 BUG_ON(!ipv6_stub);
2217 2217
2218 *psock = sock;
2219 /* Disable multicast loopback */ 2218 /* Disable multicast loopback */
2220 inet_sk(sk)->mc_loop = 0; 2219 inet_sk(sk)->mc_loop = 0;
2221 return 0; 2220 return sock;
2222} 2221}
2223 2222
2224#else 2223#else
2225 2224
2226static int create_v6_sock(struct net *net, __be16 port, struct socket **psock) 2225static struct socket *create_v6_sock(struct net *net, __be16 port)
2227{ 2226{
2228 return -EPFNOSUPPORT; 2227 return ERR_PTR(-EPFNOSUPPORT);
2229} 2228}
2230#endif 2229#endif
2231 2230
2232static int create_v4_sock(struct net *net, __be16 port, struct socket **psock) 2231static struct socket *create_v4_sock(struct net *net, __be16 port)
2233{ 2232{
2234 struct sock *sk; 2233 struct sock *sk;
2235 struct socket *sock; 2234 struct socket *sock;
@@ -2244,7 +2243,7 @@ static int create_v4_sock(struct net *net, __be16 port, struct socket **psock)
2244 rc = sock_create_kern(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock); 2243 rc = sock_create_kern(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
2245 if (rc < 0) { 2244 if (rc < 0) {
2246 pr_debug("UDP socket create failed\n"); 2245 pr_debug("UDP socket create failed\n");
2247 return rc; 2246 return ERR_PTR(rc);
2248 } 2247 }
2249 2248
2250 /* Put in proper namespace */ 2249 /* Put in proper namespace */
@@ -2257,13 +2256,12 @@ static int create_v4_sock(struct net *net, __be16 port, struct socket **psock)
2257 pr_debug("bind for UDP socket %pI4:%u (%d)\n", 2256 pr_debug("bind for UDP socket %pI4:%u (%d)\n",
2258 &vxlan_addr.sin_addr, ntohs(vxlan_addr.sin_port), rc); 2257 &vxlan_addr.sin_addr, ntohs(vxlan_addr.sin_port), rc);
2259 sk_release_kernel(sk); 2258 sk_release_kernel(sk);
2260 return rc; 2259 return ERR_PTR(rc);
2261 } 2260 }
2262 2261
2263 *psock = sock;
2264 /* Disable multicast loopback */ 2262 /* Disable multicast loopback */
2265 inet_sk(sk)->mc_loop = 0; 2263 inet_sk(sk)->mc_loop = 0;
2266 return 0; 2264 return sock;
2267} 2265}
2268 2266
2269/* Create new listen socket if needed */ 2267/* Create new listen socket if needed */
@@ -2274,7 +2272,6 @@ static struct vxlan_sock *vxlan_socket_create(struct net *net, __be16 port,
2274 struct vxlan_sock *vs; 2272 struct vxlan_sock *vs;
2275 struct socket *sock; 2273 struct socket *sock;
2276 struct sock *sk; 2274 struct sock *sk;
2277 int rc = 0;
2278 unsigned int h; 2275 unsigned int h;
2279 2276
2280 vs = kmalloc(sizeof(*vs), GFP_KERNEL); 2277 vs = kmalloc(sizeof(*vs), GFP_KERNEL);
@@ -2287,12 +2284,12 @@ static struct vxlan_sock *vxlan_socket_create(struct net *net, __be16 port,
2287 INIT_WORK(&vs->del_work, vxlan_del_work); 2284 INIT_WORK(&vs->del_work, vxlan_del_work);
2288 2285
2289 if (ipv6) 2286 if (ipv6)
2290 rc = create_v6_sock(net, port, &sock); 2287 sock = create_v6_sock(net, port);
2291 else 2288 else
2292 rc = create_v4_sock(net, port, &sock); 2289 sock = create_v4_sock(net, port);
2293 if (rc < 0) { 2290 if (IS_ERR(sock)) {
2294 kfree(vs); 2291 kfree(vs);
2295 return ERR_PTR(rc); 2292 return ERR_PTR(PTR_ERR(sock));
2296 } 2293 }
2297 2294
2298 vs->sock = sock; 2295 vs->sock = sock;