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 <[email protected]> CC: David S. Miller <[email protected]> CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] Signed-off-by: David S. Miller <[email protected]>
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

drivers/vhost/net.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ static struct socket *get_raw_socket(int fd)
10381038
struct sockaddr_ll sa;
10391039
char buf[MAX_ADDR_LEN];
10401040
} uaddr;
1041-
int uaddr_len = sizeof uaddr, r;
1041+
int r;
10421042
struct socket *sock = sockfd_lookup(fd, &r);
10431043

10441044
if (!sock)
@@ -1050,9 +1050,8 @@ static struct socket *get_raw_socket(int fd)
10501050
goto err;
10511051
}
10521052

1053-
r = sock->ops->getname(sock, (struct sockaddr *)&uaddr.sa,
1054-
&uaddr_len, 0);
1055-
if (r)
1053+
r = sock->ops->getname(sock, (struct sockaddr *)&uaddr.sa, 0);
1054+
if (r < 0)
10561055
goto err;
10571056

10581057
if (uaddr.sa.sll_family != AF_PACKET) {

fs/dlm/lowcomms.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,6 @@ static void lowcomms_error_report(struct sock *sk)
482482
{
483483
struct connection *con;
484484
struct sockaddr_storage saddr;
485-
int buflen;
486485
void (*orig_report)(struct sock *) = NULL;
487486

488487
read_lock_bh(&sk->sk_callback_lock);
@@ -492,7 +491,7 @@ static void lowcomms_error_report(struct sock *sk)
492491

493492
orig_report = listen_sock.sk_error_report;
494493
if (con->sock == NULL ||
495-
kernel_getpeername(con->sock, (struct sockaddr *)&saddr, &buflen)) {
494+
kernel_getpeername(con->sock, (struct sockaddr *)&saddr) < 0) {
496495
printk_ratelimited(KERN_ERR "dlm: node %d: socket error "
497496
"sending to node %d, port %d, "
498497
"sk_err=%d/%d\n", dlm_our_nodeid(),
@@ -757,8 +756,8 @@ static int tcp_accept_from_sock(struct connection *con)
757756

758757
/* Get the connected socket's peer */
759758
memset(&peeraddr, 0, sizeof(peeraddr));
760-
if (newsock->ops->getname(newsock, (struct sockaddr *)&peeraddr,
761-
&len, 2)) {
759+
len = newsock->ops->getname(newsock, (struct sockaddr *)&peeraddr, 2);
760+
if (len < 0) {
762761
result = -ECONNABORTED;
763762
goto accept_err;
764763
}

fs/ocfs2/cluster/tcp.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,7 +1819,7 @@ int o2net_register_hb_callbacks(void)
18191819

18201820
static int o2net_accept_one(struct socket *sock, int *more)
18211821
{
1822-
int ret, slen;
1822+
int ret;
18231823
struct sockaddr_in sin;
18241824
struct socket *new_sock = NULL;
18251825
struct o2nm_node *node = NULL;
@@ -1864,9 +1864,7 @@ static int o2net_accept_one(struct socket *sock, int *more)
18641864
goto out;
18651865
}
18661866

1867-
slen = sizeof(sin);
1868-
ret = new_sock->ops->getname(new_sock, (struct sockaddr *) &sin,
1869-
&slen, 1);
1867+
ret = new_sock->ops->getname(new_sock, (struct sockaddr *) &sin, 1);
18701868
if (ret < 0)
18711869
goto out;
18721870

include/linux/net.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ struct proto_ops {
146146
struct socket *newsock, int flags, bool kern);
147147
int (*getname) (struct socket *sock,
148148
struct sockaddr *addr,
149-
int *sockaddr_len, int peer);
149+
int peer);
150150
__poll_t (*poll) (struct file *file, struct socket *sock,
151151
struct poll_table_struct *wait);
152152
int (*ioctl) (struct socket *sock, unsigned int cmd,
@@ -294,10 +294,8 @@ int kernel_listen(struct socket *sock, int backlog);
294294
int kernel_accept(struct socket *sock, struct socket **newsock, int flags);
295295
int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
296296
int flags);
297-
int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
298-
int *addrlen);
299-
int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
300-
int *addrlen);
297+
int kernel_getsockname(struct socket *sock, struct sockaddr *addr);
298+
int kernel_getpeername(struct socket *sock, struct sockaddr *addr);
301299
int kernel_getsockopt(struct socket *sock, int level, int optname, char *optval,
302300
int *optlen);
303301
int kernel_setsockopt(struct socket *sock, int level, int optname, char *optval,

include/net/inet_common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ int inet_shutdown(struct socket *sock, int how);
3232
int inet_listen(struct socket *sock, int backlog);
3333
void inet_sock_destruct(struct sock *sk);
3434
int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len);
35-
int inet_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_len,
35+
int inet_getname(struct socket *sock, struct sockaddr *uaddr,
3636
int peer);
3737
int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
3838
int inet_ctl_sock_create(struct sock **sk, unsigned short family,

include/net/ipv6.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,7 @@ void ipv6_local_rxpmtu(struct sock *sk, struct flowi6 *fl6, u32 mtu);
10561056

10571057
int inet6_release(struct socket *sock);
10581058
int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len);
1059-
int inet6_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_len,
1059+
int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
10601060
int peer);
10611061
int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
10621062

include/net/sock.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1584,7 +1584,7 @@ int sock_no_bind(struct socket *, struct sockaddr *, int);
15841584
int sock_no_connect(struct socket *, struct sockaddr *, int, int);
15851585
int sock_no_socketpair(struct socket *, struct socket *);
15861586
int sock_no_accept(struct socket *, struct socket *, int, bool);
1587-
int sock_no_getname(struct socket *, struct sockaddr *, int *, int);
1587+
int sock_no_getname(struct socket *, struct sockaddr *, int);
15881588
__poll_t sock_no_poll(struct file *, struct socket *,
15891589
struct poll_table_struct *);
15901590
int sock_no_ioctl(struct socket *, unsigned int, unsigned long);

0 commit comments

Comments
 (0)