From patchwork Mon Jan 14 13:19:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Mikityanskiy X-Patchwork-Id: 1024489 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="WAkcwPtb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43dYvw6Fwxz9s9G for ; Tue, 15 Jan 2019 00:19:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726624AbfANNTH (ORCPT ); Mon, 14 Jan 2019 08:19:07 -0500 Received: from mail-eopbgr00063.outbound.protection.outlook.com ([40.107.0.63]:16205 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726580AbfANNTF (ORCPT ); Mon, 14 Jan 2019 08:19:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Rzum8eZOq5OP7SEHz/+jQ+Q2z/pDIzwB1DSlWnMLI70=; b=WAkcwPtbQalMH9PCrxPvvdATVCsw+jq3JHpjiAtx00rz77KZEjsfw4IXKsE6kxci1nXraQHdpccqr/0mHyRKS/cA7sCQAgUQUFt21eXL820qGArgoJbVtiy9TDH+xvBOuu8pypr+QqiBwLZk3KLatR/ukC6YG0LXAyS9JVSRrzs= Received: from AM6PR05MB5879.eurprd05.prod.outlook.com (20.179.0.76) by AM6PR05MB5286.eurprd05.prod.outlook.com (20.177.196.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Mon, 14 Jan 2019 13:19:02 +0000 Received: from AM6PR05MB5879.eurprd05.prod.outlook.com ([fe80::210c:168f:7b52:a165]) by AM6PR05MB5879.eurprd05.prod.outlook.com ([fe80::210c:168f:7b52:a165%4]) with mapi id 15.20.1516.019; Mon, 14 Jan 2019 13:19:02 +0000 From: Maxim Mikityanskiy To: "David S. Miller" , Saeed Mahameed , Willem de Bruijn , Jason Wang , Eric Dumazet CC: "netdev@vger.kernel.org" , Eran Ben Elisha , Tariq Toukan , Maxim Mikityanskiy Subject: [PATCH 4/7] net/packet: Ask driver for protocol if not provided by user Thread-Topic: [PATCH 4/7] net/packet: Ask driver for protocol if not provided by user Thread-Index: AQHUrAu3E2XNbgR+Mk2aFbjqMVDluw== Date: Mon, 14 Jan 2019 13:19:02 +0000 Message-ID: <20190114131841.1932-5-maximmi@mellanox.com> References: <20190114131841.1932-1-maximmi@mellanox.com> In-Reply-To: <20190114131841.1932-1-maximmi@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LO2P265CA0423.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a0::27) To AM6PR05MB5879.eurprd05.prod.outlook.com (2603:10a6:20b:a2::12) authentication-results: spf=none (sender IP is ) smtp.mailfrom=maximmi@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.19.1 x-originating-ip: [141.226.120.58] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM6PR05MB5286; 6:M/h9rQK5WvzG4BYoDNtbG3oPAtW3wW4H6/t/dVPUhExZsUd3EUHu6w4XREkMHrHpEM4vKMA4oqMWAUjdtGIvKm3lzPnobLHMD60tfH6eTp6VgmuCT6yA0nTXQCRO9+BxsoFM1I6B+ZTF2kIaRIwT8JBguJYULHb+fdbzrdY/QugzIUmSy3WGj8NTOFNBAoNUx5Wd0XmscA9OPDQpmWTowYF68RsMP6aewCydI9cKgaH+o0fKlrwhALlsGo395Kej+AqZvoh/EyDHyindNEHgLMlzXa1CcoRrQyTOhKW5OyRd0KmNOEDYAXULHG9d4VAQYO05OJTUoRlTzUbdQ8q5/VcGgkqUWiPmojNw+o80LliCevzy0Wn3C9y2lBM1a5I55P4Tt3RCa3ysZyRngJtMreTiL9xFoX2BkBFEp3NL7w4cSJWR2vv6nlU51gNAIzEe6nFDQw7rA6R134BR90zZ0g==; 5:YhTSlnRjEHw6IwxhFpQohJrPbzim4lF8TwzRFtccmHW8keIy54DPES81o1Ic1nlqyT+7FyXSErAarpp7sqQPczHzcHao5L7PQ5YOR/6YoC3uYngB+SjC6z3zS0WbJ5tHx43iiIq1tRQinZGysj4P47klYZHftG8DBBAEFLsXRx1j6oEi28Pl6ZYTQ90Jj+oqu8cDMsudW395eXcZJXNmzg==; 7:Q1oiVoYS1hrLeUop2SxAMSaMY+nztSs/nV06LphRTS9KjoBHeI7T5p5gGAk1wrrKfpFw+we6MAHvyoXfeLbXuSmwj8tlfUdVTp2QkbYiAxWeagongyATVcdVpS/G6BEMrOXf+qo5tXCV8l8xTUI6wg== x-ms-office365-filtering-correlation-id: d392e47e-8832-4204-2fd9-08d67a22d9ce x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM6PR05MB5286; x-ms-traffictypediagnostic: AM6PR05MB5286: x-microsoft-antispam-prvs: x-forefront-prvs: 0917DFAC67 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(39860400002)(346002)(376002)(199004)(189003)(5660300001)(476003)(446003)(11346002)(2616005)(107886003)(7736002)(305945005)(81166006)(81156014)(25786009)(39060400002)(8936002)(486006)(99286004)(6436002)(8676002)(6486002)(97736004)(316002)(4326008)(110136005)(54906003)(106356001)(1076003)(53936002)(68736007)(66066001)(2906002)(6512007)(71190400001)(36756003)(71200400001)(478600001)(14444005)(52116002)(256004)(76176011)(14454004)(86362001)(50226002)(26005)(3846002)(6116002)(186003)(386003)(6506007)(102836004)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR05MB5286; H:AM6PR05MB5879.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: vL5Un8P4Mk0DTNpT508p721txI4hdL8Foba/4Onq0ObWLdTRDNQD4zpCSFcKln3wSRR9XcqfStikC+hOv2jz18OJY1pLT7omMHbJBvHWFUKQMBW9RLGPMYE5op+le+vnoSG7B/TsiRjRETj/0H66rW9vQo2xFoTgJvAUyTSyC4G5IDUN0RsbylOPpCKVbkamWJJNK/aVC1PQfX6rtJuPMt4V5eqGXvWJeWFkflYA6+i0F1EHfDs1priGoc2QzVXZmmEyDWBJlXiRXJSjMbcfi3JC6yLcpZ006/1+uFi+W41yt8fESSLITTJ86+tKyR1YP/CqTA8jNemsYAm7BKczKO8Ar64zrbNgSF3tbWipYnj4QuTb1RpiI/CHEhZuNop+zPj6ktqIVgNjUCeUJBwvbAtQbcDlQ5rcsxo4jjX46g4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: d392e47e-8832-4204-2fd9-08d67a22d9ce X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jan 2019 13:19:00.9020 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB5286 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If a socket was created with socket(AF_PACKET, SOCK_RAW, 0), the protocol number is unavailable. Try to ask the driver to extract it from the L2 header in order for skb_try_probe_transport_header to succeed. Signed-off-by: Maxim Mikityanskiy --- net/packet/af_packet.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 8fc76e68777a..d1d89749a17a 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1850,6 +1850,15 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev, return 0; } +static void packet_parse_headers(struct sk_buff *skb, struct socket *sock) +{ + if (!skb->protocol && sock->type == SOCK_RAW) { + skb_reset_mac_header(skb); + skb->protocol = dev_parse_header_protocol(skb); + } + + skb_try_probe_transport_header(skb); +} /* * Output a raw packet to a device layer. This bypasses all the other @@ -1970,7 +1979,7 @@ static int packet_sendmsg_spkt(struct socket *sock, struct msghdr *msg, if (unlikely(extra_len == 4)) skb->no_fcs = 1; - skb_try_probe_transport_header(skb); + packet_parse_headers(skb, sock); dev_queue_xmit(skb); rcu_read_unlock(); @@ -2519,7 +2528,7 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb, len = ((to_write > len_max) ? len_max : to_write); } - skb_try_probe_transport_header(skb); + packet_parse_headers(skb, sock); return tp_len; } @@ -2924,7 +2933,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len) virtio_net_hdr_set_proto(skb, &vnet_hdr); } - skb_try_probe_transport_header(skb); + packet_parse_headers(skb, sock); if (unlikely(extra_len == 4)) skb->no_fcs = 1;