From nobody Tue Apr 7 02:59:02 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88A6F85C4A for ; Mon, 16 Mar 2026 13:28:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773667720; cv=none; b=DQZGJ+18io8c7TIlt/QucfVstsUF/Gg9X6OBcrLIX9Lsu8AQed+T3PqMDhLyNxDc3Qxp8jZ9Wa9Mbc/RSLE6bhD2tg2DalpOqggGsYPwtSlwvegb8WTtGOO9PCzI3i9mlyrTyWFBOV4oqBkFSg8xsTObyw5mFy3rSkw4FEVIzUw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773667720; c=relaxed/simple; bh=G/SLPghRo53Tg169Ly5NOqHYFY6F8ur9IKZ+lOWYtvI=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=C3Cst3qJ96dg4BsDIk/oXVQO4Lhv8QSE4XWQT0ya5oXbT54ZH3nrRQyWiBFY9hNOeLQCcQgRXfsh+YWX9YgMORKKDcN5sviR4FPe6KxIDgJJ4Lq5Nndnsvs5wDeBOhud6jch5rK7TaiL3gRO3EkadUo9RCR8RHppJyM3Fi6bg+I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kWLi0Vdc; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kWLi0Vdc" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-3597822d6d8so269948a91.3 for ; Mon, 16 Mar 2026 06:28:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773667719; x=1774272519; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=O3dKt2UPO2MLKISaClvkDDM2F7IRa7ud5ELpWtAwlBw=; b=kWLi0Vdco7uvhlBVq00NSue43GZ4ZhUJt9lOTUkkopiBdEGLl26IUAkMvySRwPq88U UHdVVEV0NrlvjK0QV2lTMzHP0YvzjW13a+Jg8kSGFsURzpzNGc955ykP5zT6k73nyPl0 jBJPrcgGfekARM+87Yas35V1TgUA+HGZ+iaBXv8FDlHuKFD+ZlFx9vxpt5N0Gg//Fd/+ i1+HXAP/8X+nengcSAMruu0YhQKMAUuuBonTwzCoPt/+oc6ltpXrYNn9T1cc9eu/3PrD 37SkxfVZC+AaXUHcLbdA77r0sDKs5QRzozlaXscQRFcHwGkYh7gZax4F5+RQuZZfjN0s ydtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773667719; x=1774272519; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=O3dKt2UPO2MLKISaClvkDDM2F7IRa7ud5ELpWtAwlBw=; b=qPThKNwqrXc7bPitTWzBdgmlg1gbagRBIoq8oPoj4JU3257xon7aGvA+1o8zbZ1dpp d/ZCp1fFHfJ491L7Vamuopvyeun0V47hJy9K2G8OyHH7g+thcKH8lEqqN6yMdVxhXCSo 1p+2bHTB8EC4RGS+Qbw9rcc3oKw2LX7YfUkNM/RW/ItqFPPDSI5G2iFmgQVwgLtE9N3Y qTeQCetrhGx4Kc6zYMQt5TYk77cOAgoqbN1OBG8/oTu9jz/rD2aQ0XzJ2LQ7MUcxE0wT JvIj4XQzCFRk/kRQwzLDDJaXXH77DHB9v3Y6a9hJjzLwyDJ8Efa7L1I0QHwfPAtuDl1P JrYQ== X-Gm-Message-State: AOJu0YwIpfTI7mKWa5Sk12l8JvXsnKaUc4A9QReKQmx1xnvdbkF6ZRqr wvDKEfzR2r75eIXYuVr5Y4YHLaSrPPOF7OwCViX14LBUCgKYyGdz1Oqv X-Gm-Gg: ATEYQzxCrj7RU3t/MkGr8fPO9FoR9taHDscgAi/wrtG0lI1cwLNUlBbf0vRAt5JFlbd UcrM8xfT5xc2lKnwaTDScayXhDFxQq7yMgmxBo1L7P2AjgaNcfin9lp20eioN5AxZv4QTS8KSS6 +1wr8vlQrgCoIPvRH5PuMkcUKsUUg6rZhYoz+yGUEPrkgdysZhXHVzOWxz8Nj1yzAL2ShyuOa6l 5WfDNL6ArntMpdXLwrzHikm1+OEEa7sah/fxuyZSoFfsU8ZyP+/5QMVZqH+3q0ZxwBH9BeIR+AI DTyj7xzF/GQp0VVuPPd44We1oDbACT1ADTEsuAQSXK3LYhP4JmmngAKUXgv6+gmYcYvHLjwP96R /FG7C6UYp0bdCu79la++XDJ1MG+7Vtkn/SadWU6Wzo4EOAcK/5r3qAgPxSD2a0eOS5LrPcyB7Nm pcJ0793vZqwtryqDaupb0HWxA68VuzIpIg2R6h/uccJ95ZblHL X-Received: by 2002:a17:90b:1845:b0:359:f825:570f with SMTP id 98e67ed59e1d1-35a220b4660mr8952217a91.5.1773667718762; Mon, 16 Mar 2026 06:28:38 -0700 (PDT) Received: from localhost.localdomain ([36.112.120.43]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35b8e1cb60esm3434666a91.2.2026.03.16.06.28.34 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 16 Mar 2026 06:28:38 -0700 (PDT) From: Ziyu Zhang To: Greg Kroah-Hartman , Jiri Slaby Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, baijiaju1990@gmail.com, r33s3n6@gmail.com, gality369@gmail.com, zhenghaoran154@gmail.com, hanguidong02@gmail.com, zzzccc427@gmail.com, Ziyu Zhang Subject: [PATCH] tty: n_tty: annotate lockless read of ldata->icanon in input_available_p() Date: Mon, 16 Mar 2026 21:28:27 +0800 Message-Id: <20260316132827.17855-1-ziyuzhang201@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) 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 Content-Type: text/plain; charset="utf-8" n_tty_poll() calls input_available_p() without holding termios_rwsem to check input readiness for select()/poll(). input_available_p() reads ldata->icanon, which can be concurrently written by n_tty_set_termios() under down_write(termios_rwsem). This is a benign race: poll/select readiness is best-effort, and the actual n_tty_read() path re-checks icanon under down_read(termios_rwsem). A stale icanon value in poll only causes a transiently incorrect readiness result, which is permitted by POSIX poll/select semantics. Since icanon is a bitfield, READ_ONCE()/WRITE_ONCE() cannot be used. Annotate the read with data_race() to document the intentional lockless access and suppress data race detector warnings. Signed-off-by: Ziyu Zhang --- drivers/tty/n_tty.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c index e6a0f5b40..aa3c11623 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c @@ -1909,7 +1909,8 @@ static inline int input_available_p(const struct tty_= struct *tty, int poll) const struct n_tty_data *ldata =3D tty->disc_data; int amt =3D poll && !TIME_CHAR(tty) && MIN_CHAR(tty) ? MIN_CHAR(tty) : 1; =20 - if (ldata->icanon && !L_EXTPROC(tty)) + /* data_race: benign race, poll readiness is best-effort */ + if (data_race(ldata->icanon) && !L_EXTPROC(tty)) return ldata->canon_head !=3D ldata->read_tail; else return ldata->commit_head - ldata->read_tail >=3D amt; --=20 2.39.5 (Apple Git-154)