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: [v3] usbip: vhci_sysfs: fix potential Spectre v1 From: "Gustavo A. R. Silva" Message-Id: <20180519011342.GA13962@embeddedgus> Date: Fri, 18 May 2018 20:13:42 -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 b3JlKCkgd2FybjogcG90ZW50aWFsIHNwZWN0cmUgaXNzdWUgJ3ZoY2lzJwpkcml2ZXJzL3VzYi91 c2JpcC92aGNpX3N5c2ZzLmM6MzI4IGF0dGFjaF9zdG9yZSgpIHdhcm46IHBvdGVudGlhbCBzcGVj dHJlIGlzc3VlICd2aGNpcycKZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jOjMzOCBhdHRh Y2hfc3RvcmUoKSB3YXJuOiBwb3RlbnRpYWwgc3BlY3RyZSBpc3N1ZSAndmhjaS0+dmhjaV9oY2Rf c3MtPnZkZXYnCmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYzozNDAgYXR0YWNoX3N0b3Jl KCkgd2FybjogcG90ZW50aWFsIHNwZWN0cmUgaXNzdWUgJ3ZoY2ktPnZoY2lfaGNkX2hzLT52ZGV2 JwoKRml4IHRoaXMgYnkgc2FuaXRpemluZyBwZGV2X25yIGFuZCByaHBvcnQgYmVmb3JlIHVzaW5n IHRoZW0gdG8gaW5kZXgKdmhjaXMgYW5kIHZoY2ktPnZoY2lfaGNkX3NzLT52ZGV2IHJlc3BlY3Rp dmVseS4KCk5vdGljZSB0aGF0IGdpdmVuIHRoYXQgc3BlY3VsYXRpb24gd2luZG93cyBhcmUgbGFy Z2UsIHRoZSBwb2xpY3kgaXMKdG8ga2lsbCB0aGUgc3BlY3VsYXRpb24gb24gdGhlIGZpcnN0IGxv YWQgYW5kIG5vdCB3b3JyeSBpZiBpdCBjYW4gYmUKY29tcGxldGVkIHdpdGggYSBkZXBlbmRlbnQg bG9hZC9zdG9yZSBbMV0uCgpbMV0gaHR0cHM6Ly9tYXJjLmluZm8vP2w9bGludXgta2VybmVsJm09 MTUyNDQ5MTMxMTE0Nzc4Jnc9MgoKQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKU2lnbmVkLW9m Zi1ieTogR3VzdGF2byBBLiBSLiBTaWx2YSA8Z3VzdGF2b0BlbWJlZGRlZG9yLmNvbT4KLS0tCkNo YW5nZXMgaW4gdjM6CiAtIFBhc3MgdGhlIGFkZHJlc3NlcyBvZiBwZGV2X25yIGFuZCByaHBvcnQg aW50byB2YWxpZF9wb3J0IGFuZAogICB2YWxpZF9hcmdzLgoKQ2hhbmdlcyBpbiB2MjoKIC0gUGxh Y2UgdGhlIGJhcnJpZXJzIGludG8gdmFsaWRfcG9ydC4KCiBkcml2ZXJzL3VzYi91c2JpcC92aGNp X3N5c2ZzLmMgfCAyNCArKysrKysrKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAx NiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYwppbmRl eCA0ODgwODM4Li5iZTM3YWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3N5 c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0xMCw2ICsxMCw5 IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgv c2xhYi5oPgogCisvKiBIYXJkZW5pbmcgZm9yIFNwZWN0cmUtdjEgKi8KKyNpbmNsdWRlIDxsaW51 eC9ub3NwZWMuaD4KKwogI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgogI2luY2x1ZGUgInZoY2ku aCIKIApAQCAtMjA1LDE2ICsyMDgsMjAgQEAgc3RhdGljIGludCB2aGNpX3BvcnRfZGlzY29ubmVj dChzdHJ1Y3QgdmhjaV9oY2QgKnZoY2lfaGNkLCBfX3UzMiByaHBvcnQpCiAJcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyBpbnQgdmFsaWRfcG9ydChfX3UzMiBwZGV2X25yLCBfX3UzMiByaHBvcnQpCitz dGF0aWMgaW50IHZhbGlkX3BvcnQoX191MzIgKnBkZXZfbnIsIF9fdTMyICpyaHBvcnQpCiB7Ci0J aWYgKHBkZXZfbnIgPj0gdmhjaV9udW1fY29udHJvbGxlcnMpIHsKLQkJcHJfZXJyKCJwZGV2ICV1 XG4iLCBwZGV2X25yKTsKKwlpZiAoKnBkZXZfbnIgPj0gdmhjaV9udW1fY29udHJvbGxlcnMpIHsK KwkJcHJfZXJyKCJwZGV2ICV1XG4iLCAqcGRldl9ucik7CiAJCXJldHVybiAwOwogCX0KLQlpZiAo cmhwb3J0ID49IFZIQ0lfSENfUE9SVFMpIHsKLQkJcHJfZXJyKCJyaHBvcnQgJXVcbiIsIHJocG9y dCk7CisJKnBkZXZfbnIgPSBhcnJheV9pbmRleF9ub3NwZWMoKnBkZXZfbnIsIHZoY2lfbnVtX2Nv bnRyb2xsZXJzKTsKKworCWlmICgqcmhwb3J0ID49IFZIQ0lfSENfUE9SVFMpIHsKKwkJcHJfZXJy KCJyaHBvcnQgJXVcbiIsICpyaHBvcnQpOwogCQlyZXR1cm4gMDsKIAl9CisJKnJocG9ydCA9IGFy cmF5X2luZGV4X25vc3BlYygqcmhwb3J0LCBWSENJX0hDX1BPUlRTKTsKKwogCXJldHVybiAxOwog fQogCkBAIC0yMzIsNyArMjM5LDcgQEAgc3RhdGljIHNzaXplX3QgZGV0YWNoX3N0b3JlKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJcGRldl9uciA9 IHBvcnRfdG9fcGRldl9ucihwb3J0KTsKIAlyaHBvcnQgPSBwb3J0X3RvX3JocG9ydChwb3J0KTsK IAotCWlmICghdmFsaWRfcG9ydChwZGV2X25yLCByaHBvcnQpKQorCWlmICghdmFsaWRfcG9ydCgm cGRldl9uciwgJnJocG9ydCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaGNkID0gcGxhdGZvcm1f Z2V0X2RydmRhdGEodmhjaXNbcGRldl9ucl0ucGRldik7CkBAIC0yNTgsNyArMjY1LDggQEAgc3Rh dGljIHNzaXplX3QgZGV0YWNoX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsCiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfV08oZGV0YWNoKTsKIAot c3RhdGljIGludCB2YWxpZF9hcmdzKF9fdTMyIHBkZXZfbnIsIF9fdTMyIHJocG9ydCwgZW51bSB1 c2JfZGV2aWNlX3NwZWVkIHNwZWVkKQorc3RhdGljIGludCB2YWxpZF9hcmdzKF9fdTMyICpwZGV2 X25yLCBfX3UzMiAqcmhwb3J0LAorCQkgICAgICBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQp CiB7CiAJaWYgKCF2YWxpZF9wb3J0KHBkZXZfbnIsIHJocG9ydCkpIHsKIAkJcmV0dXJuIDA7CkBA IC0zMjIsNyArMzMwLDcgQEAgc3RhdGljIHNzaXplX3QgYXR0YWNoX3N0b3JlKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIHNvY2tmZCwg ZGV2aWQsIHNwZWVkKTsKIAogCS8qIGNoZWNrIHJlY2VpdmVkIHBhcmFtZXRlcnMgKi8KLQlpZiAo IXZhbGlkX2FyZ3MocGRldl9uciwgcmhwb3J0LCBzcGVlZCkpCisJaWYgKCF2YWxpZF9hcmdzKCZw ZGV2X25yLCAmcmhwb3J0LCBzcGVlZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaGNkID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEodmhjaXNbcGRldl9ucl0ucGRldik7Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AB8JxZrrb5dfeMX+ZXJy3+Uc3UFbws2wVYILYZOqyo1OucjZLufrr++oKbGq4SH4BKFDzvaHbJR+ ARC-Seal: i=1; a=rsa-sha256; t=1526692424; cv=none; d=google.com; s=arc-20160816; b=lLGyhBGOB0OQg5nw6fEzTLQqJlxRrLQ9T9ZUY6GNtJEG0tbVMk3PNhQtmorNTUye/K QY7L29wLXeoQjef4/5PvzkvJberYLxOBabP4teZi3xIZuuBFG8QbSsAgiPog/x6jlnyP GpTmKRNzHppX3IBA4rooJ/0nKbLagcXJ7LeaNqcu4+5bLvs/L5nfRGkPxIrV6P1Wcdoz PuNHoNKT/R0b52FXvX28xDu+cOa9oZNCb58pQBBVvdA2MnCRO5y3siCUSLJQ+YWbj1q5 8Avt0w3k2HMZEVEbKvy+b9wEeHujeFz3fcttatOqGEpgYzo4+9YnHPAruv3Hk2ty5cHh jSrw== 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=E/7g7F7Ohbb25kUjdEVKb8HsivEL3/Nqbnpsq/G3BXE=; b=BmL3Tt4jTdXqWMNgeUODn2CQqMI0k4hVpK9o9mg92E9JvUTrz/xomFinLhLBhUAc4x ntQUXD+59lcf9G1YDCr9AovskyuuMYSCRQEb4ALVqOkt38yg01DgeOrorPlK465YZe1o n2HHVO8DPp+07ONIeYM7PpQc0wpn9mzZzUvpyAaH7VFKRyzgEl0u8CVnUGvUTaJ0eWbT 06jBw/L+24zIrd8z1VwAvKDMDLQDOzmGGOd3pCp1Gtlz6x4/X7lu3wiMjcxkjldL3wYN HzegGKAKZuGuSNCWgTeJmXaSoTY4Ze1UERp31Wym5ZaZk0S2Qbljq56ztvWIoBlKG59u TKYw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of gustavo@embeddedor.com designates 192.185.145.1 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.145.1 as permitted sender) smtp.mailfrom=gustavo@embeddedor.com X-Authority-Reason: nr=8 Date: Fri, 18 May 2018 20:13:42 -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 v3] usbip: vhci_sysfs: fix potential Spectre v1 Message-ID: <20180519011342.GA13962@embeddedgus> 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: 1fJqRL-004N6K-La X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (embeddedgus) [187.172.56.86]:58738 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?1600853035470472362?= 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 Acked-by: Shuah Khan (Samsung OSG) --- Changes in v3: - Pass the addresses of pdev_nr and rhport into valid_port and valid_args. Changes in v2: - Place the barriers into valid_port. drivers/usb/usbip/vhci_sysfs.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c index 4880838..be37aec 100644 --- a/drivers/usb/usbip/vhci_sysfs.c +++ b/drivers/usb/usbip/vhci_sysfs.c @@ -10,6 +10,9 @@ #include #include +/* Hardening for Spectre-v1 */ +#include + #include "usbip_common.h" #include "vhci.h" @@ -205,16 +208,20 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport) return 0; } -static int valid_port(__u32 pdev_nr, __u32 rhport) +static int valid_port(__u32 *pdev_nr, __u32 *rhport) { - if (pdev_nr >= vhci_num_controllers) { - pr_err("pdev %u\n", pdev_nr); + if (*pdev_nr >= vhci_num_controllers) { + pr_err("pdev %u\n", *pdev_nr); return 0; } - if (rhport >= VHCI_HC_PORTS) { - pr_err("rhport %u\n", rhport); + *pdev_nr = array_index_nospec(*pdev_nr, vhci_num_controllers); + + if (*rhport >= VHCI_HC_PORTS) { + pr_err("rhport %u\n", *rhport); return 0; } + *rhport = array_index_nospec(*rhport, VHCI_HC_PORTS); + return 1; } @@ -232,7 +239,7 @@ static ssize_t detach_store(struct device *dev, struct device_attribute *attr, pdev_nr = port_to_pdev_nr(port); rhport = port_to_rhport(port); - if (!valid_port(pdev_nr, rhport)) + if (!valid_port(&pdev_nr, &rhport)) return -EINVAL; hcd = platform_get_drvdata(vhcis[pdev_nr].pdev); @@ -258,7 +265,8 @@ static ssize_t detach_store(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR_WO(detach); -static int valid_args(__u32 pdev_nr, __u32 rhport, enum usb_device_speed speed) +static int valid_args(__u32 *pdev_nr, __u32 *rhport, + enum usb_device_speed speed) { if (!valid_port(pdev_nr, rhport)) { return 0; @@ -322,7 +330,7 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr, sockfd, devid, speed); /* check received parameters */ - if (!valid_args(pdev_nr, rhport, speed)) + if (!valid_args(&pdev_nr, &rhport, speed)) return -EINVAL; hcd = platform_get_drvdata(vhcis[pdev_nr].pdev); -- 2.7.4