diff options
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r-- | net/tipc/socket.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 252a52ae0893..c4992002fd68 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -2973,7 +2973,8 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt, | |||
2973 | 2973 | ||
2974 | static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | 2974 | static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
2975 | { | 2975 | { |
2976 | struct sock *sk = sock->sk; | 2976 | struct net *net = sock_net(sock->sk); |
2977 | struct tipc_sioc_nodeid_req nr = {0}; | ||
2977 | struct tipc_sioc_ln_req lnr; | 2978 | struct tipc_sioc_ln_req lnr; |
2978 | void __user *argp = (void __user *)arg; | 2979 | void __user *argp = (void __user *)arg; |
2979 | 2980 | ||
@@ -2981,7 +2982,7 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
2981 | case SIOCGETLINKNAME: | 2982 | case SIOCGETLINKNAME: |
2982 | if (copy_from_user(&lnr, argp, sizeof(lnr))) | 2983 | if (copy_from_user(&lnr, argp, sizeof(lnr))) |
2983 | return -EFAULT; | 2984 | return -EFAULT; |
2984 | if (!tipc_node_get_linkname(sock_net(sk), | 2985 | if (!tipc_node_get_linkname(net, |
2985 | lnr.bearer_id & 0xffff, lnr.peer, | 2986 | lnr.bearer_id & 0xffff, lnr.peer, |
2986 | lnr.linkname, TIPC_MAX_LINK_NAME)) { | 2987 | lnr.linkname, TIPC_MAX_LINK_NAME)) { |
2987 | if (copy_to_user(argp, &lnr, sizeof(lnr))) | 2988 | if (copy_to_user(argp, &lnr, sizeof(lnr))) |
@@ -2989,6 +2990,14 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
2989 | return 0; | 2990 | return 0; |
2990 | } | 2991 | } |
2991 | return -EADDRNOTAVAIL; | 2992 | return -EADDRNOTAVAIL; |
2993 | case SIOCGETNODEID: | ||
2994 | if (copy_from_user(&nr, argp, sizeof(nr))) | ||
2995 | return -EFAULT; | ||
2996 | if (!tipc_node_get_id(net, nr.peer, nr.node_id)) | ||
2997 | return -EADDRNOTAVAIL; | ||
2998 | if (copy_to_user(argp, &nr, sizeof(nr))) | ||
2999 | return -EFAULT; | ||
3000 | return 0; | ||
2992 | default: | 3001 | default: |
2993 | return -ENOIOCTLCMD; | 3002 | return -ENOIOCTLCMD; |
2994 | } | 3003 | } |