Skip to content

Commit 9b2c45d

Browse files
dvlasenkdavem330
authored andcommitted
net: make getname() functions return length rather than use int* parameter
Changes since v1: Added changes in these files: drivers/infiniband/hw/usnic/usnic_transport.c drivers/staging/lustre/lnet/lnet/lib-socket.c drivers/target/iscsi/iscsi_target_login.c drivers/vhost/net.c fs/dlm/lowcomms.c fs/ocfs2/cluster/tcp.c security/tomoyo/network.c Before: All these functions either return a negative error indicator, or store length of sockaddr into "int *socklen" parameter and return zero on success. "int *socklen" parameter is awkward. For example, if caller does not care, it still needs to provide on-stack storage for the value it does not need. None of the many FOO_getname() functions of various protocols ever used old value of *socklen. They always just overwrite it. This change drops this parameter, and makes all these functions, on success, return length of sockaddr. It's always >= 0 and can be differentiated from an error. Tests in callers are changed from "if (err)" to "if (err < 0)", where needed. rpc_sockname() lost "int buflen" parameter, since its only use was to be passed to kernel_getsockname() as &buflen and subsequently not used in any way. Userspace API is not changed. text data bss dec hex filename 30108430 2633624 873672 33615726 200ef6e vmlinux.before.o 30108109 2633612 873672 33615393 200ee21 vmlinux.o Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com> CC: David S. Miller <davem@davemloft.net> CC: linux-kernel@vger.kernel.org CC: netdev@vger.kernel.org CC: linux-bluetooth@vger.kernel.org CC: linux-decnet-user@lists.sourceforge.net CC: linux-wireless@vger.kernel.org CC: linux-rdma@vger.kernel.org CC: linux-sctp@vger.kernel.org CC: linux-nfs@vger.kernel.org CC: linux-x25@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7928b2c commit 9b2c45d

File tree

55 files changed

+159
-203
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+159
-203
lines changed

drivers/infiniband/hw/usnic/usnic_transport.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,13 @@ void usnic_transport_put_socket(struct socket *sock)
174174
int usnic_transport_sock_get_addr(struct socket *sock, int *proto,
175175
uint32_t *addr, uint16_t *port)
176176
{
177-
int len;
178177
int err;
179178
struct sockaddr_in sock_addr;
180179

181180
err = sock->ops->getname(sock,
182181
(struct sockaddr *)&sock_addr,
183-
&len, 0);
184-
if (err)
182+
0);
183+
if (err < 0)
185184
return err;
186185

187186
if (sock_addr.sin_family != AF_INET)

drivers/isdn/mISDN/socket.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ data_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
560560

561561
static int
562562
data_sock_getname(struct socket *sock, struct sockaddr *addr,
563-
int *addr_len, int peer)
563+
int peer)
564564
{
565565
struct sockaddr_mISDN *maddr = (struct sockaddr_mISDN *) addr;
566566
struct sock *sk = sock->sk;
@@ -570,14 +570,13 @@ data_sock_getname(struct socket *sock, struct sockaddr *addr,
570570

571571
lock_sock(sk);
572572

573-
*addr_len = sizeof(*maddr);
574573
maddr->family = AF_ISDN;
575574
maddr->dev = _pms(sk)->dev->id;
576575
maddr->channel = _pms(sk)->ch.nr;
577576
maddr->sapi = _pms(sk)->ch.addr & 0xff;
578577
maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xff;
579578
release_sock(sk);
580-
return 0;
579+
return sizeof(*maddr);
581580
}
582581

583582
static const struct proto_ops data_sock_ops = {

drivers/net/ppp/pppoe.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr,
714714
}
715715

716716
static int pppoe_getname(struct socket *sock, struct sockaddr *uaddr,
717-
int *usockaddr_len, int peer)
717+
int peer)
718718
{
719719
int len = sizeof(struct sockaddr_pppox);
720720
struct sockaddr_pppox sp;
@@ -726,9 +726,7 @@ static int pppoe_getname(struct socket *sock, struct sockaddr *uaddr,
726726

727727
memcpy(uaddr, &sp, len);
728728

729-
*usockaddr_len = len;
730-
731-
return 0;
729+
return len;
732730
}
733731

734732
static int pppoe_ioctl(struct socket *sock, unsigned int cmd,

drivers/net/ppp/pptp.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
483483
}
484484

485485
static int pptp_getname(struct socket *sock, struct sockaddr *uaddr,
486-
int *usockaddr_len, int peer)
486+
int peer)
487487
{
488488
int len = sizeof(struct sockaddr_pppox);
489489
struct sockaddr_pppox sp;
@@ -496,9 +496,7 @@ static int pptp_getname(struct socket *sock, struct sockaddr *uaddr,
496496

497497
memcpy(uaddr, &sp, len);
498498

499-
*usockaddr_len = len;
500-
501-
return 0;
499+
return len;
502500
}
503501

504502
static int pptp_release(struct socket *sock)

drivers/scsi/iscsi_tcp.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ static int iscsi_sw_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
732732
struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
733733
struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data;
734734
struct sockaddr_in6 addr;
735-
int rc, len;
735+
int rc;
736736

737737
switch(param) {
738738
case ISCSI_PARAM_CONN_PORT:
@@ -745,12 +745,12 @@ static int iscsi_sw_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
745745
}
746746
if (param == ISCSI_PARAM_LOCAL_PORT)
747747
rc = kernel_getsockname(tcp_sw_conn->sock,
748-
(struct sockaddr *)&addr, &len);
748+
(struct sockaddr *)&addr);
749749
else
750750
rc = kernel_getpeername(tcp_sw_conn->sock,
751-
(struct sockaddr *)&addr, &len);
751+
(struct sockaddr *)&addr);
752752
spin_unlock_bh(&conn->session->frwd_lock);
753-
if (rc)
753+
if (rc < 0)
754754
return rc;
755755

756756
return iscsi_conn_get_addr_param((struct sockaddr_storage *)
@@ -771,7 +771,7 @@ static int iscsi_sw_tcp_host_get_param(struct Scsi_Host *shost,
771771
struct iscsi_tcp_conn *tcp_conn;
772772
struct iscsi_sw_tcp_conn *tcp_sw_conn;
773773
struct sockaddr_in6 addr;
774-
int rc, len;
774+
int rc;
775775

776776
switch (param) {
777777
case ISCSI_HOST_PARAM_IPADDRESS:
@@ -793,9 +793,9 @@ static int iscsi_sw_tcp_host_get_param(struct Scsi_Host *shost,
793793
}
794794

795795
rc = kernel_getsockname(tcp_sw_conn->sock,
796-
(struct sockaddr *)&addr, &len);
796+
(struct sockaddr *)&addr);
797797
spin_unlock_bh(&session->frwd_lock);
798-
if (rc)
798+
if (rc < 0)
799799
return rc;
800800

801801
return iscsi_conn_get_addr_param((struct sockaddr_storage *)

drivers/soc/qcom/qmi_interface.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -586,15 +586,14 @@ static struct socket *qmi_sock_create(struct qmi_handle *qmi,
586586
struct sockaddr_qrtr *sq)
587587
{
588588
struct socket *sock;
589-
int sl = sizeof(*sq);
590589
int ret;
591590

592591
ret = sock_create_kern(&init_net, AF_QIPCRTR, SOCK_DGRAM,
593592
PF_QIPCRTR, &sock);
594593
if (ret < 0)
595594
return ERR_PTR(ret);
596595

597-
ret = kernel_getsockname(sock, (struct sockaddr *)sq, &sl);
596+
ret = kernel_getsockname(sock, (struct sockaddr *)sq);
598597
if (ret < 0) {
599598
sock_release(sock);
600599
return ERR_PTR(ret);

drivers/staging/ipx/af_ipx.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,16 +1577,14 @@ static int ipx_connect(struct socket *sock, struct sockaddr *uaddr,
15771577

15781578

15791579
static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
1580-
int *uaddr_len, int peer)
1580+
int peer)
15811581
{
15821582
struct ipx_address *addr;
15831583
struct sockaddr_ipx sipx;
15841584
struct sock *sk = sock->sk;
15851585
struct ipx_sock *ipxs = ipx_sk(sk);
15861586
int rc;
15871587

1588-
*uaddr_len = sizeof(struct sockaddr_ipx);
1589-
15901588
lock_sock(sk);
15911589
if (peer) {
15921590
rc = -ENOTCONN;
@@ -1620,7 +1618,7 @@ static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
16201618
sipx.sipx_zero = 0;
16211619
memcpy(uaddr, &sipx, sizeof(sipx));
16221620

1623-
rc = 0;
1621+
rc = sizeof(struct sockaddr_ipx);
16241622
out:
16251623
release_sock(sk);
16261624
return rc;

drivers/staging/irda/net/af_irda.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ static int irda_discover_daddr_and_lsap_sel(struct irda_sock *self, char *name)
697697
*
698698
*/
699699
static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
700-
int *uaddr_len, int peer)
700+
int peer)
701701
{
702702
struct sockaddr_irda saddr;
703703
struct sock *sk = sock->sk;
@@ -720,11 +720,9 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
720720
pr_debug("%s(), tsap_sel = %#x\n", __func__, saddr.sir_lsap_sel);
721721
pr_debug("%s(), addr = %08x\n", __func__, saddr.sir_addr);
722722

723-
/* uaddr_len come to us uninitialised */
724-
*uaddr_len = sizeof (struct sockaddr_irda);
725-
memcpy(uaddr, &saddr, *uaddr_len);
723+
memcpy(uaddr, &saddr, sizeof (struct sockaddr_irda));
726724

727-
return 0;
725+
return sizeof (struct sockaddr_irda);
728726
}
729727

730728
/*

drivers/staging/lustre/lnet/lnet/lib-socket.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -448,14 +448,13 @@ int
448448
lnet_sock_getaddr(struct socket *sock, bool remote, __u32 *ip, int *port)
449449
{
450450
struct sockaddr_in sin;
451-
int len = sizeof(sin);
452451
int rc;
453452

454453
if (remote)
455-
rc = kernel_getpeername(sock, (struct sockaddr *)&sin, &len);
454+
rc = kernel_getpeername(sock, (struct sockaddr *)&sin);
456455
else
457-
rc = kernel_getsockname(sock, (struct sockaddr *)&sin, &len);
458-
if (rc) {
456+
rc = kernel_getsockname(sock, (struct sockaddr *)&sin);
457+
if (rc < 0) {
459458
CERROR("Error %d getting sock %s IP/port\n",
460459
rc, remote ? "peer" : "local");
461460
return rc;

drivers/target/iscsi/iscsi_target_login.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,7 @@ int iscsit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn)
10201020
struct socket *new_sock, *sock = np->np_socket;
10211021
struct sockaddr_in sock_in;
10221022
struct sockaddr_in6 sock_in6;
1023-
int rc, err;
1023+
int rc;
10241024

10251025
rc = kernel_accept(sock, &new_sock, 0);
10261026
if (rc < 0)
@@ -1033,8 +1033,8 @@ int iscsit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn)
10331033
memset(&sock_in6, 0, sizeof(struct sockaddr_in6));
10341034

10351035
rc = conn->sock->ops->getname(conn->sock,
1036-
(struct sockaddr *)&sock_in6, &err, 1);
1037-
if (!rc) {
1036+
(struct sockaddr *)&sock_in6, 1);
1037+
if (rc >= 0) {
10381038
if (!ipv6_addr_v4mapped(&sock_in6.sin6_addr)) {
10391039
memcpy(&conn->login_sockaddr, &sock_in6, sizeof(sock_in6));
10401040
} else {
@@ -1047,8 +1047,8 @@ int iscsit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn)
10471047
}
10481048

10491049
rc = conn->sock->ops->getname(conn->sock,
1050-
(struct sockaddr *)&sock_in6, &err, 0);
1051-
if (!rc) {
1050+
(struct sockaddr *)&sock_in6, 0);
1051+
if (rc >= 0) {
10521052
if (!ipv6_addr_v4mapped(&sock_in6.sin6_addr)) {
10531053
memcpy(&conn->local_sockaddr, &sock_in6, sizeof(sock_in6));
10541054
} else {
@@ -1063,13 +1063,13 @@ int iscsit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn)
10631063
memset(&sock_in, 0, sizeof(struct sockaddr_in));
10641064

10651065
rc = conn->sock->ops->getname(conn->sock,
1066-
(struct sockaddr *)&sock_in, &err, 1);
1067-
if (!rc)
1066+
(struct sockaddr *)&sock_in, 1);
1067+
if (rc >= 0)
10681068
memcpy(&conn->login_sockaddr, &sock_in, sizeof(sock_in));
10691069

10701070
rc = conn->sock->ops->getname(conn->sock,
1071-
(struct sockaddr *)&sock_in, &err, 0);
1072-
if (!rc)
1071+
(struct sockaddr *)&sock_in, 0);
1072+
if (rc >= 0)
10731073
memcpy(&conn->local_sockaddr, &sock_in, sizeof(sock_in));
10741074
}
10751075

0 commit comments

Comments
 (0)