From nobody Mon Jun 8 15:38:06 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 C4A553C09FC; Thu, 28 May 2026 11:01:00 +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=1779966063; cv=none; b=dPniUWacXCLOpQRA74jWULWrNk7X8Xg8JiMDsscn2mK95onbhrLYcPFs3jvQMCRjwjWmGKtJURkS8Lg5eK43XjYZnara27hzCu0eKXboIzykzBoNS15rWtDnzLrB1FliIa4Am6WBgbURKohNHqCKk82FYLxt7YNb4Htnkg5hzPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779966063; c=relaxed/simple; bh=+ywZsCC6JKsvk+Ntlbd7Erqig69aid5ibtlS4HGF3iM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Puh1aA90hNBb5PcLE4nYZrSzM/fbaP6idyot8dll/XdKLSSB80McsV2+hWjGGViqxLNeS0+2FJP2DhHxihWM3uXxXpdMV1ev2ssnmGLV3MTqRabImfhjwjxgpVDkVvHb9z3po9YYoiBLnhA6j4pTffwlsqzQqqa7T2RvX7bEIOw= 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=AivIB8Sz; 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="AivIB8Sz" X-UUID: 7c38d6ca5a8411f18dc8c9802ae25ab1-20260528 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=AivIB8Sz0/bahbC1kVzwsBpV//S1e+rvF9a1Dnjt7Psxnr9P+5JvYhd2cpnnkYh7Xpel+EaVdydqpMMoRKr7gyjjpG3BW8rHeXGbvuNh/8kuFSl6SmTR+OozUg+I3dmQ3zXfR3ht0Ugk3lRcEcx00N8dZCjbpP1ZnGf6NBYuwbw=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.15,REQID:b6a45ed2-7358-4a74-bd80-6ed6f8f607d8,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:de3f87c9-9273-4096-a0ce-fc7a6a4f85f7,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: 7c38d6ca5a8411f18dc8c9802ae25ab1-20260528 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1098549085; Thu, 28 May 2026 19:00:49 +0800 Received: from mtkmbs11n2.mediatek.inc (172.21.101.187) by MTKMBS09N2.mediatek.inc (172.21.101.94) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 28 May 2026 19:00:48 +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; Thu, 28 May 2026 19:00:47 +0800 From: To: , , , , , CC: , , , , , , Subject: [PATCH net v2 1/2] af_unix: Fix inq_len update problem in partial read Date: Thu, 28 May 2026 19:00:32 +0800 Message-ID: <20260528110033.3327744-2-jianyu.li@mediatek.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260528110033.3327744-1-jianyu.li@mediatek.com> References: <20260528110033.3327744-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 15:38:06 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 6E8A53DE44C; Thu, 28 May 2026 11:01:02 +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=1779966064; cv=none; b=VJ4AmKb5cUAHlXQ4+oystqQvij8ZtIJfUb25s8pA0maTw9MPRQoWqHtJHukGmaxqrN+SbzzAmdwTNONjkPh3T9NO4OaQOF1/Yuu6NmwsmVunybIbbER5G74qddBi3OwKy02MH+3m/IFfJ0FRNFazdtftDMqmDG2YjlRPXx21tGE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779966064; c=relaxed/simple; bh=jfMP2/YIGECVt7WXBen0qE4CPpSwZJTOgsbfgGPP0xQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=e2HSePuADOOHmzB60H0oBUBA99z+SwGhmh3PiN+SOEeCBedgyQewKnzc+LBYkMnv1kQ5IZLv91hH/SQMQRbiT3NQ9vODNqDL1wYmAyqb5toWUKY1/kSIVFMSFv3i/RuvbHt9IHg6lGaQgmq/NrlOfstHX/gkBRrkBYOtoR/Qee8= 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=YdfeNuFt; 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="YdfeNuFt" X-UUID: 7e4a18e85a8411f18dc8c9802ae25ab1-20260528 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=nePuq0ucAYgrMYEUliCg9yqtq9YBSdhi22BiKGIV9CY=; b=YdfeNuFtlroyNBydsd3i0GNqOIvr8XFXA5nHTSvHWPe++UAS9GzWWeXD8D68kOjbC3jVOFzipZRqmQfGK96uc8N0gA5Z41FCBBcjw7YVRuSQkFdBHW48LWmSiFxIr9HDWFnCR6udQMWDgUzv97YZ0PTSaLncJzA3939F6zshNTU=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.15,REQID:e36309e9-355d-4426-9efc-8c410aff0c71,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:9f1c3b01-8ecf-400f-ba4f-4c5e0901de3b,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: 7e4a18e85a8411f18dc8c9802ae25ab1-20260528 Received: from mtkmbs14n1.mediatek.inc [(172.21.101.75)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 997163714; Thu, 28 May 2026 19:00:52 +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; Thu, 28 May 2026 19:00:51 +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; Thu, 28 May 2026 19:00:51 +0800 From: To: , , , , , CC: , , , , , , Subject: [PATCH net v2 2/2] af_unix: Add test for SCM_INQ on partial read Date: Thu, 28 May 2026 19:00:33 +0800 Message-ID: <20260528110033.3327744-3-jianyu.li@mediatek.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260528110033.3327744-1-jianyu.li@mediatek.com> References: <20260528110033.3327744-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 --- 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..49cfa6ef07 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