From nobody Sat May 28 20:53:26 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 446961B5072D; Sat, 28 May 2022 20:53:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4L9YmR0CYHz4lDm; Sat, 28 May 2022 20:53:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653771207; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=s4eNH+4pu2Xdnz3x6gq2Cx9x0TklQKmvXFBQuNJ89Jw=; b=Z6aMFrN8w52mGyX+nDssViilZTZVUv3Hjy2qA5MjXxUwkqw+6E8dd2n0vt+8Oc09EPgGak HuCyYZXL05Sytl83ZfpINwDNJ4+aJ0eiDpqStoNVBSUjg8+c4z3MRKTRiTv+VOIRqmyR9p eTBfzxwUx6sPlKQLG7K6SX95d14MrDvf/DvfFl1q2IUc1ibeYECQbrOkRwd6loxx28rHmU 0JfidAQJ5Qw+mJDCxko7BOHh4PgGWD5H15pnkIczr0h4MN8x3huuobu6jS/qaKqMN1kF7U GfkUozAkd6KY+ajgx9BJxVnifO8G/3EHsBN6ndrCpRszs55QBlo3pkuOFsygxw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 64F8E15DC4; Sat, 28 May 2022 20:53:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24SKrQS6099459; Sat, 28 May 2022 20:53:26 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24SKrQra099458; Sat, 28 May 2022 20:53:26 GMT (envelope-from git) Date: Sat, 28 May 2022 20:53:26 GMT Message-Id: <202205282053.24SKrQra099458@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dmitry Chagin Subject: git: 0eda2ceab782 - main - linux(4): Refactor linux_common_recvmsg() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0eda2ceab7820aeba79029b59b3fe9b28a66c766 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653771207; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=s4eNH+4pu2Xdnz3x6gq2Cx9x0TklQKmvXFBQuNJ89Jw=; b=GO6T1h0ZnxoRVIAGoSxumHOKqhyQB2VsnkQwmKziLhtB1Jh9a7hdIcBTb3oMBAWZmNdP1G AGkoPxnsEILQRCeucZxL8RaMaV+XssO9VaEQSgntwb6iRK6bVOQU5JnTSTe18eiT33MfZQ JzsGkQFExH9zOE7NVDuT7LZrA4Wdp/IFrzfiq5jswSBKcXVz5IA+72gEZo2q18fLKemnTO 6TxceknG9mdknGVz8fLIM1hzdKaeVphgqwOXZ51sNsMJ38m0quE+W9bY4mUsz41/DKFCpp 9GkENof+En4yyq5+v+qZ6FGAFUThNeex0txBDsB/mXB6jjUaI/laPrN7B+z7wA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1653771207; a=rsa-sha256; cv=none; b=JJQstNiKmfi99VmS/cuEjtkesI9ZXWJg9g/pwH4R6bATLn4ByfrUcCVrI0CLRyXETUfEKU +b2ynekllqBlHVLxiOZu18xLvf2nS0jfe0xALxczv9WRYMo9VMtVF2GK0WohtYBCPdTB4T gChLyNCY1f3eOaW9EOkngfApBW09UbC41Wfayc3mHd2G5QyDnyAG3y89oOfdHj5eWeySnS djrU638XHh8qNNBgVmFe2Cz/MOCToRllQjR9AQfenVGgqE2QCIQRuacw1u6AZvry3YhXak //ZcT4rQZzf4ThQSVXZaDpma0Yd8z3qxKwDifOsjfkgPZVOtGgdCN1AVQaFfUA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=0eda2ceab7820aeba79029b59b3fe9b28a66c766 commit 0eda2ceab7820aeba79029b59b3fe9b28a66c766 Author: Dmitry Chagin AuthorDate: 2022-05-28 20:46:22 +0000 Commit: Dmitry Chagin CommitDate: 2022-05-28 20:46:22 +0000 linux(4): Refactor linux_common_recvmsg() To improve readability lower nesting level, better naming for variables. No functional changes. MFC after: 2 weeks --- sys/compat/linux/linux_socket.c | 168 +++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 88 deletions(-) diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 14f034eb8037..401e1bc5c88f 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -1691,9 +1691,9 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr, { struct proc *p = td->td_proc; struct cmsghdr *cm; - struct l_cmsghdr *linux_cmsg = NULL; + struct l_cmsghdr *lcm = NULL; socklen_t datalen, maxlen, outlen; - struct l_msghdr linux_msghdr; + struct l_msghdr l_msghdr; struct iovec *iov, *uiov; struct mbuf *control = NULL; struct mbuf **controlp; @@ -1702,7 +1702,7 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr, void *data, *udata; int error; - error = copyin(msghdr, &linux_msghdr, sizeof(linux_msghdr)); + error = copyin(msghdr, &l_msghdr, sizeof(l_msghdr)); if (error != 0) return (error); @@ -1710,9 +1710,9 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr, * Pass user-supplied recvmsg() flags in msg_flags field, * following sys_recvmsg() convention. */ - linux_msghdr.msg_flags = flags; + l_msghdr.msg_flags = flags; - error = linux_to_bsd_msghdr(msg, &linux_msghdr); + error = linux_to_bsd_msghdr(msg, &l_msghdr); if (error != 0) return (error); @@ -1746,111 +1746,103 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr, * Note that kern_recvit() updates msg->msg_namelen. */ if (msg->msg_name != NULL && msg->msg_namelen > 0) { - msg->msg_name = PTRIN(linux_msghdr.msg_name); + msg->msg_name = PTRIN(l_msghdr.msg_name); error = linux_copyout_sockaddr(sa, msg->msg_name, msg->msg_namelen); if (error != 0) goto bad; } - error = bsd_to_linux_msghdr(msg, &linux_msghdr); + error = bsd_to_linux_msghdr(msg, &l_msghdr); if (error != 0) goto bad; - maxlen = linux_msghdr.msg_controllen; - linux_msghdr.msg_controllen = 0; - if (control) { - linux_cmsg = malloc(L_CMSG_HDRSZ, M_LINUX, M_WAITOK | M_ZERO); - - msg->msg_control = mtod(control, struct cmsghdr *); - msg->msg_controllen = control->m_len; - - cm = CMSG_FIRSTHDR(msg); - outbuf = PTRIN(linux_msghdr.msg_control); - outlen = 0; - while (cm != NULL) { - linux_cmsg->cmsg_type = - bsd_to_linux_cmsg_type(p, cm->cmsg_type); - linux_cmsg->cmsg_level = - bsd_to_linux_sockopt_level(cm->cmsg_level); - if (linux_cmsg->cmsg_type == -1 || - cm->cmsg_level != SOL_SOCKET) { - linux_msg(curthread, - "unsupported recvmsg cmsg level %d type %d", - cm->cmsg_level, cm->cmsg_type); - error = EINVAL; - goto bad; - } - - data = CMSG_DATA(cm); - datalen = (caddr_t)cm + cm->cmsg_len - (caddr_t)data; - udata = NULL; - - switch (cm->cmsg_type) { - case SCM_RIGHTS: - error = recvmsg_scm_rights(td, flags, - &datalen, &data, &udata); - break; + maxlen = l_msghdr.msg_controllen; + l_msghdr.msg_controllen = 0; + if (control == NULL) + goto out; - case SCM_CREDS: - error = recvmsg_scm_creds(&datalen, - &data, &udata); - break; + lcm = malloc(L_CMSG_HDRSZ, M_LINUX, M_WAITOK | M_ZERO); + msg->msg_control = mtod(control, struct cmsghdr *); + msg->msg_controllen = control->m_len; + cm = CMSG_FIRSTHDR(msg); + outbuf = PTRIN(l_msghdr.msg_control); + outlen = 0; + while (cm != NULL) { + lcm->cmsg_type = bsd_to_linux_cmsg_type(p, cm->cmsg_type); + lcm->cmsg_level = bsd_to_linux_sockopt_level(cm->cmsg_level); + if (lcm->cmsg_type == -1 || + cm->cmsg_level != SOL_SOCKET) { + linux_msg(curthread, + "unsupported recvmsg cmsg level %d type %d", + cm->cmsg_level, cm->cmsg_type); + error = EINVAL; + goto bad; + } - case SCM_CREDS2: - error = recvmsg_scm_creds2(&datalen, - &data, &udata); - break; + data = CMSG_DATA(cm); + datalen = (caddr_t)cm + cm->cmsg_len - (caddr_t)data; + udata = NULL; - case SCM_TIMESTAMP: + switch (cm->cmsg_type) { + case SCM_RIGHTS: + error = recvmsg_scm_rights(td, flags, + &datalen, &data, &udata); + break; + case SCM_CREDS: + error = recvmsg_scm_creds(&datalen, + &data, &udata); + break; + case SCM_CREDS2: + error = recvmsg_scm_creds2(&datalen, + &data, &udata); + break; + case SCM_TIMESTAMP: #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) - error = recvmsg_scm_timestamp(linux_cmsg->cmsg_type, - &datalen, &data, &udata); + error = recvmsg_scm_timestamp(lcm->cmsg_type, + &datalen, &data, &udata); #endif - break; - - case SCM_BINTIME: - error = recvmsg_scm_timestampns(linux_cmsg->cmsg_type, - &datalen, &data, &udata); - break; - } - if (error != 0) - goto bad; + break; + case SCM_BINTIME: + error = recvmsg_scm_timestampns(lcm->cmsg_type, + &datalen, &data, &udata); + break; + } + if (error != 0) + goto bad; - if (outlen + LINUX_CMSG_LEN(datalen) > maxlen) { - if (outlen == 0) { - error = EMSGSIZE; - goto err; - } else { - linux_msghdr.msg_flags |= LINUX_MSG_CTRUNC; - m_dispose_extcontrolm(control); - free(udata, M_LINUX); - goto out; - } + if (outlen + LINUX_CMSG_LEN(datalen) > maxlen) { + if (outlen == 0) { + error = EMSGSIZE; + goto err; + } else { + l_msghdr.msg_flags |= LINUX_MSG_CTRUNC; + m_dispose_extcontrolm(control); + free(udata, M_LINUX); + goto out; } + } - linux_cmsg->cmsg_len = LINUX_CMSG_LEN(datalen); - - error = copyout(linux_cmsg, outbuf, L_CMSG_HDRSZ); + lcm->cmsg_len = LINUX_CMSG_LEN(datalen); + error = copyout(lcm, outbuf, L_CMSG_HDRSZ); + if (error == 0) { + outbuf += L_CMSG_HDRSZ; + error = copyout(data, outbuf, datalen); if (error == 0) { - outbuf += L_CMSG_HDRSZ; - error = copyout(data, outbuf, datalen); - if (error == 0) { - outbuf += LINUX_CMSG_ALIGN(datalen); - outlen += LINUX_CMSG_LEN(datalen); - cm = CMSG_NXTHDR(msg, cm); - } + outbuf += LINUX_CMSG_ALIGN(datalen); + outlen += LINUX_CMSG_LEN(datalen); + cm = CMSG_NXTHDR(msg, cm); } -err: - free(udata, M_LINUX); - if (error != 0) - goto bad; } - linux_msghdr.msg_controllen = outlen; +err: + free(udata, M_LINUX); + if (error != 0) + goto bad; } + l_msghdr.msg_controllen = outlen; out: - error = copyout(&linux_msghdr, msghdr, sizeof(linux_msghdr)); + error = copyout(&l_msghdr, msghdr, sizeof(l_msghdr)); bad: if (control != NULL) { @@ -1859,7 +1851,7 @@ bad: m_freem(control); } free(iov, M_IOV); - free(linux_cmsg, M_LINUX); + free(lcm, M_LINUX); free(sa, M_SONAME); return (error);