Received: by 2002:ab2:1149:0:b0:1f3:1f8c:d0c6 with SMTP id z9csp2109663lqz; Tue, 2 Apr 2024 07:31:38 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUStwveOH0WZr0e8pvsNG3nkN9kzd97WHFu+2bxLi7pEheY5DOQG+1CIk0uRvctHaZSE9ig/Trpqo7gPIt0pR99AxKAoWsPDqa5hxOAnQ== X-Google-Smtp-Source: AGHT+IE1H6GIwrgQrIE5fNNtb7/qA73EsC96vv5+Y/KT4Ed/5vsNNu+pQASydYM/3ezp6lTlEx2K X-Received: by 2002:a05:6a21:9996:b0:1a3:a637:9753 with SMTP id ve22-20020a056a21999600b001a3a6379753mr14935550pzb.12.1712068297679; Tue, 02 Apr 2024 07:31:37 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712068297; cv=pass; d=google.com; s=arc-20160816; b=Hr6U2pi5RWlAzhRPkE8BiC9hX0nSPldooNw8qUErUKJe1I+9tZPyQdSWSvSefhu2LR rlEZygbIAkkqJafC5AYVDuc4ogeCKkzoSlR32NA/KmOG8MFE7SR4pwXc4xdOGOPjsYl4 YweTZNgP8p2THLblMg22yRiMtGf2WrfN1HJigb4mLnAVr6iHImt88iNSAiAwQtW8GIEU RKEMRjDYB4vJiWAQLRxfc+s5qyikJGZZe5Qryf2V5SITxul12UrFXnYc2go6474egFPJ VdopTWuy8oygI9rZVAoSLTlaa9YY9uVlTzGNU+W+yVgCK5a5DrItwG88N5Sut//m1d7C ku0Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=ui-outboundreport:content-transfer-encoding:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=aIeeKP7p962Be1K+3JAM/oYmuMrr0yig8x+lgmqinJs=; fh=q8CNQlIWaLWM903pI1VEFrPity1AFsadI/8nCr4mmIA=; b=oZ4U2iyD7XG/YuxeFVe0xSnTERcd7bthCQyTRx9ySJkIpmeEqU/PLnHCzCz+QPkiR9 jzSfpm1UTSTy14ua0ecPloJ5SOdzvlwDALWCnq1Y+Wy0IB4MLMz6PaFjmLXkg3yv49Q9 4ZQ8NRSUx9l6/AO500sZy0IGLahLFP5dA7RBTzd+L432Sjv5cpc6KH989S8URYjPKuSK ySfcc/Vi0B8b85Sgn1bqdFyURGnDAZGRWa9avayp87k2ITrQiPETIsvUC9aXevzbJaM2 +eht9xhfb0lAbiuSlVTF1DaohyBHNILWUiBQ8NB/t3pqZ3Elhtp1YTlgtAx+ZsKPWYnA GAYw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmx.de header.s=s31663417 header.b=MnEd0QNR; arc=pass (i=1 spf=pass spfdomain=gmx.de dkim=pass dkdomain=gmx.de dmarc=pass fromdomain=gmx.de); spf=pass (google.com: domain of linux-kernel+bounces-128135-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-128135-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=gmx.de Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id p14-20020a63740e000000b005dbd0d798a7si10974652pgc.558.2024.04.02.07.31.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Apr 2024 07:31:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-128135-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmx.de header.s=s31663417 header.b=MnEd0QNR; arc=pass (i=1 spf=pass spfdomain=gmx.de dkim=pass dkdomain=gmx.de dmarc=pass fromdomain=gmx.de); spf=pass (google.com: domain of linux-kernel+bounces-128135-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-128135-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=gmx.de Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 529BB283459 for ; Tue, 2 Apr 2024 14:31:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EB70412BF21; Tue, 2 Apr 2024 14:31:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="MnEd0QNR" Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78CC317BCB; Tue, 2 Apr 2024 14:31:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712068279; cv=none; b=qgFK8cGcD1bvzhifDT8bH5OzCNw191dDPJcoo7mkiW2ldNN58Ao298HSpHZtu3bKrRYs9Ld5gxOuW0TZbaVfCrzyV9ZxXeUpKgsLoZPLuF1V/ciyg16cZ9spyWpiDdydI25xwLtwHnTJP8n/ASEJbrQ1EGsvLwfqY0pNGbFhRAM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712068279; c=relaxed/simple; bh=GSGeeyds/g8pICmZBmqRu+evqxKRetteZ+3dXQU2ru0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=iqf9roll+jSRegPsF5o1mADCX4VAlH2RG5/BeqVTd6MVYZV4swAQ4GZ/S5k850DgS08dIyIIxpstAewH94JV9kPfMtv/WaJIpQ72R/yes34z446fV2KpooQLswMUdJnnhzQug+yRGPCyU31RxXRXzsMnPVhrpXQJS37DInQSmhM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=MnEd0QNR; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1712068266; x=1712673066; i=w_armin@gmx.de; bh=aIeeKP7p962Be1K+3JAM/oYmuMrr0yig8x+lgmqinJs=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=MnEd0QNRZ/jC43RNAdpp81FXUKA9tvAPlyOTkFTcyRVtmSB/HHGowpKtCANGG49T +S0JAndgpP1vaUcUPse56hDi3fUqn+Fk8OGEWV3kcGDjTcP3De/ROeoXuNjrXSITk q0hvdyO+u13vJRHzx/Y1d18t+q/GBx/qJG4LBKHEa/wIm70x3CZufHlODiu4gHiYu TTug8r70SmHhdKv2SIPVCz51jw7bxKjvBzECBFOAxRDQTi01CCFppfZq+Mz/p3GXw PU7SpmqxNW+iCfMc+sI0L2OYDrSBMeP2xDe+rWGh1mVw/eskNO4pkRJHXQbkm18AK r48sqK43ofEL/hIpWA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N1wpt-1spaGh0bt3-012Gxo; Tue, 02 Apr 2024 16:31:06 +0200 From: Armin Wolf To: hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com Cc: corbet@lwn.net, sathyanarayanan.kuppuswamy@linux.intel.com, linux-doc@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/4] platform/x86: xiaomi-wmi: Fix race condition when reporting key events Date: Tue, 2 Apr 2024 16:30:57 +0200 Message-Id: <20240402143059.8456-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240402143059.8456-1-W_Armin@gmx.de> References: <20240402143059.8456-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:1MSHdp3U2yQqRtyM8+jE62IQ5HIy4KO3F3v21vPfr3suJPsyNdL oiyilsLxzYlWgFVbK/QrZFghS7d/BOrgbNuDqdaqgWhgQT8EOjVmo/8HgY1tGv0KLvGsclU RJOT5B1n7/VNueNCk4AEvxkB2hILtWJc8Z2IbCfveRjGE9A9ElE4DScDMCk6/gzp6d4R59i doChLL9cM+lOx6+BCuTVQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:hpZs6+gCIQk=;8nlTLCcB2sSRRih+kLDgq4cZ4Oq uy8cBbYWawg1CvQ57K+AvqtklCmXMOF67pk56vycDvH66m3Uzyit2xG9KXFcMksd+7BWtgSGX ujfjl5fbCQBNasj4PDQssiu4Qi/U6LdNEeFlAJ9POJLIiOmw2nQ9x7zY2uBgxWcX/MIRWKAug +bbO5degTI6eG1EmGQa83AxTZZ433e3PPfQ1BgzbdsEW14VZ5Q8XyF7k5T27q+WjoBXXKiOF+ 1aEGb9RTLpMf3lgDoklPwX0qjFDzVkeuE1Y1bgi4QZvc5s8AuCxX0IYQI1EiZeGIYyojWNRVv Qz3tBmu6VcWONaclHQfGj8U4Sp3grYzANE3Iw7nukl95mk+HwhOyysTGawtPD4t3mpsmjoj4P JKOfhiGPCbZOATdaG0tdVbUi//jEcDer87bXfEYptsYutQc0UgJ5HDaVseVn734hYHmsh/sIv GbAq4xHrfzKQ7+OHXRdFQ2DheqRkY0WBqgFP+JBxCvSVk9K3Dbe/VX4GDYtXuPBC4JgWvM5Hw sGEM/Dmy7pr+KbnihSIQuXpbiv+Pp4ALZgydNiwyeF61oS7nLloeKIW2zmnaMCmPtswE12f7g mL0PPyw8tj5SYJ8k90zbk945QZIjVMeKrU9li0r4WsOSbvLwdwtjD8o4qke5/sKPQTifVC15V PKZnMl1CQf+ghYXLSiB/gj2vceWjDaXnwY7Vz4cXpvO3312R3DD6OHRZnfiC78U3sHsDU57kD kB+e/0VfcYHmni9atkhO/vKPAkfGiEMt7KvncBWqzQu6Wu0TnIugYlvcIn1e3Mm5BdroEQhVU A7Piz1Y2EaePquVBBN3JRF+em0OLeFkbOvZKGJ6zBMw3M= Multiple WMI events can be received concurrently, so multiple instances of xiaomi_wmi_notify() can be active at the same time. Since the input device is shared between those handlers, the key input sequence can be disturbed. Fix this by protecting the key input sequence with a mutex. Compile-tested only. Fixes: edb73f4f0247 ("platform/x86: wmi: add Xiaomi WMI key driver") Signed-off-by: Armin Wolf =2D-- drivers/platform/x86/xiaomi-wmi.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/platform/x86/xiaomi-wmi.c b/drivers/platform/x86/xiao= mi-wmi.c index 1f5f108d87c0..7efbdc111803 100644 =2D-- a/drivers/platform/x86/xiaomi-wmi.c +++ b/drivers/platform/x86/xiaomi-wmi.c @@ -2,8 +2,10 @@ /* WMI driver for Xiaomi Laptops */ #include +#include #include #include +#include #include #include @@ -20,12 +22,21 @@ struct xiaomi_wmi { struct input_dev *input_dev; + struct mutex key_lock; /* Protects the key event sequence */ unsigned int key_code; }; +static void xiaomi_mutex_destroy(void *data) +{ + struct mutex *lock =3D data; + + mutex_destroy(lock); +} + static int xiaomi_wmi_probe(struct wmi_device *wdev, const void *context) { struct xiaomi_wmi *data; + int ret; if (wdev =3D=3D NULL || context =3D=3D NULL) return -EINVAL; @@ -35,6 +46,11 @@ static int xiaomi_wmi_probe(struct wmi_device *wdev, co= nst void *context) return -ENOMEM; dev_set_drvdata(&wdev->dev, data); + mutex_init(&data->key_lock); + ret =3D devm_add_action_or_reset(&wdev->dev, xiaomi_mutex_destroy, &data= ->key_lock); + if (ret < 0) + return ret; + data->input_dev =3D devm_input_allocate_device(&wdev->dev); if (data->input_dev =3D=3D NULL) return -ENOMEM; @@ -59,10 +75,12 @@ static void xiaomi_wmi_notify(struct wmi_device *wdev,= union acpi_object *dummy) if (data =3D=3D NULL) return; + mutex_lock(&data->key_lock); input_report_key(data->input_dev, data->key_code, 1); input_sync(data->input_dev); input_report_key(data->input_dev, data->key_code, 0); input_sync(data->input_dev); + mutex_unlock(&data->key_lock); } static const struct wmi_device_id xiaomi_wmi_id_table[] =3D { =2D- 2.39.2