diff options
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/socket.c b/net/socket.c index dbd1a6851edd..3145103cdf54 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -1145,8 +1145,11 @@ static int __sock_create(int family, int type, int protocol, struct socket **res | |||
1145 | if (!try_module_get(net_families[family]->owner)) | 1145 | if (!try_module_get(net_families[family]->owner)) |
1146 | goto out_release; | 1146 | goto out_release; |
1147 | 1147 | ||
1148 | if ((err = net_families[family]->create(sock, protocol)) < 0) | 1148 | if ((err = net_families[family]->create(sock, protocol)) < 0) { |
1149 | sock->ops = NULL; | ||
1149 | goto out_module_put; | 1150 | goto out_module_put; |
1151 | } | ||
1152 | |||
1150 | /* | 1153 | /* |
1151 | * Now to bump the refcnt of the [loadable] module that owns this | 1154 | * Now to bump the refcnt of the [loadable] module that owns this |
1152 | * socket at sock_release time we decrement its refcnt. | 1155 | * socket at sock_release time we decrement its refcnt. |
@@ -1360,16 +1363,16 @@ asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, int _ | |||
1360 | newsock->type = sock->type; | 1363 | newsock->type = sock->type; |
1361 | newsock->ops = sock->ops; | 1364 | newsock->ops = sock->ops; |
1362 | 1365 | ||
1363 | err = security_socket_accept(sock, newsock); | ||
1364 | if (err) | ||
1365 | goto out_release; | ||
1366 | |||
1367 | /* | 1366 | /* |
1368 | * We don't need try_module_get here, as the listening socket (sock) | 1367 | * We don't need try_module_get here, as the listening socket (sock) |
1369 | * has the protocol module (sock->ops->owner) held. | 1368 | * has the protocol module (sock->ops->owner) held. |
1370 | */ | 1369 | */ |
1371 | __module_get(newsock->ops->owner); | 1370 | __module_get(newsock->ops->owner); |
1372 | 1371 | ||
1372 | err = security_socket_accept(sock, newsock); | ||
1373 | if (err) | ||
1374 | goto out_release; | ||
1375 | |||
1373 | err = sock->ops->accept(sock, newsock, sock->file->f_flags); | 1376 | err = sock->ops->accept(sock, newsock, sock->file->f_flags); |
1374 | if (err < 0) | 1377 | if (err < 0) |
1375 | goto out_release; | 1378 | goto out_release; |