From patchwork Thu Jul 26 02:31:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 949441 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=quarantine dis=none) header.from=arista.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="Q7wIVXbG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41bbkd6cLSz9ryl for ; Thu, 26 Jul 2018 12:33:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728992AbeGZDq0 (ORCPT ); Wed, 25 Jul 2018 23:46:26 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:34118 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728808AbeGZDq0 (ORCPT ); Wed, 25 Jul 2018 23:46:26 -0400 Received: by mail-ed1-f66.google.com with SMTP id h1-v6so342997eds.1 for ; Wed, 25 Jul 2018 19:31:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=googlenew; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rgUumo0LqnvJS+B98GBegKvI5G0lgAubDkmVdRBxjUc=; b=Q7wIVXbGV3UV4flvJgGsbbmfmAZ+DLmXAf0ZL4tQU1Ll2wtF5KBx0hHN3nrAmDJRk3 nczR0OdefG6F7voJMYg9nLjZd4kD/VmeqT4+v6eguD4r7WoEX23aiGyPOVRtyGToFwh4 McKi1THf75WKa/cGnMWf2Qr8Xhzl0J8LJhs3UI/O9D4I8ZCiZzXm9eGYL3gMj3VtkIBP cTBkAhTdpxNJk2UTz0hAc4Ulf37Ozkl0JyOJpMEiXIsi0/pA9WXzBNIKwMMy+J7TMLu4 ElpJ6SPpTkBWezi4nnuZxrjOu5xNSc2QpUIT3R2GFv06zTGJNO0zn24qgdU7jHCe6XXJ hD9g== 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:in-reply-to :references; bh=rgUumo0LqnvJS+B98GBegKvI5G0lgAubDkmVdRBxjUc=; b=OZdWAQe64ZNf8TEVQ6Jt/V2+hAU3INy9IZNUgzgqoTS2l7hBvtEQ16dKt51NEFcr+U CUMaT0mMdIn8AledziPJyhzlMkpVDkIdcAskOKM4KbMnFIDo7+c5c9Nj2xpuJCSQJ3iD DSK+w/oGCtaKc+3KugyrkGjQ2YcaWQsXZjlguQjfDn3u+8e75CLkGzgiPzFjFp2+jVEI vvVmv2aysh25iv4eeAepur2m0u0c5SWnAnXa9O96ezOER8nXhK4MB4JI0noLjdS91TK2 U+fB4jDa0jvrd9FTTNAm4u7igMaXluKpKYMsBU553ObSmPw3GLehC0b/e71oKmoHJP9Q fp1w== X-Gm-Message-State: AOUpUlEhkDh2hJsLzZABP7BYLJDjAc6t3+kCq293elhvuf6wr8Fklju9 hoaomrnOd1n0WUV16rK5q+FYYQ== X-Google-Smtp-Source: AAOMgpf+/78vpYY34Mmxlu+9r6HVh9jV1vaVJVAALPWdVnvpIJaLu6KCXS6REQ4+xO2f9yXPPWf/1A== X-Received: by 2002:a50:dccf:: with SMTP id v15-v6mr501363edk.196.1532572312398; Wed, 25 Jul 2018 19:31:52 -0700 (PDT) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id x13-v6sm241024edx.17.2018.07.25.19.31.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 25 Jul 2018 19:31:51 -0700 (PDT) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: Dmitry Safonov , "David S. Miller" , Herbert Xu , Steffen Klassert , Dmitry Safonov <0x7f454c46@gmail.com>, netdev@vger.kernel.org Subject: [PATCH 05/18] net/xfrm: Parse userspi_info{, _packed} depending on syscall Date: Thu, 26 Jul 2018 03:31:31 +0100 Message-Id: <20180726023144.31066-6-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180726023144.31066-1-dima@arista.com> References: <20180726023144.31066-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Struct xfrm_userspi_info differs in size between 64-bit/32-bit UAPI because of (possible) padding of xfrm_usersa_info: 32-bit 64-bit ---------------------------------------------------------------------- sizeof(xfrm_userspi_info) = 228 | sizeof(xfrm_userspi_info) = 232 xfrm_userspi_info::info = 0 | xfrm_userspi_info::info = 0 xfrm_userspi_info::min = 220 | xfrm_userspi_info::min = 224 xfrm_userspi_info::max = 224 | xfrm_userspi_info::max = 228 xfrm_alloc_userspi() can handle both UAPI by checking the type of send() syscall used by userspace with XFRM_MSG_ALLOCSPI. Cc: "David S. Miller" Cc: Herbert Xu Cc: Steffen Klassert Cc: netdev@vger.kernel.org Signed-off-by: Dmitry Safonov --- net/xfrm/xfrm_user.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index b382cdd3bef6..bf2ca93edaf5 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c @@ -61,6 +61,12 @@ struct xfrm_userpolicy_info_packed { __u8 share; } __packed; +struct xfrm_userspi_info_packed { + struct xfrm_usersa_info_packed info; + __u32 min; + __u32 max; +} __packed; + static int verify_one_alg(struct nlattr **attrs, enum xfrm_attr_type_t type) { struct nlattr *rt = attrs[type]; @@ -1279,11 +1285,21 @@ static int xfrm_alloc_userspi(struct sk_buff *skb, struct nlmsghdr *nlh, xfrm_address_t *daddr; int family; int err; - u32 mark; + u32 mark, spi_min, spi_max; struct xfrm_mark m; p = nlmsg_data(nlh); - err = verify_spi_info(p->info.id.proto, p->min, p->max); + if (in_compat_syscall()) { + struct xfrm_userspi_info_packed *_p = nlmsg_data(nlh); + + spi_min = _p->min; + spi_max = _p->max; + } else { + spi_min = p->min; + spi_max = p->max; + } + + err = verify_spi_info(p->info.id.proto, spi_min, spi_max); if (err) goto out_noput; @@ -1310,7 +1326,7 @@ static int xfrm_alloc_userspi(struct sk_buff *skb, struct nlmsghdr *nlh, if (x == NULL) goto out_noput; - err = xfrm_alloc_spi(x, p->min, p->max); + err = xfrm_alloc_spi(x, spi_min, spi_max); if (err) goto out;