From nobody Thu Apr 9 17:57:48 2026 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 4E337346A08 for ; Fri, 6 Mar 2026 09:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772789826; cv=none; b=Ud4nhsFVTccB4BtJLlqxiinsrX4i5NbhgqIyKVAP+8op/b+kEdodD5+qEgZAOdXWQ+qAxpNRziP/pmbLkgh+GBNGn0z8svr966kTkkDm7qtzunH52lAtcrWP4rB5BVptUJkmEDCI3X5gmCN7iulOk8OYbb/IJJuHCia0bJqDwb8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772789826; c=relaxed/simple; bh=oI5ujbYMbFooXz90mdQQs9sXMQo+W0ZVUqf5SsCXQJc=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=C1sEH/PrFvIGNZJURQTlSxeYWg3wRAZzYxoIXKS/AHbepG3WScGoXfFO+OBfmAvpTnYJyXZT6PAfRGtBfVB9ejkHaYBXg+emv7d8BfRUo76fc8b6b1M3ZMZ+y4RYUtZ/Lmh4/XSDX2NT2Kyn86oKBAkkukp7djQN/s5sC4QoG5U= 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=eTWv0hZk; arc=none smtp.client-ip=209.85.208.42 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="eTWv0hZk" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-65f94011dfaso2709496a12.0 for ; Fri, 06 Mar 2026 01:37:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772789821; x=1773394621; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=zqVb5538Vi/uzDMhI/FkC3xZPwoiIXF6a6BljR75nUA=; b=eTWv0hZke7Pegzj7pL/D0CTCKi0sCFKxieEsJsu3w0LzbE0g+lhOgd7IgtjB97ymZ+ Ri2IvE6vHwu1fPV9YHNdfUvM0fnr7pz16juvanrZyNJ7U+2MtcDQ96iS/30CsJ6b3sJt l7cEFelfG6+Srk3v4D7MmFejKPjeexf8AN4Lju22C3kCwZtHqbhpZtY+h4rFOwa5+qgS PoX0C846vNMq4qTEqqlGYwGK5dbej29NmLIpZ8wP93v5UjA+IHdbkT3l2M3qqd2433j8 MsNCE/Ml8GlxSlAV0t7n2WlYnCeT3dQr7yEJ+PZq8H7AVvqJRWbtxAh5EMxMdr63SiX0 Hz+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772789821; x=1773394621; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zqVb5538Vi/uzDMhI/FkC3xZPwoiIXF6a6BljR75nUA=; b=K4OBVDj7YrYX8SM6CFwr8LZftKIu1bETVGJBhtkHMAv/ZtxBwvngFGLKpvQKVhoXCp 0IH+rVjTK6rHt2Fg7Lcgz+n1xzSZJqsmCV1MxwbxC1rkq7YbxIahULkWbs6UGGnokmNh Mcuv01/FySFV+8ZipNic5Zo5W59UlIoSQIpN7BEx+enzvBmosMo969Ijwkt5zlKxViUo pzGA7c9HsTMIx55xh4JeuhDoxoRQjuqbcUxblSNThFS7iKOv1vcTZYMrZOfJmHeRhW2g jV1hNU1V+ClzBBtBcyNCjI9Yg0dqha00sAtYoMnOSiKFzyE4oN56MTw7pLJL2SaaaKHd ngWQ== X-Forwarded-Encrypted: i=1; AJvYcCXJ+qBC9kzAPl79BKR59us4bBjBzOL1Dy8eXr8TAlmsjIw9OqUPuEGRCmZ0t0DncyQnp+9w8+bG3PMzbeE=@vger.kernel.org X-Gm-Message-State: AOJu0YyXQ6Gb4d14M6jdYPxDWyABZKzypQW+vId6Q2CzgNMJ+mqQsFI/ vrqHiidLzQVsnLEuHJ+ga2ML3epezaazU5SdyxqVMiZBl5mZkWK6Lxo4 X-Gm-Gg: ATEYQzxlz//ibN71TRmroQfuYi3EbPUvuXMfGOLGgLgd5b4RnQxBzxntB3Qq7YGTqAB Alpto2Gch+iV5ChGSR0xS88nPD36MWWpfDxGV/MJqTqPe4VVVrhMS0/Vc67ZguNiFxuFOo93LIm RbR8xbuEy8j3IhfuIYLsnhtZVm2015gzKfzVHAW4EuJnxAWnJxwtjz3cz7AnYwETmmCL0Z2zcET FvBZ3EjVwZ1VvYgeuLrll3g2PtT4g+5mY4tEs73vsbfW6o6xnlUsYvw3EmJxACyNnalFeirfaCJ eZzaSWyJk87k/Pia5ef2dKX/gA4hhWQiRX9rhKJ6tSC8HpXkrRHVzefJZSUbawIlLGjL/AArT6h yI2M+K3QrwGcSuYupuJTm0jaZUxGCbDVAAgRUx5RK7rJlZOZb4dAKc4JdY1NCTBRJ5T1kJw5KqE G8WGs= X-Received: by 2002:a05:6402:278d:b0:661:85be:6085 with SMTP id 4fb4d7f45d1cf-6619d4565d5mr757171a12.5.1772789820917; Fri, 06 Mar 2026 01:37:00 -0800 (PST) Received: from gmail.com ([2a09:bac5:4e22:2705::3e3:31]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-661a3e62bb1sm307369a12.9.2026.03.06.01.36.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 01:36:59 -0800 (PST) From: Qingfang Deng To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mitchell Blank Jr , Simon Horman , linux-ppp@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next] ppp: simplify input error handling Date: Fri, 6 Mar 2026 17:36:49 +0800 Message-ID: <20260306093649.1048232-1-dqfext@gmail.com> X-Mailer: git-send-email 2.43.0 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" Currently, ppp_input_error() indicates an error by allocating a 0-length skb and calling ppp_do_recv(). It takes an error code argument, which is stored in skb->cb, but not used by ppp_receive_frame(). Simplify the error handling by removing the unused parameter and the unnecessary skb allocation. Instead, call ppp_receive_error() directly from ppp_input_error() under the recv lock, and the length check in ppp_receive_frame() can be removed. Signed-off-by: Qingfang Deng --- drivers/net/ppp/ppp_async.c | 2 +- drivers/net/ppp/ppp_generic.c | 31 ++++++++++--------------------- drivers/net/ppp/ppp_synctty.c | 2 +- include/linux/ppp_channel.h | 2 +- net/atm/pppoatm.c | 2 +- 5 files changed, 14 insertions(+), 25 deletions(-) diff --git a/drivers/net/ppp/ppp_async.c b/drivers/net/ppp/ppp_async.c index b4cf2d09c6bd..93a7b0f6c4e7 100644 --- a/drivers/net/ppp/ppp_async.c +++ b/drivers/net/ppp/ppp_async.c @@ -491,7 +491,7 @@ static void ppp_async_process(struct tasklet_struct *t) /* process received packets */ while ((skb =3D skb_dequeue(&ap->rqueue)) !=3D NULL) { if (skb->cb[0]) - ppp_input_error(&ap->chan, 0); + ppp_input_error(&ap->chan); ppp_input(&ap->chan, skb); } =20 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index 2081da6c2144..6344c5eb0f98 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -2383,12 +2383,10 @@ ppp_input(struct ppp_channel *chan, struct sk_buff = *skb) rcu_read_unlock_bh(); } =20 -/* Put a 0-length skb in the receive queue as an error indication */ void -ppp_input_error(struct ppp_channel *chan, int code) +ppp_input_error(struct ppp_channel *chan) { struct channel *pch =3D chan->ppp; - struct sk_buff *skb; struct ppp *ppp; =20 if (!pch) @@ -2397,12 +2395,9 @@ ppp_input_error(struct ppp_channel *chan, int code) rcu_read_lock_bh(); ppp =3D rcu_dereference_bh(pch->ppp); if (ppp) { - skb =3D alloc_skb(0, GFP_ATOMIC); - if (skb) { - skb->len =3D 0; /* probably unnecessary */ - skb->cb[0] =3D code; - ppp_do_recv(ppp, skb, pch); - } + ppp_recv_lock(ppp); + ppp_receive_error(ppp); + ppp_recv_unlock(ppp); } rcu_read_unlock_bh(); } @@ -2414,20 +2409,14 @@ ppp_input_error(struct ppp_channel *chan, int code) static void ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pc= h) { - /* note: a 0-length skb is used as an error indication */ - if (skb->len > 0) { - skb_checksum_complete_unset(skb); + skb_checksum_complete_unset(skb); #ifdef CONFIG_PPP_MULTILINK - /* XXX do channel-level decompression here */ - if (PPP_PROTO(skb) =3D=3D PPP_MP) - ppp_receive_mp_frame(ppp, skb, pch); - else + /* XXX do channel-level decompression here */ + if (PPP_PROTO(skb) =3D=3D PPP_MP) + ppp_receive_mp_frame(ppp, skb, pch); + else #endif /* CONFIG_PPP_MULTILINK */ - ppp_receive_nonmp_frame(ppp, skb); - } else { - kfree_skb(skb); - ppp_receive_error(ppp); - } + ppp_receive_nonmp_frame(ppp, skb); } =20 static void diff --git a/drivers/net/ppp/ppp_synctty.c b/drivers/net/ppp/ppp_synctty.c index c2063961f395..b7f243b416f8 100644 --- a/drivers/net/ppp/ppp_synctty.c +++ b/drivers/net/ppp/ppp_synctty.c @@ -483,7 +483,7 @@ static void ppp_sync_process(struct tasklet_struct *t) while ((skb =3D skb_dequeue(&ap->rqueue)) !=3D NULL) { if (skb->len =3D=3D 0) { /* zero length buffers indicate error */ - ppp_input_error(&ap->chan, 0); + ppp_input_error(&ap->chan); kfree_skb(skb); } else diff --git a/include/linux/ppp_channel.h b/include/linux/ppp_channel.h index f73fbea0dbc2..ca8ad03eeef0 100644 --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h @@ -55,7 +55,7 @@ extern void ppp_input(struct ppp_channel *, struct sk_buf= f *); =20 /* Called by the channel when an input error occurs, indicating that we may have missed a packet. */ -extern void ppp_input_error(struct ppp_channel *, int code); +extern void ppp_input_error(struct ppp_channel *); =20 /* Attach a channel to a given PPP unit in specified net. */ extern int ppp_register_net_channel(struct net *, struct ppp_channel *); diff --git a/net/atm/pppoatm.c b/net/atm/pppoatm.c index 2574aae3e066..e3c422dc533a 100644 --- a/net/atm/pppoatm.c +++ b/net/atm/pppoatm.c @@ -228,7 +228,7 @@ static void pppoatm_push(struct atm_vcc *atmvcc, struct= sk_buff *skb) =20 error: kfree_skb(skb); - ppp_input_error(&pvcc->chan, 0); + ppp_input_error(&pvcc->chan); } =20 static int pppoatm_may_send(struct pppoatm_vcc *pvcc, int size) --=20 2.43.0