diff options
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r-- | net/tipc/socket.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index cee6674a3bf4..3bb45042e833 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -692,10 +692,9 @@ static int tipc_getname(struct socket *sock, struct sockaddr *uaddr, | |||
692 | } | 692 | } |
693 | 693 | ||
694 | /** | 694 | /** |
695 | * tipc_poll - read and possibly block on pollmask | 695 | * tipc_poll - read pollmask |
696 | * @file: file structure associated with the socket | 696 | * @file: file structure associated with the socket |
697 | * @sock: socket for which to calculate the poll bits | 697 | * @sock: socket for which to calculate the poll bits |
698 | * @wait: ??? | ||
699 | * | 698 | * |
700 | * Returns pollmask value | 699 | * Returns pollmask value |
701 | * | 700 | * |
@@ -709,15 +708,12 @@ static int tipc_getname(struct socket *sock, struct sockaddr *uaddr, | |||
709 | * imply that the operation will succeed, merely that it should be performed | 708 | * imply that the operation will succeed, merely that it should be performed |
710 | * and will not block. | 709 | * and will not block. |
711 | */ | 710 | */ |
712 | static __poll_t tipc_poll(struct file *file, struct socket *sock, | 711 | static __poll_t tipc_poll_mask(struct socket *sock, __poll_t events) |
713 | poll_table *wait) | ||
714 | { | 712 | { |
715 | struct sock *sk = sock->sk; | 713 | struct sock *sk = sock->sk; |
716 | struct tipc_sock *tsk = tipc_sk(sk); | 714 | struct tipc_sock *tsk = tipc_sk(sk); |
717 | __poll_t revents = 0; | 715 | __poll_t revents = 0; |
718 | 716 | ||
719 | sock_poll_wait(file, sk_sleep(sk), wait); | ||
720 | |||
721 | if (sk->sk_shutdown & RCV_SHUTDOWN) | 717 | if (sk->sk_shutdown & RCV_SHUTDOWN) |
722 | revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM; | 718 | revents |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM; |
723 | if (sk->sk_shutdown == SHUTDOWN_MASK) | 719 | if (sk->sk_shutdown == SHUTDOWN_MASK) |
@@ -1278,7 +1274,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen) | |||
1278 | struct tipc_msg *hdr = &tsk->phdr; | 1274 | struct tipc_msg *hdr = &tsk->phdr; |
1279 | struct tipc_name_seq *seq; | 1275 | struct tipc_name_seq *seq; |
1280 | struct sk_buff_head pkts; | 1276 | struct sk_buff_head pkts; |
1281 | u32 dnode, dport; | 1277 | u32 dport, dnode = 0; |
1282 | u32 type, inst; | 1278 | u32 type, inst; |
1283 | int mtu, rc; | 1279 | int mtu, rc; |
1284 | 1280 | ||
@@ -1348,6 +1344,8 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen) | |||
1348 | msg_set_destnode(hdr, dnode); | 1344 | msg_set_destnode(hdr, dnode); |
1349 | msg_set_destport(hdr, dest->addr.id.ref); | 1345 | msg_set_destport(hdr, dest->addr.id.ref); |
1350 | msg_set_hdr_sz(hdr, BASIC_H_SIZE); | 1346 | msg_set_hdr_sz(hdr, BASIC_H_SIZE); |
1347 | } else { | ||
1348 | return -EINVAL; | ||
1351 | } | 1349 | } |
1352 | 1350 | ||
1353 | /* Block or return if destination link is congested */ | 1351 | /* Block or return if destination link is congested */ |
@@ -1514,10 +1512,10 @@ static void tipc_sk_set_orig_addr(struct msghdr *m, struct sk_buff *skb) | |||
1514 | 1512 | ||
1515 | srcaddr->sock.family = AF_TIPC; | 1513 | srcaddr->sock.family = AF_TIPC; |
1516 | srcaddr->sock.addrtype = TIPC_ADDR_ID; | 1514 | srcaddr->sock.addrtype = TIPC_ADDR_ID; |
1515 | srcaddr->sock.scope = 0; | ||
1517 | srcaddr->sock.addr.id.ref = msg_origport(hdr); | 1516 | srcaddr->sock.addr.id.ref = msg_origport(hdr); |
1518 | srcaddr->sock.addr.id.node = msg_orignode(hdr); | 1517 | srcaddr->sock.addr.id.node = msg_orignode(hdr); |
1519 | srcaddr->sock.addr.name.domain = 0; | 1518 | srcaddr->sock.addr.name.domain = 0; |
1520 | srcaddr->sock.scope = 0; | ||
1521 | m->msg_namelen = sizeof(struct sockaddr_tipc); | 1519 | m->msg_namelen = sizeof(struct sockaddr_tipc); |
1522 | 1520 | ||
1523 | if (!msg_in_group(hdr)) | 1521 | if (!msg_in_group(hdr)) |
@@ -1526,6 +1524,7 @@ static void tipc_sk_set_orig_addr(struct msghdr *m, struct sk_buff *skb) | |||
1526 | /* Group message users may also want to know sending member's id */ | 1524 | /* Group message users may also want to know sending member's id */ |
1527 | srcaddr->member.family = AF_TIPC; | 1525 | srcaddr->member.family = AF_TIPC; |
1528 | srcaddr->member.addrtype = TIPC_ADDR_NAME; | 1526 | srcaddr->member.addrtype = TIPC_ADDR_NAME; |
1527 | srcaddr->member.scope = 0; | ||
1529 | srcaddr->member.addr.name.name.type = msg_nametype(hdr); | 1528 | srcaddr->member.addr.name.name.type = msg_nametype(hdr); |
1530 | srcaddr->member.addr.name.name.instance = TIPC_SKB_CB(skb)->orig_member; | 1529 | srcaddr->member.addr.name.name.instance = TIPC_SKB_CB(skb)->orig_member; |
1531 | srcaddr->member.addr.name.domain = 0; | 1530 | srcaddr->member.addr.name.domain = 0; |
@@ -3025,7 +3024,7 @@ static const struct proto_ops msg_ops = { | |||
3025 | .socketpair = tipc_socketpair, | 3024 | .socketpair = tipc_socketpair, |
3026 | .accept = sock_no_accept, | 3025 | .accept = sock_no_accept, |
3027 | .getname = tipc_getname, | 3026 | .getname = tipc_getname, |
3028 | .poll = tipc_poll, | 3027 | .poll_mask = tipc_poll_mask, |
3029 | .ioctl = tipc_ioctl, | 3028 | .ioctl = tipc_ioctl, |
3030 | .listen = sock_no_listen, | 3029 | .listen = sock_no_listen, |
3031 | .shutdown = tipc_shutdown, | 3030 | .shutdown = tipc_shutdown, |
@@ -3046,7 +3045,7 @@ static const struct proto_ops packet_ops = { | |||
3046 | .socketpair = tipc_socketpair, | 3045 | .socketpair = tipc_socketpair, |
3047 | .accept = tipc_accept, | 3046 | .accept = tipc_accept, |
3048 | .getname = tipc_getname, | 3047 | .getname = tipc_getname, |
3049 | .poll = tipc_poll, | 3048 | .poll_mask = tipc_poll_mask, |
3050 | .ioctl = tipc_ioctl, | 3049 | .ioctl = tipc_ioctl, |
3051 | .listen = tipc_listen, | 3050 | .listen = tipc_listen, |
3052 | .shutdown = tipc_shutdown, | 3051 | .shutdown = tipc_shutdown, |
@@ -3067,7 +3066,7 @@ static const struct proto_ops stream_ops = { | |||
3067 | .socketpair = tipc_socketpair, | 3066 | .socketpair = tipc_socketpair, |
3068 | .accept = tipc_accept, | 3067 | .accept = tipc_accept, |
3069 | .getname = tipc_getname, | 3068 | .getname = tipc_getname, |
3070 | .poll = tipc_poll, | 3069 | .poll_mask = tipc_poll_mask, |
3071 | .ioctl = tipc_ioctl, | 3070 | .ioctl = tipc_ioctl, |
3072 | .listen = tipc_listen, | 3071 | .listen = tipc_listen, |
3073 | .shutdown = tipc_shutdown, | 3072 | .shutdown = tipc_shutdown, |
@@ -3257,8 +3256,8 @@ out: | |||
3257 | } | 3256 | } |
3258 | EXPORT_SYMBOL(tipc_nl_sk_walk); | 3257 | EXPORT_SYMBOL(tipc_nl_sk_walk); |
3259 | 3258 | ||
3260 | int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct tipc_sock *tsk, | 3259 | int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct netlink_callback *cb, |
3261 | u32 sk_filter_state, | 3260 | struct tipc_sock *tsk, u32 sk_filter_state, |
3262 | u64 (*tipc_diag_gen_cookie)(struct sock *sk)) | 3261 | u64 (*tipc_diag_gen_cookie)(struct sock *sk)) |
3263 | { | 3262 | { |
3264 | struct sock *sk = &tsk->sk; | 3263 | struct sock *sk = &tsk->sk; |
@@ -3280,7 +3279,7 @@ int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct tipc_sock *tsk, | |||
3280 | nla_put_u32(skb, TIPC_NLA_SOCK_TIPC_STATE, (u32)sk->sk_state) || | 3279 | nla_put_u32(skb, TIPC_NLA_SOCK_TIPC_STATE, (u32)sk->sk_state) || |
3281 | nla_put_u32(skb, TIPC_NLA_SOCK_INO, sock_i_ino(sk)) || | 3280 | nla_put_u32(skb, TIPC_NLA_SOCK_INO, sock_i_ino(sk)) || |
3282 | nla_put_u32(skb, TIPC_NLA_SOCK_UID, | 3281 | nla_put_u32(skb, TIPC_NLA_SOCK_UID, |
3283 | from_kuid_munged(sk_user_ns(NETLINK_CB(skb).sk), | 3282 | from_kuid_munged(sk_user_ns(NETLINK_CB(cb->skb).sk), |
3284 | sock_i_uid(sk))) || | 3283 | sock_i_uid(sk))) || |
3285 | nla_put_u64_64bit(skb, TIPC_NLA_SOCK_COOKIE, | 3284 | nla_put_u64_64bit(skb, TIPC_NLA_SOCK_COOKIE, |
3286 | tipc_diag_gen_cookie(sk), | 3285 | tipc_diag_gen_cookie(sk), |