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 3bb45042e833..14a5d055717d 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -2970,7 +2970,8 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt, | |||
2970 | 2970 | ||
2971 | static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | 2971 | static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
2972 | { | 2972 | { |
2973 | struct sock *sk = sock->sk; | 2973 | struct net *net = sock_net(sock->sk); |
2974 | struct tipc_sioc_nodeid_req nr = {0}; | ||
2974 | struct tipc_sioc_ln_req lnr; | 2975 | struct tipc_sioc_ln_req lnr; |
2975 | void __user *argp = (void __user *)arg; | 2976 | void __user *argp = (void __user *)arg; |
2976 | 2977 | ||
@@ -2978,7 +2979,7 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
2978 | case SIOCGETLINKNAME: | 2979 | case SIOCGETLINKNAME: |
2979 | if (copy_from_user(&lnr, argp, sizeof(lnr))) | 2980 | if (copy_from_user(&lnr, argp, sizeof(lnr))) |
2980 | return -EFAULT; | 2981 | return -EFAULT; |
2981 | if (!tipc_node_get_linkname(sock_net(sk), | 2982 | if (!tipc_node_get_linkname(net, |
2982 | lnr.bearer_id & 0xffff, lnr.peer, | 2983 | lnr.bearer_id & 0xffff, lnr.peer, |
2983 | lnr.linkname, TIPC_MAX_LINK_NAME)) { | 2984 | lnr.linkname, TIPC_MAX_LINK_NAME)) { |
2984 | if (copy_to_user(argp, &lnr, sizeof(lnr))) | 2985 | if (copy_to_user(argp, &lnr, sizeof(lnr))) |
@@ -2986,6 +2987,14 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
2986 | return 0; | 2987 | return 0; |
2987 | } | 2988 | } |
2988 | return -EADDRNOTAVAIL; | 2989 | return -EADDRNOTAVAIL; |
2990 | case SIOCGETNODEID: | ||
2991 | if (copy_from_user(&nr, argp, sizeof(nr))) | ||
2992 | return -EFAULT; | ||
2993 | if (!tipc_node_get_id(net, nr.peer, nr.node_id)) | ||
2994 | return -EADDRNOTAVAIL; | ||
2995 | if (copy_to_user(argp, &nr, sizeof(nr))) | ||
2996 | return -EFAULT; | ||
2997 | return 0; | ||
2989 | default: | 2998 | default: |
2990 | return -ENOIOCTLCMD; | 2999 | return -ENOIOCTLCMD; |
2991 | } | 3000 | } |