Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3754696pxv; Mon, 19 Jul 2021 08:01:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8G3QyIaXIrTy0KhfWQZaTMgUdJfUkJFGHuE0sfWuKMvuNlLbjuM4xYTJwvmAVmNg1pHlI X-Received: by 2002:a5d:67cc:: with SMTP id n12mr30362790wrw.131.1626706919101; Mon, 19 Jul 2021 08:01:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626706919; cv=none; d=google.com; s=arc-20160816; b=ZYA7HILywOpw+6bRIkQmOk84rLe/Kn4ed077F+tDVK9heSeCmray1d1x23yYqDXU8f 9t627GE10TX5Pa7z1RzBINrKgRiP8Z57j3GpXwizCGia1oPK2H4io9NWMl8R/0znE54i e/jk2jAiXLLF6QXDJiWAfiB9VS7aVAra/N2nVVPlqkpx5BEMq15B5hQ6+eJT2pwmjHWm aSe8k0LQAEzwTK2ZKY87eBCL5pArmLr2gSq6WpEc5mL5pP/AYuxq6WZxO2eK7UI+hNzC 6RRsWJyegXG7pViNwGtC3ANHyzBhO8lwHUyEiI4M2919QZu1NAj3bm/nWNTUeCY3oofP +XkA== 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=YTA//P44E/4t+ivb6w0NLdEmC32eGmcI6mfEbvIm5Cgjd5Q94pW3cH12F1LwvNxNQQ 5rsX4tmqyzYW7T3CDgL/w979mfX0vrVO5Ehf1EH5UizDYkUefAUr2PJNrSC5QDOEJrTf tXCMfCGRGrl5Mw7tRNf3x5CMYH6QWMAb7tUMnaRZej1CCs0Il4VoB3suvY0xfLYp5uyb lHr4ZQkkyTeCYrzCPhZxHNIGH4E7JHP9BQe6QJjk2ZusPqOPPAyNxdYnB8hxnboiF/SZ RUi0gDCQ01Z3H3Tvb+wgiuLMg9USXDRd4Gnvatv8qxikvCU6VVXHpzXFCg9B/+TJ+mi7 PLcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JfiGPv17; 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 q5si23016999edh.490.2021.07.19.08.01.32; Mon, 19 Jul 2021 08:01:59 -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=JfiGPv17; 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 S241878AbhGSOR2 (ORCPT + 99 others); Mon, 19 Jul 2021 10:17:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:50308 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241505AbhGSORA (ORCPT ); Mon, 19 Jul 2021 10:17:00 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 58D8661002; Mon, 19 Jul 2021 14:57:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626706659; bh=+AwoeEsZVqWrlHWrUGR9wr/ZOhlF+XMSvDq5xSbqZoM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JfiGPv17V9/fk173MH3lWbmppI1aJQ7RLAKD21jpL5fx7UfsbPXKwAqE7a6+AYP1R b2J4koosoCDCSCCGSJS5OL9UtcJ4ewLU5GPRtH6EjdK1dGA86twpgEDqMTQ29JKkSG 91J84m5nboP7qa7AP3uOFnOaiFRWNcGnaqqz/7pU= 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.4 009/188] Input: joydev - prevent use of not validated data in JSIOCSBTNMAP ioctl Date: Mon, 19 Jul 2021 16:49:53 +0200 Message-Id: <20210719144915.247882159@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144913.076563739@linuxfoundation.org> References: <20210719144913.076563739@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);