Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3764184pxv; Mon, 19 Jul 2021 08:12:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwIMvjhrakzV3wmu7YalQVdeSK5ZKO2QI/eICAiT/VgQbc2m8H1GJtclZVwYRFbwV+4D+aY X-Received: by 2002:a05:6602:229a:: with SMTP id d26mr5096116iod.110.1626707574649; Mon, 19 Jul 2021 08:12:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626707574; cv=none; d=google.com; s=arc-20160816; b=YiadotIjm8Yeowl1g6twcWO3A/cQlfRUjfaJURiLV9mui82Ub5rSg6f1YFsT0994Li nBJdKB28fz8u79O+jmuRJlFqhLKW63G9LDZx11YZqrBNvh01Y7IJjCiBu18+sY29zd7s QlNwENPcnCl9NJMxkF+Bg2ynJb+LH6TkzAyCMx4c581YN71f0utyYzXuyMebjh9v19a8 XyJm9e5tx/60+Vlm8bQkq35WHsd+/NwdA07D9FlJ+/5Wwxx3V+X/zwRSlbo3S19jUkeZ RSrIoYknZs2/FcRIP1Sr3azRMRjOKFgd2Q/Aqy3MqGOWPlwXzLTex+coz4H7eU6k8V+A SnZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=FXWj83sEh8FUgVXuq9HrRlypLMkklpAjlCBFmHid1Bw=; b=muErE7v7kWHefnbDVLs/DD0jI9SV+KYPmqY6kB1xawCI9xKY7z7OdRb2naiRdJCB/D qwUlyUFfbMzPEzDva6/kcXUOtoUmNsY8ogYFTdKhJr6XEwpExPXpRQpEM2/b7hkAXpAc jfR3TdaQTc3bNA6/NA56pUb3blscUJDvedZX8kBYppT0S2mvNOkooOqH4VUOfboZiyoz CBzOYmm/7TdSREw4IKTVAKoYXBzgT4V0UOJb7BRLvtf/lpp+Zluo9Px+NVHAp7ijCEfk bPSeExOBOwdtFjtDAw1bBb9nZ/5mKD0h6xNcEeUI+UVvHz/WUcI6+KVrAeG7HfpBVlSy 9mEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=WLB+WhOG; 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=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z15si10252524ilh.22.2021.07.19.08.12.43; Mon, 19 Jul 2021 08:12:54 -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=@linuxfoundation.org header.s=korg header.b=WLB+WhOG; 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=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244131AbhGSO3V (ORCPT + 99 others); Mon, 19 Jul 2021 10:29:21 -0400 Received: from mail.kernel.org ([198.145.29.99]:36970 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244114AbhGSOYt (ORCPT ); Mon, 19 Jul 2021 10:24:49 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5612861205; Mon, 19 Jul 2021 15:05:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626707109; bh=+AwoeEsZVqWrlHWrUGR9wr/ZOhlF+XMSvDq5xSbqZoM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WLB+WhOGTQDQm2E+L5saAzGmCMVEp/NpIJymq+egMtQ4+8XgdgNhG53qc669yPQfU B8duQVY7ddjFuOlDXhm3uSX+93Z+GQSfCDvvBkGkvE5YI02Pv96SQ2Fo/7ItO9/iok NeBD361zkcRe/gZK3yNJBcTjB5yDXWPVRiG6HUw4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Murray McAllister , Linus Torvalds , Alexander Larkin , Dmitry Torokhov Subject: [PATCH 4.9 009/245] Input: joydev - prevent use of not validated data in JSIOCSBTNMAP ioctl Date: Mon, 19 Jul 2021 16:49:11 +0200 Message-Id: <20210719144940.688608262@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144940.288257948@linuxfoundation.org> References: <20210719144940.288257948@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexander Larkin commit f8f84af5da9ee04ef1d271528656dac42a090d00 upstream. Even though we validate user-provided inputs we then traverse past validated data when applying the new map. The issue was originally discovered by Murray McAllister with this simple POC (if the following is executed by an unprivileged user it will instantly panic the system): int main(void) { int fd, ret; unsigned int buffer[10000]; fd = open("/dev/input/js0", O_RDONLY); if (fd == -1) printf("Error opening file\n"); ret = ioctl(fd, JSIOCSBTNMAP & ~IOCSIZE_MASK, &buffer); printf("%d\n", ret); } The solution is to traverse internal buffer which is guaranteed to only contain valid date when constructing the map. Fixes: 182d679b2298 ("Input: joydev - prevent potential read overflow in ioctl") Fixes: 999b874f4aa3 ("Input: joydev - validate axis/button maps before clobbering current ones") Reported-by: Murray McAllister Suggested-by: Linus Torvalds Signed-off-by: Alexander Larkin Link: https://lore.kernel.org/r/20210620120030.1513655-1-avlarkin82@gmail.com Cc: stable@vger.kernel.org Signed-off-by: Dmitry Torokhov Signed-off-by: Greg Kroah-Hartman --- drivers/input/joydev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c @@ -492,7 +492,7 @@ static int joydev_handle_JSIOCSBTNMAP(st memcpy(joydev->keypam, keypam, len); for (i = 0; i < joydev->nkey; i++) - joydev->keymap[keypam[i] - BTN_MISC] = i; + joydev->keymap[joydev->keypam[i] - BTN_MISC] = i; out: kfree(keypam);