Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2833068pxv; Mon, 12 Jul 2021 03:04:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxGCY8odlt/QbJCYkyciFWkCm0NqpUJM/wM4ISwYgwZLiykceJfoYrjdsPX1yq1flmnXr8A X-Received: by 2002:a92:dd89:: with SMTP id g9mr37615911iln.200.1626084281094; Mon, 12 Jul 2021 03:04:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626084281; cv=none; d=google.com; s=arc-20160816; b=oI4AtoxeMDaT1bDbYggNNbUhk5aPUNdXcq49vy0QKnq484EaUP3xAWRI6ki4bMWJwB 4JX+P23vTUvS+kS3f9P34kevo1blp5Xfbgwf3N/+fMqV3qaCNkDADOVNheXkFaMqIij0 Venk9+euy2wW/0HHtpgrCp+9dhiOTdimnyMqliVn0taz4QF6E9xT30PKfvq7CZSlj6r8 rNIUn5pptj7siNzE2dyFU0MsWp6xbvcj7kG5mIfflw19++m3+fnweTvHQmefvru++ptp ESyTRK9rk4EQ5EcqFJV2NpZOBNa8KlNHGQkLjjYHIGpN1lJZakIHJtL7nnPK4/hIx56n Z7ig== 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=ExJwR9bxdUQUWUySLGFYJNVLjwNFMzYmCPoMaJC4rYs=; b=Sn6MGNMHszq2l7ZVZxqPMPa8E/qV4qKu5Ls4y+A5DFowHoaj+eeHMB2SvnZAyWcRZx i8+APE+uPGGhx978q0w0YOFyWFtRWZulCE3iMGsXLsJ4+pim8+D7/73UM8GYJlyYCwMh dDFCe8e2RBBRVWaA0j+8qibq61wzK/911s4NvZ5OWd2F/sdB7QENjq6LlaNXq8ocW4FZ vpFxfcErttoO77K9ibm75alkZeQtFzDU2a7FUCoyc8Ad/K3t3GsjBvDTDOJOuI5QI75d 4s9T7nqKekRYnA86zUIDcEZT3R4K48gb5/SgMNS1bWYtkha57IBV/ce9zJYQHzD0ndtU gPkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=KEs3X2oi; 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 x9si17780117ill.103.2021.07.12.03.04.29; Mon, 12 Jul 2021 03:04:41 -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=KEs3X2oi; 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 S239541AbhGLHZh (ORCPT + 99 others); Mon, 12 Jul 2021 03:25:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:33600 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240507AbhGLG6u (ORCPT ); Mon, 12 Jul 2021 02:58:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 56BFF613E8; Mon, 12 Jul 2021 06:56:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626072962; bh=mN06SF4VSjSXGXyu6dP0YwqQ3pJaEq3g/1y+qp+mK4E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KEs3X2oiJ5YdnP+J+21A+N7QmxJ3XScbzCwPjVTzlU/y/tC/kY0JfBObsqoVshga9 WHh9GOActKILvCVZXA9g1opAJdH4l/qBMjQseqmtLZGcdL2WiF1TxoRs0RvP8jLMaG lBrONd2o2WNA5hs/EFUxrOGmkA+CjuD2pAuMIsj4= 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 5.12 037/700] Input: joydev - prevent use of not validated data in JSIOCSBTNMAP ioctl Date: Mon, 12 Jul 2021 08:02:00 +0200 Message-Id: <20210712060929.863410542@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060924.797321836@linuxfoundation.org> References: <20210712060924.797321836@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 @@ -499,7 +499,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);