From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: usbip: vhci_sysfs: fix potential Spectre v1 From: "Gustavo A. R. Silva" Message-Id: <20180516222200.GA14733@embeddedor.com> Date: Wed, 16 May 2018 17:22:00 -0500 To: Valentina Manea , Shuah Khan , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, "Gustavo A. R. Silva" List-ID: cGRldl9uciBhbmQgcmhwb3J0IGNhbiBiZSBjb250cm9sbGVkIGJ5IHVzZXItc3BhY2UsIGhlbmNl IGxlYWRpbmcgdG8KYSBwb3RlbnRpYWwgZXhwbG9pdGF0aW9uIG9mIHRoZSBTcGVjdHJlIHZhcmlh bnQgMSB2dWxuZXJhYmlsaXR5LgoKVGhpcyBpc3N1ZSB3YXMgZGV0ZWN0ZWQgd2l0aCB0aGUgaGVs cCBvZiBTbWF0Y2g6CmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYzoyMzggZGV0YWNoX3N0 b3JlKCkgd2FybjogcG90ZW50aWFsCnNwZWN0cmUgaXNzdWUgJ3ZoY2lzJwpkcml2ZXJzL3VzYi91 c2JpcC92aGNpX3N5c2ZzLmM6MzI4IGF0dGFjaF9zdG9yZSgpIHdhcm46IHBvdGVudGlhbApzcGVj dHJlIGlzc3VlICd2aGNpcycKZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jOjMzOCBhdHRh Y2hfc3RvcmUoKSB3YXJuOiBwb3RlbnRpYWwKc3BlY3RyZSBpc3N1ZSAndmhjaS0+dmhjaV9oY2Rf c3MtPnZkZXYnCmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYzozNDAgYXR0YWNoX3N0b3Jl KCkgd2FybjogcG90ZW50aWFsCnNwZWN0cmUgaXNzdWUgJ3ZoY2ktPnZoY2lfaGNkX2hzLT52ZGV2 JwoKRml4IHRoaXMgYnkgc2FuaXRpemluZyBwZGV2X25yIGFuZCByaHBvcnQgYmVmb3JlIHVzaW5n IHRoZW0gdG8gaW5kZXgKdmhjaXMgYW5kIHZoY2ktPnZoY2lfaGNkX3NzLT52ZGV2IHJlc3BlY3Rp dmVseS4KCk5vdGljZSB0aGF0IGdpdmVuIHRoYXQgc3BlY3VsYXRpb24gd2luZG93cyBhcmUgbGFy Z2UsIHRoZSBwb2xpY3kgaXMKdG8ga2lsbCB0aGUgc3BlY3VsYXRpb24gb24gdGhlIGZpcnN0IGxv YWQgYW5kIG5vdCB3b3JyeSBpZiBpdCBjYW4gYmUKY29tcGxldGVkIHdpdGggYSBkZXBlbmRlbnQg bG9hZC9zdG9yZSBbMV0uCgpbMV0gaHR0cHM6Ly9tYXJjLmluZm8vP2w9bGludXgta2VybmVsJm09 MTUyNDQ5MTMxMTE0Nzc4Jnc9MgoKQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKU2lnbmVkLW9m Zi1ieTogR3VzdGF2byBBLiBSLiBTaWx2YSA8Z3VzdGF2b0BlbWJlZGRlZG9yLmNvbT4KLS0tCiBk cml2ZXJzL3VzYi91c2JpcC92aGNpX3N5c2ZzLmMgfCA2ICsrKysrKwogMSBmaWxlIGNoYW5nZWQs IDYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lz ZnMuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYwppbmRleCA0ODgwODM4Li45MDQ1 ODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3N5c2ZzLmMKKysrIGIvZHJp dmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCisjaW5j bHVkZSA8bGludXgvbm9zcGVjLmg+CisKICNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKICNpbmNs dWRlICJ2aGNpLmgiCiAKQEAgLTIzNSw2ICsyMzcsOCBAQCBzdGF0aWMgc3NpemVfdCBkZXRhY2hf c3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK IAlpZiAoIXZhbGlkX3BvcnQocGRldl9uciwgcmhwb3J0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAK KwlwZGV2X25yID0gYXJyYXlfaW5kZXhfbm9zcGVjKHBkZXZfbnIsIHZoY2lfbnVtX2NvbnRyb2xs ZXJzKTsKKwlyaHBvcnQgPSBhcnJheV9pbmRleF9ub3NwZWMocmhwb3J0LCBWSENJX0hDX1BPUlRT KTsKIAloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh2aGNpc1twZGV2X25yXS5wZGV2KTsKIAlp ZiAoaGNkID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJwb3J0IGlzIG5vdCByZWFkeSAldVxu IiwgcG9ydCk7CkBAIC0zMjUsNiArMzI5LDggQEAgc3RhdGljIHNzaXplX3QgYXR0YWNoX3N0b3Jl KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJaWYg KCF2YWxpZF9hcmdzKHBkZXZfbnIsIHJocG9ydCwgc3BlZWQpKQogCQlyZXR1cm4gLUVJTlZBTDsK IAorCXBkZXZfbnIgPSBhcnJheV9pbmRleF9ub3NwZWMocGRldl9uciwgdmhjaV9udW1fY29udHJv bGxlcnMpOworCXJocG9ydCA9IGFycmF5X2luZGV4X25vc3BlYyhyaHBvcnQsIFZIQ0lfSENfUE9S VFMpOwogCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHZoY2lzW3BkZXZfbnJdLnBkZXYpOwog CWlmIChoY2QgPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgInBvcnQgJWQgaXMgbm90IHJlYWR5 XG4iLCBwb3J0KTsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AB8JxZpn7PquQwCTnHxpPyRjOufSKACRTd9UCyMmkrLKlV/ZUidwvWV5RLVnCUzRxvhXtV+FA62S ARC-Seal: i=1; a=rsa-sha256; t=1526509325; cv=none; d=google.com; s=arc-20160816; b=h06SZPYlxFXOa4cLAyHbUIBi7Y5ms0YFnT0bJ20SJ5PK0Xj9yPUlBy6BU5TEG3SiwQ ARPtllvA2/0ptGXq4eXHIm+uZin6NmzS+Kg83yZQg2mwK6dNoj31UiUeEU29OwqnSLtM 21RB+7QQg9XCflG+cV5iz5ak0JfmZ6xT+JkcolarQ62WZ52h6PWwemWmwzdvz+7bN1pb mr4sQsVIPQdgo97D1Q0AI65LtkegM9adp9urQvMN+ifn6E9pfIUdcUDyPzIM+Lift6ji doFlyrvt1DGY//DP9mCJq9ARXkTcocwB266bYNgXOFNmhTj9dMN+Zw65sN8S71e57YK3 JKVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:content-disposition:mime-version:message-id:subject:cc :to:from:date:arc-authentication-results; bh=dGVyWIsurq/MYBdqSBQOcww5+DZRaDUbCz5UURzeeus=; b=Ho/skuhEI5ak6MfgKAPDTNStvh+u/hXp3Fp/Qq97rxfEtQIMDZ1cOGjPxPCbRezj+k /Fsr4742FWQnMWCEf6wh3PCby+rk4OYI4F8oLJmBQ/MpQ8DenDd0VAwgfbmd38sUnqyb ew4fFd2Pu76XVaDMnmYE3ra5U7QcV3dsKx2E6PFdLPxumwiI0gP9/nXJk4MFZkNQXnDf xtSb8CAUKMRGjoCj7zfC7glPCLNa/m8Y0FQWNaSpoaOZSoPDUlcr6CfPvxsxeqBHmQub cxQkTKukVD6LtpSZbNRfNTqe29XqL/K9cspdUOh7hngPyzDfWUWoJU7fsAyAOfmrCtB3 qS+Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of gustavo@embeddedor.com designates 192.185.149.105 as permitted sender) smtp.mailfrom=gustavo@embeddedor.com Authentication-Results: mx.google.com; spf=pass (google.com: domain of gustavo@embeddedor.com designates 192.185.149.105 as permitted sender) smtp.mailfrom=gustavo@embeddedor.com X-Authority-Reason: nr=8 Date: Wed, 16 May 2018 17:22:00 -0500 From: "Gustavo A. R. Silva" To: Valentina Manea , Shuah Khan , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, "Gustavo A. R. Silva" Subject: [PATCH] usbip: vhci_sysfs: fix potential Spectre v1 Message-ID: <20180516222200.GA14733@embeddedor.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator4166.hostgator.com X-AntiAbuse: Original Domain - linuxfoundation.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - embeddedor.com X-BWhitelist: no X-Source-IP: 187.172.56.86 X-Source-L: No X-Exim-ID: 1fJ4o5-00112M-4u X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (embeddedor) [187.172.56.86]:50382 X-Source-Auth: gustavo@embeddedor.com X-Email-Count: 3 X-Source-Cap: Z3V6aWRpbmU7Z3V6aWRpbmU7Z2F0b3I0MTY2Lmhvc3RnYXRvci5jb20= X-Local-Domain: yes X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1600661041859915107?= X-GMAIL-MSGID: =?utf-8?q?1600661041859915107?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: pdev_nr and rhport can be controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability. This issue was detected with the help of Smatch: drivers/usb/usbip/vhci_sysfs.c:238 detach_store() warn: potential spectre issue 'vhcis' drivers/usb/usbip/vhci_sysfs.c:328 attach_store() warn: potential spectre issue 'vhcis' drivers/usb/usbip/vhci_sysfs.c:338 attach_store() warn: potential spectre issue 'vhci->vhci_hcd_ss->vdev' drivers/usb/usbip/vhci_sysfs.c:340 attach_store() warn: potential spectre issue 'vhci->vhci_hcd_hs->vdev' Fix this by sanitizing pdev_nr and rhport before using them to index vhcis and vhci->vhci_hcd_ss->vdev respectively. Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1]. [1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2 Cc: stable@vger.kernel.org Signed-off-by: Gustavo A. R. Silva --- drivers/usb/usbip/vhci_sysfs.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c index 4880838..9045888 100644 --- a/drivers/usb/usbip/vhci_sysfs.c +++ b/drivers/usb/usbip/vhci_sysfs.c @@ -10,6 +10,8 @@ #include #include +#include + #include "usbip_common.h" #include "vhci.h" @@ -235,6 +237,8 @@ static ssize_t detach_store(struct device *dev, struct device_attribute *attr, if (!valid_port(pdev_nr, rhport)) return -EINVAL; + pdev_nr = array_index_nospec(pdev_nr, vhci_num_controllers); + rhport = array_index_nospec(rhport, VHCI_HC_PORTS); hcd = platform_get_drvdata(vhcis[pdev_nr].pdev); if (hcd == NULL) { dev_err(dev, "port is not ready %u\n", port); @@ -325,6 +329,8 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr, if (!valid_args(pdev_nr, rhport, speed)) return -EINVAL; + pdev_nr = array_index_nospec(pdev_nr, vhci_num_controllers); + rhport = array_index_nospec(rhport, VHCI_HC_PORTS); hcd = platform_get_drvdata(vhcis[pdev_nr].pdev); if (hcd == NULL) { dev_err(dev, "port %d is not ready\n", port); -- 2.7.4