Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp577906pxk; Fri, 11 Sep 2020 14:58:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzznQgrcgG2H08k/noxQXSIiPnOZyVO/Ec3FR99LLc6ul05/lWwSpxe7JMyYyd3AvxaM3UO X-Received: by 2002:a50:bb0d:: with SMTP id y13mr4942941ede.317.1599861495770; Fri, 11 Sep 2020 14:58:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599861495; cv=none; d=google.com; s=arc-20160816; b=VNDFhkOgsKH9+YEyF6PLN8JzmnEq0w1pMda8QJ3wNH25R/vXOyu4RRAGubJSlHiPfg K8a1YxowMMsLhQ4YcHS+6YXgb37gRR3suqFDfCitQbw/rAktmSfBp9Ryw0qDxAXiWmz6 4OMtfHRQbjuNWBNgG00SETH4frY1MdxSEpIBVBQXZEks7QDJObXqpXNQ7qHEecBFv9zj RHbYwfep1HgLTh2c+7iWol1A4HKh+famlLHJjxqmfG7lAbIC3YKYpOqSdvO2D29i1iRb X74vi5ZM/fuNhqURhcnVrLyvk+92DrcJY2ybgCsKU9SkK2hXX8DCeKtlpYcXr+KLuM3s gctw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=Ro1p0zq3nUdJnnTxSQmKIUJMeip0AuQQTucoDbpLMf0=; b=VZ/HztY5j4uVKcc3Jtq6/0iAC9DElKd6F1VHc26DyevM1jwr+LkwPd0tCyRh0AyuGj mNcvKMShlrbXs2s8ALngI56PMDE0CUpjBdKUcXWp2K3kOVWFbQRw5SBZr/YECaux05cg 3vospAjdZyDBmVOAfC6qQuhqd5pnPD7NKe8q1SyJtFuIY0PtxQ1KCAXqNNxD9Y6cEY0T 103nxbG8K2DK0zc7EqclFzThiohcpj6LBIFrkKp37suzExsLsHIsJXA/KeTGNresCcJ4 4wa7aalh6DS2zP82VfErh6xeLnChwxkcZfcGUa51VaJlrdzHqd/dG/wK+Wr2T6N+emEt drfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="NoD/SasP"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s22si2147980edc.481.2020.09.11.14.57.53; Fri, 11 Sep 2020 14:58:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="NoD/SasP"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725952AbgIKV4w (ORCPT + 99 others); Fri, 11 Sep 2020 17:56:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725887AbgIKV4L (ORCPT ); Fri, 11 Sep 2020 17:56:11 -0400 Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB584C061795 for ; Fri, 11 Sep 2020 14:56:11 -0700 (PDT) Received: by mail-pf1-x441.google.com with SMTP id o20so8311014pfp.11 for ; Fri, 11 Sep 2020 14:56:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Ro1p0zq3nUdJnnTxSQmKIUJMeip0AuQQTucoDbpLMf0=; b=NoD/SasP5nqoejgWiFrhT2ahgWH3qtxein7dsteuMXJWOMADUymL8hrUb6SUwrUeNI I+ELzMtsoS3ItxnsQOG8Y7Kub568ZCuGWlod6Vsa8DfTz6DMO3qSFQthXL4rZb6esc0d 1aNBd4lUz5YWZrXh9XSnyjDV6ekogKxnwV0qpgF5UFEqu9QTFluDZjX+EzhY0tovDNih wCwKqtDyxix1npLfyZvDUWKrz/0cU2Z9895FrkUfhlqOU9/v1hBjF3Qb9O5dcY8gvzJk xJlI5BkrjsDfOS7OEF3215Krfo7ZjMExjdYyH+idc4vdMdWEEqzMljuBVosqhKLjQIuP WRXQ== 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=Ro1p0zq3nUdJnnTxSQmKIUJMeip0AuQQTucoDbpLMf0=; b=tAl5LUAqoBxZGsosY/EJ2icTQzhdofCEAOt5/9t3dMAXvTcaUZ8fJE4hpYIIUWYhf/ 0dqUJxjOWvEfqFxKuX2KdXhMsZ24owJyk9EEN/UNCZxQPUKOn/O7lkTyI/XfSa5B+m/9 5OyO70UKPkDBkMZAfacGIyBfXiur1gMaZGz9pg1rrs62ePo6a4gcWUtaG6E4VgjYiCM4 auUks7u5X6oTFJVtIS5HZwirjZ39OyjDy3tuSZ5E+ndPsc+0IHsP7aatP9Srzl4KNJUf nK7M9EUwGhMnGclFK09obymU9KSQrkjAI4EeSe1byP/P3lwl8sJlbvVNjIjZ1FF10H5C f5hQ== X-Gm-Message-State: AOAM533l5czOxxH9op+cqQe4oRw+DqsVt/t2nPeaLIzfxlYYj7u6ihce KuUUgdxQmNN7VqGER9Ar3I1EgykFGZQ= X-Received: by 2002:a65:4c08:: with SMTP id u8mr3179834pgq.340.1599861371259; Fri, 11 Sep 2020 14:56:11 -0700 (PDT) Received: from jacob-builder.jf.intel.com (jfdmzpr04-ext.jf.intel.com. [134.134.137.73]) by smtp.gmail.com with ESMTPSA id e62sm3171586pfh.76.2020.09.11.14.56.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Sep 2020 14:56:10 -0700 (PDT) From: Jacob Pan X-Google-Original-From: Jacob Pan To: iommu@lists.linux-foundation.org, LKML , Joerg Roedel , Alex Williamson , "Lu Baolu" , David Woodhouse , Jonathan Corbet Cc: Jean-Philippe Brucker , Eric Auger , Jacob Pan , Yi Liu , "Tian, Kevin" , Raj Ashok , Wu Hao , Yi Sun Subject: [PATCH v9 4/7] iommu/uapi: Use named union for user data Date: Fri, 11 Sep 2020 14:57:53 -0700 Message-Id: <1599861476-53416-5-git-send-email-jacob.jun.pan@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1599861476-53416-1-git-send-email-jacob.jun.pan@linux.intel.com> References: <1599861476-53416-1-git-send-email-jacob.jun.pan@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org IOMMU UAPI data size is filled by the user space which must be validated by the kernel. To ensure backward compatibility, user data can only be extended by either re-purpose padding bytes or extend the variable sized union at the end. No size change is allowed before the union. Therefore, the minimum size is the offset of the union. To use offsetof() on the union, we must make it named. Link: https://lore.kernel.org/linux-iommu/20200611145518.0c2817d6@x1.home/ Signed-off-by: Jacob Pan Reviewed-by: Lu Baolu Reviewed-by: Eric Auger --- drivers/iommu/intel/iommu.c | 22 +++++++++++----------- drivers/iommu/intel/svm.c | 2 +- include/uapi/linux/iommu.h | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 87b17bac04c2..461f3a6864d4 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -5434,8 +5434,8 @@ intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, /* Size is only valid in address selective invalidation */ if (inv_info->granularity == IOMMU_INV_GRANU_ADDR) - size = to_vtd_size(inv_info->addr_info.granule_size, - inv_info->addr_info.nb_granules); + size = to_vtd_size(inv_info->granu.addr_info.granule_size, + inv_info->granu.addr_info.nb_granules); for_each_set_bit(cache_type, (unsigned long *)&inv_info->cache, @@ -5456,20 +5456,20 @@ intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, * granularity. */ if (inv_info->granularity == IOMMU_INV_GRANU_PASID && - (inv_info->pasid_info.flags & IOMMU_INV_PASID_FLAGS_PASID)) - pasid = inv_info->pasid_info.pasid; + (inv_info->granu.pasid_info.flags & IOMMU_INV_PASID_FLAGS_PASID)) + pasid = inv_info->granu.pasid_info.pasid; else if (inv_info->granularity == IOMMU_INV_GRANU_ADDR && - (inv_info->addr_info.flags & IOMMU_INV_ADDR_FLAGS_PASID)) - pasid = inv_info->addr_info.pasid; + (inv_info->granu.addr_info.flags & IOMMU_INV_ADDR_FLAGS_PASID)) + pasid = inv_info->granu.addr_info.pasid; switch (BIT(cache_type)) { case IOMMU_CACHE_INV_TYPE_IOTLB: /* HW will ignore LSB bits based on address mask */ if (inv_info->granularity == IOMMU_INV_GRANU_ADDR && size && - (inv_info->addr_info.addr & ((BIT(VTD_PAGE_SHIFT + size)) - 1))) { + (inv_info->granu.addr_info.addr & ((BIT(VTD_PAGE_SHIFT + size)) - 1))) { pr_err_ratelimited("User address not aligned, 0x%llx, size order %llu\n", - inv_info->addr_info.addr, size); + inv_info->granu.addr_info.addr, size); } /* @@ -5477,9 +5477,9 @@ intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, * We use npages = -1 to indicate that. */ qi_flush_piotlb(iommu, did, pasid, - mm_to_dma_pfn(inv_info->addr_info.addr), + mm_to_dma_pfn(inv_info->granu.addr_info.addr), (granu == QI_GRAN_NONG_PASID) ? -1 : 1 << size, - inv_info->addr_info.flags & IOMMU_INV_ADDR_FLAGS_LEAF); + inv_info->granu.addr_info.flags & IOMMU_INV_ADDR_FLAGS_LEAF); if (!info->ats_enabled) break; @@ -5502,7 +5502,7 @@ intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, size = 64 - VTD_PAGE_SHIFT; addr = 0; } else if (inv_info->granularity == IOMMU_INV_GRANU_ADDR) { - addr = inv_info->addr_info.addr; + addr = inv_info->granu.addr_info.addr; } if (info->ats_enabled) diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c index 95c3164a2302..99353d6468fa 100644 --- a/drivers/iommu/intel/svm.c +++ b/drivers/iommu/intel/svm.c @@ -370,7 +370,7 @@ int intel_svm_bind_gpasid(struct iommu_domain *domain, struct device *dev, spin_lock(&iommu->lock); ret = intel_pasid_setup_nested(iommu, dev, (pgd_t *)(uintptr_t)data->gpgd, - data->hpasid, &data->vtd, dmar_domain, + data->hpasid, &data->vendor.vtd, dmar_domain, data->addr_width); spin_unlock(&iommu->lock); if (ret) { diff --git a/include/uapi/linux/iommu.h b/include/uapi/linux/iommu.h index 7cc6ee6c41f7..c64bca5af419 100644 --- a/include/uapi/linux/iommu.h +++ b/include/uapi/linux/iommu.h @@ -267,7 +267,7 @@ struct iommu_cache_invalidate_info { union { struct iommu_inv_pasid_info pasid_info; struct iommu_inv_addr_info addr_info; - }; + } granu; }; /** @@ -337,7 +337,7 @@ struct iommu_gpasid_bind_data { /* Vendor specific data */ union { struct iommu_gpasid_bind_data_vtd vtd; - }; + } vendor; }; #endif /* _UAPI_IOMMU_H */ -- 2.7.4