Received: by 10.192.165.156 with SMTP id m28csp1158729imm; Wed, 11 Apr 2018 13:33:43 -0700 (PDT) X-Google-Smtp-Source: AIpwx48vx4rRyqxznG9AAHGP6VEvPiPi1reL9BveJ60qW2uo4dpt3bEBA0Sb1WmSudaN//qErl1J X-Received: by 10.98.8.12 with SMTP id c12mr355917pfd.77.1523478822962; Wed, 11 Apr 2018 13:33:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523478822; cv=none; d=google.com; s=arc-20160816; b=MSNKNZmzv+HB6lWBVhS5B8qSle/ETFSYv26eMtfG/Fw1jwOJYpmA65ISmceb1Q/jZA 3u/uHy8ORC9cTbF9GJdAYOJxZnS11L3rGtFOHSavgRzfMdrxCXDFaFy3ymV1Pxd2c2hZ jQnz+Q0x9UzO8pTGfptHFpG5XRuSn6dMfHX4mCpiW6SVohtCfGu2U4+w+QSUxvtCexte 95bSw0idFnPDRWRjNh5Q0HjSNY0qS/0/e+WuCC7v7Gv7GSfSs+2ilELlk72MLGUGzyeV xiXNYe3BJ5f7+BfVQN3PSVEngawoExuwSU5B09R9xdvXz88dOYAeslMDogPSum/BMmQs MY7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=bs//SNAqSVQ6a5evR88agHOYxo6PllT6UBpCSroI+t4=; b=bnCXxuQKpgJjDCr9vZQSfvMIJytknL5A2opKSOpcZN/+LvCWW1SWtQfUxF/ZuCw6Gu qabyYoNP7TZn5mOtbDpUK/cIH17nevgH2osHM5wEXfxD8SolkG0j3FcEhvXYmTbvDg9e g5NzmCwOHkU5j7+FmmxbELpLzRAj1LhGUDV1A3tvgQmt/WT8PNKDuhJvwpRWK86icH0r 3cqFdxxFU46+0l4Zy/GSl5xdkRYTQz9Q90QL//TlnKXQzIcuARfOF2deccsPONFl0dz0 MsLrvABfTh2wnjcaY3W5UbzBOuWwClhJNtSpOLLnVBWqSVETNlF3SuvlWz2xD+q0bir1 Ds2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 85si1439558pfh.176.2018.04.11.13.33.05; Wed, 11 Apr 2018 13:33:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932772AbeDKSvA (ORCPT + 99 others); Wed, 11 Apr 2018 14:51:00 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:32818 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932744AbeDKSu5 (ORCPT ); Wed, 11 Apr 2018 14:50:57 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 4A4FEDC2; Wed, 11 Apr 2018 18:50:56 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Willem de Bruijn , Soheil Hassas Yeganeh , Eric Dumazet , "David S. Miller" , Sasha Levin Subject: [PATCH 4.4 137/190] skbuff: only inherit relevant tx_flags Date: Wed, 11 Apr 2018 20:36:23 +0200 Message-Id: <20180411183600.603547227@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180411183550.114495991@linuxfoundation.org> References: <20180411183550.114495991@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Willem de Bruijn [ Upstream commit fff88030b3ff930ca7a3d74acfee0472f33887ea ] When inheriting tx_flags from one skbuff to another, always apply a mask to avoid overwriting unrelated other bits in the field. The two SKBTX_SHARED_FRAG cases clears all other bits. In practice, tx_flags are zero at this point now. But this is fragile. Timestamp flags are set, for instance, if in tcp_gso_segment, after this clear in skb_segment. The SKBTX_ANY_TSTAMP mask in __skb_tstamp_tx ensures that new skbs do not accidentally inherit flags such as SKBTX_SHARED_FRAG. Signed-off-by: Willem de Bruijn Acked-by: Soheil Hassas Yeganeh Acked-by: Eric Dumazet Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- net/core/skbuff.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -2551,7 +2551,8 @@ void skb_split(struct sk_buff *skb, stru { int pos = skb_headlen(skb); - skb_shinfo(skb1)->tx_flags = skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG; + skb_shinfo(skb1)->tx_flags |= skb_shinfo(skb)->tx_flags & + SKBTX_SHARED_FRAG; if (len < pos) /* Split line is inside header. */ skb_split_inside_header(skb, skb1, len, pos); else /* Second chunk has no header, nothing to copy. */ @@ -3115,8 +3116,8 @@ struct sk_buff *skb_segment(struct sk_bu skb_copy_from_linear_data_offset(head_skb, offset, skb_put(nskb, hsize), hsize); - skb_shinfo(nskb)->tx_flags = skb_shinfo(head_skb)->tx_flags & - SKBTX_SHARED_FRAG; + skb_shinfo(nskb)->tx_flags |= skb_shinfo(head_skb)->tx_flags & + SKBTX_SHARED_FRAG; while (pos < offset + len) { if (i >= nfrags) { @@ -3734,7 +3735,8 @@ void __skb_tstamp_tx(struct sk_buff *ori return; if (tsonly) { - skb_shinfo(skb)->tx_flags = skb_shinfo(orig_skb)->tx_flags; + skb_shinfo(skb)->tx_flags |= skb_shinfo(orig_skb)->tx_flags & + SKBTX_ANY_TSTAMP; skb_shinfo(skb)->tskey = skb_shinfo(orig_skb)->tskey; }