From nobody Tue Sep 29 06:08:56 2026 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 B1CFB388879 for ; Tue, 11 Aug 2026 18:47:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786474059; cv=none; b=tmlYIGHnR/dyyxI3GBzq135ZFzjrEzk1XvTA7F+iMQgrTQ4l9/CZFtU3UokT8N1KtsCdJJbfxGF82LPSEwh8qRzpVqONTWFvMyI1yNBpt5LFZz6KBGEvfJnttK4ATmkDPY0Bikc08QevA6YjpvkN7Te9ViPSOhjlrwpJozldfi4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786474059; c=relaxed/simple; bh=2DiZ3irCZiIEKl32oG5caVRm/8aYN1MMU3tKso8r9ag=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TIApJKTuK4bQTU9+ZvdsDZUh780pTDgUerLpeeDAv+8yvFt+F0GMK4HDWUj4D4tsGlSzsXbKQh0CSoH+0mEHMvqXQvBhg9Te/Na/FmKfJdT7wgE87qrqwxNryZW2BUmEX288onWaho9M25HGkERYKOKMUs27bG4YaGwI2Dl8qGE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to; spf=none smtp.mailfrom=dama.to; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b=Pc8QmYRq; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=dama.to Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b="Pc8QmYRq" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-8485bd28dd0so222745b3a.2 for ; Tue, 11 Aug 2026 11:47:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dama-to.20251104.gappssmtp.com; s=20251104; t=1786474057; x=1787078857; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4ylYeUW6ISwS0E2bcw9LPY5hcAfyBnPwa8fuwoqs4yU=; b=Pc8QmYRqmk6sc84CMLh4fRQt8MGuhZNYsp1wwi1LfPpRNzdaVo8huCYx9uBjDoddfh cpsSqMQydmtEzI8qX2LxMbvNfMDQdcaLczk+aBi0F6/SUw3jdidTv/gxiO8/plJgMgMk JopAz1RgVxzHIw8IUyl4q/KDc0DVgGuEEY0PtMypk9FGmo5FttCA4u9V1z/3Y44ePo2h TAE266SpmCUL8AJ+7DAKOiaVBM4lTEBol9nRoeDu1Lx8D43CF0fkhq/IqE8b2NzPNJzY ZnEqrPhmSiyLHZ4mj+pXGlWUnO/4nmn7oCqRWDAbS7hKdIs+vS6VceWosisEBlBpNW03 uigg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786474057; x=1787078857; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=4ylYeUW6ISwS0E2bcw9LPY5hcAfyBnPwa8fuwoqs4yU=; b=mWD7VTbTpdDCTXgcWhvh7GPLvQofQUzJpqzOm3GdEDDbk05/GUGHHmxhzDabPCKszE vRCgefIEK1R011VM7tYHl8uSijdoL+VAxUNNzmNZG3s0cuaVq+ezOBgitMu292asLg3k i5IPMVl4GHQUyCpcZEeAVjlN8f19NyKQlddWDwHkTAXcPrQj8KBAvHDPWfB1+4lmQAjC 8Idt6aYvzeSKM3o9q5OAGMMMHh2v37ApQwhU83tQuk4abFyxAIVTHVYu7usf1Me9ZiHf t0as6JMB2vJ0zxFQHmzOsYA0oj31YLg8nGBarApcBC05TQHEoCfrIZevjY/dHJiz+Zv4 U2JA== X-Forwarded-Encrypted: i=1; AHgh+RogBEAVH9hT3NUcqaRtzxrlwtRgnHx57Zr8+k0D/EPan2xavEdJCISfCZOFye4gzuMVdwshW+DFYjPctdI=@vger.kernel.org X-Gm-Message-State: AOJu0Ywt88qF4E5dd5nge6wmZycdetCT01jI1Qn1N/Bs8kKTDaNqhSO4 xq0iqC5Ofk4j1EIVv+3rVfGQCQQqVWYkuAJ00sWpSouNhXzvHMbB4kyWZJVKMsIze3Q= X-Gm-Gg: AR+sD13GTk5NpfQGIgWEp9KdYBgWw9Ey+jwNCPT5fahiiNcbLItEeftEoEqw1SA/HzX H2+pyr1bKV3+uK34UqTG9UCtAQb31RavyU0fQFScAg9jRHXCo5UOzVrY7i0lDREhpncKx1tYZbn WngoxfKN/PQhSTMn2A2cQD9IdUARz+4rfV47AQMa4LVy79UM8AxcXFC7iwGMGTCaEqEih4qSuvf HxL2uLBv+ASKRkfhXiWC309iDx+ADGM+JGGhnNmj1iAFH/f+NDypsCkma/tqku7eqIU5IKgvXSf SDqFWVbtDN3uQynCbQizK3LvJaG9ZrE2b7DgP2igGL1f/0x2dTbYghC81k9xsd7hxaatSBRX7Ox 5uDf1v3ffl707Bv5izR5AXHJW6QLH8gHiQaAGKHXR2e8TY57If4yoyQTdG+28MJ6Ny7gElXlKcs BQ5gCPZMGbkKzcj77RlrVb8J5XIGCfafky0lVwwQ5bMA== X-Received: by 2002:a05:6a00:886:b0:845:e97d:447e with SMTP id d2e1a72fcca58-84faf9ffbf4mr2473205b3a.26.1786474056875; Tue, 11 Aug 2026 11:47:36 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:47::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1cf450bsm177227b3a.9.2026.08.11.11.47.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 11:47:36 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, Willem de Bruijn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: andrew+netdev@lunn.ch, willemb@google.com, Joe Damato , linux-kernel@vger.kernel.org Subject: [PATCH net-next 1/2] net/packet: Reduce VLAN tag code duplication Date: Tue, 11 Aug 2026 11:47:19 -0700 Message-ID: <20260811184722.2612345-2-joe@dama.to> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260811184722.2612345-1-joe@dama.to> References: <20260811184722.2612345-1-joe@dama.to> 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" Reduce code duplication for VLAN tag extraction by factoring the repeated code into a helper and using it. Signed-off-by: Joe Damato --- net/packet/af_packet.c | 95 +++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 435756877aba..ee60dcc639ad 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -568,6 +568,27 @@ static u16 vlan_get_tci(const struct sk_buff *skb, str= uct net_device *dev) return ntohs(vh->h_vlan_TCI); } =20 +static bool packet_get_vlan_tci_tpid(const struct sk_buff *skb, + struct net_device *dev, + u16 *tci, u16 *tpid) +{ + if (skb_vlan_tag_present(skb)) { + *tci =3D skb_vlan_tag_get(skb); + *tpid =3D ntohs(skb->vlan_proto); + return true; + } + + if (unlikely(dev && eth_type_vlan(skb->protocol))) { + *tci =3D vlan_get_tci(skb, dev); + *tpid =3D ntohs(skb->protocol); + return true; + } + + *tci =3D 0; + *tpid =3D 0; + return false; +} + static __be16 vlan_get_protocol_dgram(const struct sk_buff *skb) { __be16 proto =3D skb->protocol; @@ -997,20 +1018,19 @@ static void prb_fill_vlan_info(struct tpacket_kbdq_c= ore *pkc, struct tpacket3_hdr *ppd) { struct packet_sock *po =3D container_of(pkc, struct packet_sock, rx_ring.= prb_bdqc); + struct net_device *dev =3D NULL; + u16 tci, tpid; =20 - if (skb_vlan_tag_present(pkc->skb)) { - ppd->hv1.tp_vlan_tci =3D skb_vlan_tag_get(pkc->skb); - ppd->hv1.tp_vlan_tpid =3D ntohs(pkc->skb->vlan_proto); - ppd->tp_status =3D TP_STATUS_VLAN_VALID | TP_STATUS_VLAN_TPID_VALID; - } else if (unlikely(po->sk.sk_type =3D=3D SOCK_DGRAM && eth_type_vlan(pkc= ->skb->protocol))) { - ppd->hv1.tp_vlan_tci =3D vlan_get_tci(pkc->skb, pkc->skb->dev); - ppd->hv1.tp_vlan_tpid =3D ntohs(pkc->skb->protocol); + if (po->sk.sk_type =3D=3D SOCK_DGRAM) + dev =3D pkc->skb->dev; + + if (packet_get_vlan_tci_tpid(pkc->skb, dev, &tci, &tpid)) ppd->tp_status =3D TP_STATUS_VLAN_VALID | TP_STATUS_VLAN_TPID_VALID; - } else { - ppd->hv1.tp_vlan_tci =3D 0; - ppd->hv1.tp_vlan_tpid =3D 0; + else ppd->tp_status =3D TP_STATUS_AVAILABLE; - } + + ppd->hv1.tp_vlan_tci =3D tci; + ppd->hv1.tp_vlan_tpid =3D tpid; } =20 static void prb_run_all_ft_ops(struct tpacket_kbdq_core *pkc, @@ -2247,6 +2267,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct ne= t_device *dev, struct packet_type *pt, struct net_device *orig_dev) { enum skb_drop_reason drop_reason =3D SKB_CONSUMED; + struct net_device *vlan_dev =3D NULL; struct sock *sk =3D NULL; struct packet_sock *po; struct sockaddr_ll *sll; @@ -2262,6 +2283,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct ne= t_device *dev, __u32 ts_status; unsigned int slot_id =3D 0; int vnet_hdr_sz =3D 0; + u16 tci, tpid; =20 /* struct tpacket{2,3}_hdr is aligned to a multiple of TPACKET_ALIGNMENT. * We may add members to them until current aligned size without forcing @@ -2436,18 +2458,12 @@ static int tpacket_rcv(struct sk_buff *skb, struct = net_device *dev, h.h2->tp_net =3D netoff; h.h2->tp_sec =3D ts.tv_sec; h.h2->tp_nsec =3D ts.tv_nsec; - if (skb_vlan_tag_present(skb)) { - h.h2->tp_vlan_tci =3D skb_vlan_tag_get(skb); - h.h2->tp_vlan_tpid =3D ntohs(skb->vlan_proto); - status |=3D TP_STATUS_VLAN_VALID | TP_STATUS_VLAN_TPID_VALID; - } else if (unlikely(sk->sk_type =3D=3D SOCK_DGRAM && eth_type_vlan(skb->= protocol))) { - h.h2->tp_vlan_tci =3D vlan_get_tci(skb, skb->dev); - h.h2->tp_vlan_tpid =3D ntohs(skb->protocol); + if (sk->sk_type =3D=3D SOCK_DGRAM) + vlan_dev =3D skb->dev; + if (packet_get_vlan_tci_tpid(skb, vlan_dev, &tci, &tpid)) status |=3D TP_STATUS_VLAN_VALID | TP_STATUS_VLAN_TPID_VALID; - } else { - h.h2->tp_vlan_tci =3D 0; - h.h2->tp_vlan_tpid =3D 0; - } + h.h2->tp_vlan_tci =3D tci; + h.h2->tp_vlan_tpid =3D tpid; memset(h.h2->tp_padding, 0, sizeof(h.h2->tp_padding)); hdrlen =3D sizeof(*h.h2); break; @@ -3547,7 +3563,9 @@ static int packet_recvmsg(struct socket *sock, struct= msghdr *msg, size_t len, } =20 if (packet_sock_flag(pkt_sk(sk), PACKET_SOCK_AUXDATA)) { + struct net_device *vlan_dev =3D NULL; struct tpacket_auxdata aux; + u16 tci, tpid; =20 aux.tp_status =3D TP_STATUS_USER; if (skb->ip_summed =3D=3D CHECKSUM_PARTIAL) @@ -3562,29 +3580,22 @@ static int packet_recvmsg(struct socket *sock, stru= ct msghdr *msg, size_t len, aux.tp_snaplen =3D skb->len; aux.tp_mac =3D 0; aux.tp_net =3D skb_network_offset(skb); - if (skb_vlan_tag_present(skb)) { - aux.tp_vlan_tci =3D skb_vlan_tag_get(skb); - aux.tp_vlan_tpid =3D ntohs(skb->vlan_proto); - aux.tp_status |=3D TP_STATUS_VLAN_VALID | TP_STATUS_VLAN_TPID_VALID; - } else if (unlikely(sock->type =3D=3D SOCK_DGRAM && eth_type_vlan(skb->p= rotocol))) { + rcu_read_lock(); + if (unlikely(sock->type =3D=3D SOCK_DGRAM && + !skb_vlan_tag_present(skb) && + eth_type_vlan(skb->protocol))) { struct sockaddr_ll *sll =3D &PACKET_SKB_CB(skb)->sa.ll; - struct net_device *dev; =20 - rcu_read_lock(); - dev =3D dev_get_by_index_rcu(sock_net(sk), sll->sll_ifindex); - if (dev) { - aux.tp_vlan_tci =3D vlan_get_tci(skb, dev); - aux.tp_vlan_tpid =3D ntohs(skb->protocol); - aux.tp_status |=3D TP_STATUS_VLAN_VALID | TP_STATUS_VLAN_TPID_VALID; - } else { - aux.tp_vlan_tci =3D 0; - aux.tp_vlan_tpid =3D 0; - } - rcu_read_unlock(); - } else { - aux.tp_vlan_tci =3D 0; - aux.tp_vlan_tpid =3D 0; + vlan_dev =3D dev_get_by_index_rcu(sock_net(sk), + sll->sll_ifindex); } + if (packet_get_vlan_tci_tpid(skb, vlan_dev, &tci, &tpid)) + aux.tp_status |=3D TP_STATUS_VLAN_VALID | + TP_STATUS_VLAN_TPID_VALID; + rcu_read_unlock(); + + aux.tp_vlan_tci =3D tci; + aux.tp_vlan_tpid =3D tpid; put_cmsg(msg, SOL_PACKET, PACKET_AUXDATA, sizeof(aux), &aux); } =20 --=20 2.53.0-Meta From nobody Tue Sep 29 06:08:56 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 07B2D3A1A55 for ; Tue, 11 Aug 2026 18:47:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786474061; cv=none; b=Y+lAtREDVrRBafci8pvcb9vcT8/ITROiN/3BfcZWZSVE0S8YFsz+5nTjQyXN0u+56pmgKEjpr8cgjfgVJNAxtxAP0uGetmDfTBsP4c+4EPyKPRzfsEfSj0o8XcS1n24g9Fj8jCVOFxhpvIifLpFuUSVEG8K633vim9mZ4CqZsic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786474061; c=relaxed/simple; bh=/JvXuBex0ZIBNcLxHoUAVVIfmaYEO6HfA9TY6iBxRaI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gHUcB4H9p91Y5V58b2N39eEAUjbSKjAODQN9u9itn9e9hu4D3dS3Ok5NC+DoMAi3uyeln1XMDw01/nQaRPaTQprTzg8HXpb4woJ7HGfyYrZeGzdlEIMDplIxMpmzZ3Wh2wsMFpd5xIIblz7Xh+Y2DYNEtmzZir5vA1IN1KOCuI0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to; spf=none smtp.mailfrom=dama.to; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b=CVO9Cr6w; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=dama.to Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b="CVO9Cr6w" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2cc7e86e7aeso3427155ad.2 for ; Tue, 11 Aug 2026 11:47:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dama-to.20251104.gappssmtp.com; s=20251104; t=1786474059; x=1787078859; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4hLA5ZodlddzhKEWtmu3jxQzarE3WFFxZF4tW+C08MQ=; b=CVO9Cr6wgg70tB10+vp8zikAfuQZ6+Jtrtty/lKJBr7yFrCtfyYYGhs8AckKzrlWao aY9pvfDWyh28vNfVw0uWdV6VCLX+0iEbk39OJZGtzL9gfuswf73KhIDrPR21i3t1afNm pIuuQKiw3+FALwkCchKOHWb08oGMp0eQnRI9WGGcEGHpVzaYwLG4d3bmo59r7VoAr9ih IxBszSVYqIM4slXhYNNYpjx6qs5uLLLjtyeZ9DXuqCGeVs6XL6TId0w57nWKGNbrO1Be zmOglRNkmlaKC9+XiPg9v7Nldp+BmUDXC3BORrWEcM8pC3pU8gVsiudHzV0CziVdaPwW 7zVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786474059; x=1787078859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=4hLA5ZodlddzhKEWtmu3jxQzarE3WFFxZF4tW+C08MQ=; b=iOYJO6PBKI6FnwKN6k/wyvYQ0dOMhLwgbEM8U5JtHvt2y/s4t7sUePKTnaCzusYmQQ c0BxYlDw+qdOjhTbSEXQeSjzPq8ZYNa9jiDYHRqYPqSfxklktAieEL+QUjgbakZ8w66K t3VnQvGLI2qA2QUhlntAKB5rMNcpflhTCW5ZE0XigcV6IO8PYOUyTBFMMtoltlR147MW LLvhAn3SoruqFVK3wTsPlTNaoR8QRn/r/vNC4W0tt+5DReiH1bLwYxYISqcuJu5AMPmj N+fXzdyyzbYKg6REtS/cNhplUDWBb7+1ZAjLau6R1eATwOUcUm/lAS/KWkJuxtlnG7Iu KYPg== X-Forwarded-Encrypted: i=1; AHgh+RrTCO/vWm8a4Fdgg7Z7yRXjA6J4WOZwrzX5a8n2+dBR1j9ZhN+2VrmlP1Utrm1v90l1+Yrwk0RosBX+llY=@vger.kernel.org X-Gm-Message-State: AOJu0YxrFJmj3ShiDldFpf+ef5ENhtFAR7hAQZdkchBv18yN01iT886t pha0+09qHhJOZZPV8i23C80SGmp8+1BqXVUeEP3buT5XylT0K75ZqFkjfMdB5ieARcc= X-Gm-Gg: AR+sD10BG56qPyw3l1DFUsaaF5WAKfiGeFDLSZRm19O8KRUt3O3TSwBoWhpePtPxkls vSQSqT+U0K0KXGocsEtdlkfkub2e9YRGNS94/uC6ERLwt2I0IBfXEOMieDRfYDVZM8gRqKNEssR P8tTTwjuhfbOHUhLXLmFddxpcmI0/z1LvF1o3B/saA8u1PO5Cpf4H+BNXkv9z92nZ4mWFwqNH5G r/uE9A78yyoKimo3DwE+oesWQHAgw5OKYncNIbNE3cITZTHpR+90a5XLCiEjSWgLoNpV8PttvJg lYCMrVDSIm1Dv1mdheK/+o87b3f9Yq7D6kXgGkj45VuRT1j6Mwlg7O/AF6F3nu1ENnkwA11XK06 f6FR7z6ZfvxfN3dmGnPRW/41o7kLB1/n9TdfDXjhYUvlOnORa7ZFTrhB3vz5VJBP6QNrNGXcgg4 vHoVfr5zetncLQkpEOg/yY3C3sAr2N0IanEP7droxBXw== X-Received: by 2002:a17:90a:fc45:b0:38e:524:8797 with SMTP id 98e67ed59e1d1-392ec609a17mr5419566a91.13.1786474059381; Tue, 11 Aug 2026 11:47:39 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:4a::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-392f94adf39sm524365a91.11.2026.08.11.11.47.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 11:47:38 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, Willem de Bruijn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: andrew+netdev@lunn.ch, willemb@google.com, Joe Damato , linux-kernel@vger.kernel.org Subject: [PATCH net-next 2/2] net/packet: Use copy_safe_from_sockptr to dedupe code Date: Tue, 11 Aug 2026 11:47:20 -0700 Message-ID: <20260811184722.2612345-3-joe@dama.to> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260811184722.2612345-1-joe@dama.to> References: <20260811184722.2612345-1-joe@dama.to> 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" Reduce code duplication by using copy_safe_from_sockptr instead of repeated length checks followed by a copy. Signed-off-by: Joe Damato Reviewed-by: Willem de Bruijn --- net/packet/af_packet.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index ee60dcc639ad..9d326c2b04b3 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3961,10 +3961,9 @@ packet_setsockopt(struct socket *sock, int level, in= t optname, sockptr_t optval, { int val; =20 - if (optlen < sizeof(val)) - return -EINVAL; - if (copy_from_sockptr(&val, optval, sizeof(val))) - return -EFAULT; + ret =3D copy_safe_from_sockptr(&val, sizeof(val), optval, optlen); + if (ret) + return ret; =20 packet_sock_flag_set(po, PACKET_SOCK_AUXDATA, val); return 0; @@ -3973,10 +3972,9 @@ packet_setsockopt(struct socket *sock, int level, in= t optname, sockptr_t optval, { int val; =20 - if (optlen < sizeof(val)) - return -EINVAL; - if (copy_from_sockptr(&val, optval, sizeof(val))) - return -EFAULT; + ret =3D copy_safe_from_sockptr(&val, sizeof(val), optval, optlen); + if (ret) + return ret; =20 packet_sock_flag_set(po, PACKET_SOCK_ORIGDEV, val); return 0; @@ -3988,10 +3986,9 @@ packet_setsockopt(struct socket *sock, int level, in= t optname, sockptr_t optval, =20 if (sock->type !=3D SOCK_RAW) return -EINVAL; - if (optlen < sizeof(val)) - return -EINVAL; - if (copy_from_sockptr(&val, optval, sizeof(val))) - return -EFAULT; + ret =3D copy_safe_from_sockptr(&val, sizeof(val), optval, optlen); + if (ret) + return ret; =20 if (optname =3D=3D PACKET_VNET_HDR_SZ) { if (val && val !=3D sizeof(struct virtio_net_hdr) && --=20 2.53.0-Meta