From patchwork Fri Dec 14 17:59:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 153901 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp2364667ljp; Fri, 14 Dec 2018 09:59:26 -0800 (PST) X-Google-Smtp-Source: AFSGD/VfIQJqpOHeihiX6wHScjkuH7tlOS8LBejusp88RrFscFQhdflFRG8rx8l5kT+nS2+0DqNK X-Received: by 2002:a62:28c9:: with SMTP id o192mr3776615pfo.57.1544810366615; Fri, 14 Dec 2018 09:59:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544810366; cv=none; d=google.com; s=arc-20160816; b=p36KsckYgsbXDNaRAtJ97ijkKGLsapRb2F7zsWfgX8BvHT+k1HwgLe5YSafcrFyCHd YtK2iZffmhgVQHLtyY47jVomCrUXTQbM+Bgy1aXBjB1yjMvWfUkb0Gc5NYA+4u6VcwaT TgDCkcLy5v7XbfRGGb9Ly6f+EVYslSjMwOmzunpJQeiNeDbh4Rr9zeI9TZ81MScvUl2h vicrZOTOCku1VOHtAvfvoRDV+DKLHANbcFgbTBFjbaKAeG8YO2RHJHFi0oa3OItpFMJK cOKfkh/pphStUUEiFG24bpd6dBYWNVKwMHOvQOTzJs5uLimjLVbYWVqCyDqHKhsoDhH2 mcCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=sRJbbr64lvVh0lL0pj1PYc1G/ooZr74kh6CTU1AQsCc=; b=XCaWDJU90Gv9xzPf2i/1b+oFxXDgNfCpL75dFYfCR/vNzvgCqzZ3aWwuD+pOAwWzKC j7/AwmzSnV9sQQ3+jLRGxhO7+lU0Xu2NkESGNKoUhQLH09WUqPX+XW5mtNbJWx2pWr1y S1T0PD9YGrtkBYq4sjrT67mr1YmTdmwrfP7qQ2c3jIerLmHp/boqIVpJfEicTIa85Yl1 z/U4geSHzCMOc5BRAGVOAliFLoyKd6F+1vLy4SFpEqQw3FewuOgIe4GwM7JKyDkUQaVO KQoCb37S7OxwhhfDodNlZLsl94SyU47LCZrtD4LcZ01Nm30Ct4IpPINQkrLIPj2i/Qr7 cNgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HuhENEoi; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g34si4531029pld.15.2018.12.14.09.59.25; Fri, 14 Dec 2018 09:59:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HuhENEoi; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730308AbeLNR7Y (ORCPT + 10 others); Fri, 14 Dec 2018 12:59:24 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:46612 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729684AbeLNR7Y (ORCPT ); Fri, 14 Dec 2018 12:59:24 -0500 Received: by mail-lf1-f66.google.com with SMTP id f23so4874523lfc.13 for ; Fri, 14 Dec 2018 09:59:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=sRJbbr64lvVh0lL0pj1PYc1G/ooZr74kh6CTU1AQsCc=; b=HuhENEoi/whKaG+A+YSurhvmK8qQwGvJAZrDquZ65idKa1wrw78E8tyVBKOB16GiQY 0ATLMmjlultFzOxK9KdubWaRhfscmYv3G+RuInbsHirVVWeW91gl6R36Yn255FLsFJyN /S7DvRNopo1fxUQ1pDOq6BrUdggpOVokCMhPs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=sRJbbr64lvVh0lL0pj1PYc1G/ooZr74kh6CTU1AQsCc=; b=MeTkafNPXQ4PuqTcVhNjRP9so1AMistsfmZBZ5Q+f+2CUcyiwtAys7AJhyS4KjPWFl +EvaQDUeUWh28mRz34eoOne3ybWoDEC0hhbJpaxhJYDaIFBKBqjs7mDnoZEsXvFpV3fc Fa/l7owh5W2aFXHgCzJgR4EtjzUgXk54wze50GQyfQEk0eK2vVC/pkzmuMw5hVs+GLsI I9R9eQkV+4rfFHZWIYgz1vYzfpfz6HDmlcFsPviT+LP4MZYPb4Laz7MyXg8ZjcL1qd/v 3m8w3uMDhfQSewA5vEkrE8TmCMyXO6eWLeBegbKaFSqAgdEGp4S8GuDOtW5TZgTfXoPz c+VA== X-Gm-Message-State: AA+aEWYwUifkjmoIhX5bkSteyupq5MAU+wtCFR5JGGFbqFcM4f0JRin7 ISGnERerj2aYzDxR6WzmnSRNnF+NqxicpA== X-Received: by 2002:a19:1a14:: with SMTP id a20mr2291788lfa.1.1544810362450; Fri, 14 Dec 2018 09:59:22 -0800 (PST) Received: from localhost ([195.238.92.132]) by smtp.gmail.com with ESMTPSA id r29-v6sm930739ljd.44.2018.12.14.09.59.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 14 Dec 2018 09:59:21 -0800 (PST) From: Sam Protsenko To: James Chapman , "David S. Miller" Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Guillaume Nault Subject: [PATCH] l2tp: Add protocol field decompression Date: Fri, 14 Dec 2018 19:59:21 +0200 Message-Id: <20181214175921.6859-1-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When Protocol Field Compression (PFC) is enabled, the "Protocol" field in PPP packet will be received without leading 0x00. See section 6.5 in RFC 1661 for details. So let's decompress protocol field if needed, the same way it's done in drivers/net/ppp/pptp.c. In case when "nopcomp" pppd option is not enabled, PFC (pcomp) can be negotiated during LCP handshake, and L2TP driver in kernel will receive PPP packets with compressed Protocol field, which in turn leads to next error: Protocol Rejected (unsupported protocol 0x2145) because instead of Protocol=0x0021 in PPP packet there will be Protocol=0x21. This patch unwraps it back to 0x0021, which fixes the issue. Sending the compressed Protocol field will be implemented in subsequent patch, this one is self-sufficient. Signed-off-by: Sam Protsenko --- net/l2tp/l2tp_ppp.c | 4 ++++ 1 file changed, 4 insertions(+) -- 2.19.1 diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c index 04d9946dcdba..c03c6461f236 100644 --- a/net/l2tp/l2tp_ppp.c +++ b/net/l2tp/l2tp_ppp.c @@ -236,6 +236,10 @@ static void pppol2tp_recv(struct l2tp_session *session, struct sk_buff *skb, int skb->data[1] == PPP_UI) skb_pull(skb, 2); + /* Decompress protocol field if PFC is enabled */ + if ((*skb->data) & 0x1) + *(u8 *)skb_push(skb, 1) = 0; + if (sk->sk_state & PPPOX_BOUND) { struct pppox_sock *po;