From nobody Mon Jun 8 06:36:51 2026 Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79C14367B67; Mon, 1 Jun 2026 11:37:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=60.244.123.138 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780313828; cv=none; b=HkvXfHeJ3XyjvS0WhE0nh28s3ftjwyNxh0SKpPvENsWSFDojTrZiuGoxXxnjMa9SYx2Jm2yyHpMgXVuoYBYVu2PUoJWYyz+En3U8xOrh57DzZfw1hgFci5/MIq6bKAguYHUCD/xeEfgTYZZfr6pIgSEAuv+R00rXyhiTJH2Ds3c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780313828; c=relaxed/simple; bh=+ywZsCC6JKsvk+Ntlbd7Erqig69aid5ibtlS4HGF3iM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WAgpD1GbCfChMYFvicpY81p2UbJpkFBlw1u3jZ3weQ5PayeD/TPniShi/8mskHk0fsruGalZPN9hPewaw3IQfEaT61cSEBDP+qG7wB/8ST6ZmFQv8scbBO9UAqAjDtNcGemsADgvGSOG8fI4sGCbVs8cVcCsz0EWXW3xJz8ZypU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=Iacons+N; arc=none smtp.client-ip=60.244.123.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="Iacons+N" X-UUID: 3033ab925dae11f1b1788b6acf885367-20260601 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=gXZ6VmHATIDJF/ddpM8O023vh0Uyqhny6zlESoVEa/Q=; b=Iacons+NOdz7PadjIgTmFnkt+2J6X/J4HC92c6YvqL2EeYvwnlWps8MyLmNoU7YvCfS8d8p67qrJjzOfJ5SXigXu0+r/M5gebz4alD/KdKokeBAgWZTqfRgLoCDoDmqYCVGjA0d+3iV+PnoaLNGvOqC4JQ4BXt0V1gANkL0ZJFc=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.15,REQID:5b49f315-ca00-4d69-9c2b-179a277bc2b1,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:e276073,CLOUDID:20048a30-3aec-4081-ae32-d2e919a47e1d,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:81|82|102|123|136|836|865|888|898,TC :-5,Content:0|15|50,EDM:-3,IP:nil,URL:0,File:130,RT:0,Bulk:nil,QS:nil,BEC: -1,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: 3033ab925dae11f1b1788b6acf885367-20260601 Received: from mtkmbs13n1.mediatek.inc [(172.21.101.193)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1443705701; Mon, 01 Jun 2026 19:36:53 +0800 Received: from mtkmbs11n2.mediatek.inc (172.21.101.187) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 1 Jun 2026 19:36:52 +0800 Received: from mtksitap99.mediatek.inc (10.233.130.16) by mtkmbs11n2.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Mon, 1 Jun 2026 19:36:52 +0800 From: To: , , , , , CC: , , , , , , Subject: [PATCH net v3 1/2] af_unix: Fix inq_len update problem in partial read Date: Mon, 1 Jun 2026 19:36:39 +0800 Message-ID: <20260601113640.231897-2-jianyu.li@mediatek.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260601113640.231897-1-jianyu.li@mediatek.com> References: <20260601113640.231897-1-jianyu.li@mediatek.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-MTK: N Content-Type: text/plain; charset="utf-8" From: Jianyu Li Currently inq_len is updated only when the whole skb is consumed. If only part of the data is read, following SIOCINQ query would get value greater than what actually left. This change update inq_len timely in unix_stream_read_generic(), and adjust unix_stream_read_skb() accordingly to prevent repetitive update. Fixes: f4e1fb04c123 ("af_unix: Use cached value for SOCK_STREAM in unix_inq= _len().") Signed-off-by: Jianyu Li Reviewed-by: Kuniyuki Iwashima --- v2: Improve lock usage in unix_stream_read_generic() --- net/unix/af_unix.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index dc71ed79be..0d9cd977c7 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -2886,7 +2886,7 @@ static int unix_stream_read_skb(struct sock *sk, skb_= read_actor_t recv_actor) return -EAGAIN; } =20 - WRITE_ONCE(u->inq_len, u->inq_len - skb->len); + WRITE_ONCE(u->inq_len, u->inq_len - unix_skb_len(skb)); =20 #if IS_ENABLED(CONFIG_AF_UNIX_OOB) if (skb =3D=3D u->oob_skb) { @@ -3063,11 +3063,12 @@ static int unix_stream_read_generic(struct unix_str= eam_read_state *state, unix_detach_fds(&scm, skb); } =20 - if (unix_skb_len(skb)) - break; - spin_lock(&sk->sk_receive_queue.lock); - WRITE_ONCE(u->inq_len, u->inq_len - skb->len); + WRITE_ONCE(u->inq_len, u->inq_len - chunk); + if (unix_skb_len(skb)) { + spin_unlock(&sk->sk_receive_queue.lock); + break; + } __skb_unlink(skb, &sk->sk_receive_queue); spin_unlock(&sk->sk_receive_queue.lock); =20 --=20 2.45.2 From nobody Mon Jun 8 06:36:51 2026 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBAEF369970; Mon, 1 Jun 2026 11:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=210.61.82.184 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780313820; cv=none; b=YInf74UNdFTZ8SMDuaM28erjVim6AJUbnLJdgtlho3z7bOa+PPTnE/00Cb93ky3Xb3CMltA5m5lKLDQL7uTsT4jzocoxpcErRufxCE6ZzxiT2cfZ9HRLMIFsaU49BJ+I7v6qfBzDeF5r7QLqy1b/GApjsY/nh84znpVsMvX5f0Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780313820; c=relaxed/simple; bh=j6a4d3zpFuVOFU00p07QqZ5aE+rM4UB+7K0gTRo3nEE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SDH4uWFl7QadnKNwLExP+vvgigby9ceagQ6BrR5ubipz/83HyqYSlQGmK+6JfKMesQo9DqsD4i4Lby9pId2b7DVGRVmWYN2VofgWmXkMzz+bJB6YUeTgz9Td9DMODgOG7SCNfr/GE2iVICHeQ5oWA9R62a+CubUDfD3dy0iDFwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=gVfesZXj; arc=none smtp.client-ip=210.61.82.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="gVfesZXj" X-UUID: 30e130fa5dae11f18dc8c9802ae25ab1-20260601 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=6xafbRXrQYJcQWI35leRcnL8SW7t3QtBe6w0y/exT90=; b=gVfesZXjsuuiecNsZdi3yt633qkDMQq/HsOZdc49LiOO4rWe/R6x0gEj+1zxqNnO4JQldUQnxGupD+nD9obJ61Rx+5lz1jc7+r+LbFH8GWfdrFSi1BeC3onZCBbwzcJsMbH/B+mn4h2l75ffxMXM4LwlN5TYGMS+aTN7gWNjQo4=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.15,REQID:d780153d-fe90-4e12-824a-3cf82027b7e9,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:e276073,CLOUDID:2e048a30-3aec-4081-ae32-d2e919a47e1d,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:81|82|102|123|836|865|888|898,TC:-5, Content:0|15|50,EDM:-3,IP:nil,URL:0,File:130,RT:0,Bulk:nil,QS:nil,BEC:-1,C OL:0,OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: 30e130fa5dae11f18dc8c9802ae25ab1-20260601 Received: from mtkmbs11n2.mediatek.inc [(172.21.101.187)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 194912427; Mon, 01 Jun 2026 19:36:55 +0800 Received: from mtkmbs11n2.mediatek.inc (172.21.101.187) by mtkmbs13n2.mediatek.inc (172.21.101.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 1 Jun 2026 19:36:53 +0800 Received: from mtksitap99.mediatek.inc (10.233.130.16) by mtkmbs11n2.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Mon, 1 Jun 2026 19:36:53 +0800 From: To: , , , , , CC: , , , , , , Subject: [PATCH net v3 2/2] af_unix: Add test for SCM_INQ on partial read Date: Mon, 1 Jun 2026 19:36:40 +0800 Message-ID: <20260601113640.231897-3-jianyu.li@mediatek.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260601113640.231897-1-jianyu.li@mediatek.com> References: <20260601113640.231897-1-jianyu.li@mediatek.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-MTK: N Content-Type: text/plain; charset="utf-8" From: Jianyu Li Add test to verify that when a skb is partially consumed, unix_inq_len() return correct remaining byte count. Before: # RUN scm_inq.stream.partial_read ... # scm_inq.c:165:partial_read:Expected remain (512) =3D=3D *(int *)CMSG_DA= TA(cmsg) (768) # partial_read: Test terminated by assertion # FAIL scm_inq.stream.partial_read not ok 2 scm_inq.stream.partial_read After: # RUN scm_inq.stream.partial_read ... # OK scm_inq.stream.partial_read ok 2 scm_inq.stream.partial_read Signed-off-by: Jianyu Li Reviewed-by: Kuniyuki Iwashima --- v3: Align macro definitions v2: Follow reverse xmas tree ordering in partial_read test case --- tools/testing/selftests/net/af_unix/scm_inq.c | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/af_unix/scm_inq.c b/tools/testing/= selftests/net/af_unix/scm_inq.c index 3a86be9bda..6268b5bf50 100644 --- a/tools/testing/selftests/net/af_unix/scm_inq.c +++ b/tools/testing/selftests/net/af_unix/scm_inq.c @@ -8,8 +8,9 @@ =20 #include "kselftest_harness.h" =20 -#define NR_CHUNKS 100 -#define MSG_LEN 256 +#define NR_CHUNKS 100 +#define MSG_LEN 256 +#define NR_PARTIAL_READS 3 =20 FIXTURE(scm_inq) { @@ -120,4 +121,53 @@ TEST_F(scm_inq, basic) recv_chunks(_metadata, self); } =20 +TEST_F(scm_inq, partial_read) +{ + char buf[MSG_LEN * NR_PARTIAL_READS] =3D {}; + char cmsg_buf[CMSG_SPACE(sizeof(int))]; + struct msghdr msg =3D {}; + struct iovec iov =3D {}; + struct cmsghdr *cmsg; + int err, inq, ret, i; + int remain; + + err =3D setsockopt(self->fd[1], SOL_SOCKET, SO_INQ, &(int){1}, sizeof(int= )); + if (variant->type !=3D SOCK_STREAM) { + ASSERT_EQ(-ENOPROTOOPT, -errno); + return; + } + ASSERT_EQ(0, err); + + ret =3D send(self->fd[0], buf, sizeof(buf), 0); + ASSERT_EQ(sizeof(buf), ret); + + msg.msg_iov =3D &iov; + msg.msg_iovlen =3D 1; + msg.msg_control =3D cmsg_buf; + msg.msg_controllen =3D sizeof(cmsg_buf); + + iov.iov_base =3D buf; + iov.iov_len =3D MSG_LEN; + + for (i =3D 0; i < NR_PARTIAL_READS; i++) { + remain =3D MSG_LEN * (NR_PARTIAL_READS - 1 - i); + + memset(buf, 0, MSG_LEN); + memset(cmsg_buf, 0, sizeof(cmsg_buf)); + ret =3D recvmsg(self->fd[1], &msg, 0); + ASSERT_EQ(MSG_LEN, ret); + + cmsg =3D CMSG_FIRSTHDR(&msg); + ASSERT_NE(NULL, cmsg); + ASSERT_EQ(CMSG_LEN(sizeof(int)), cmsg->cmsg_len); + ASSERT_EQ(SOL_SOCKET, cmsg->cmsg_level); + ASSERT_EQ(SCM_INQ, cmsg->cmsg_type); + ASSERT_EQ(remain, *(int *)CMSG_DATA(cmsg)); + + ret =3D ioctl(self->fd[1], SIOCINQ, &inq); + ASSERT_EQ(0, ret); + ASSERT_EQ(remain, inq); + } +} + TEST_HARNESS_MAIN --=20 2.45.2