Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp823482img; Mon, 18 Mar 2019 15:19:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqxGgWYSeHvXnXyc6Yx9+myPdfXXrzETrGjsCjPTYqiLWs+6WM1FNyv3dwDcsOjfe9anl7p5 X-Received: by 2002:a17:902:e50b:: with SMTP id ck11mr22568007plb.25.1552947564566; Mon, 18 Mar 2019 15:19:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552947564; cv=none; d=google.com; s=arc-20160816; b=fUKinsRkhF5BiVtqvCyGxXo1niQ1/QE8rTLDICSjSIAmbERSdNarVIOSANJAIj1eq9 JvoT6oDmAqTpTUKVl3ARZ4SiPlVNkt18gui9BASpWECh9sOh80y8sdJoCJq/kMQ4qeq7 E5GwffW4X6jMXLP/qliViTitTTM+kmi0ymkKldZULApFzGr+9yqI5q3S/t3gUFNKPChf IVfSsU04xL9tN1rEWf8F+8qLvnPe3bKqKHj3YeOU27P6PO22UZRMt2mSv74ixtsNyG2Y DVCd6c2mRJN3lgc4D0XA5wW5skB9Y/sYsMSNTUFGChvsjVdHEB/gYh916evOZy2hst0o upww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:message-id:date:cc:to:from:subject; bh=xux2E7b4WvSDh7f/NtWAZ1EkoEvg3yiWrNGAYlsR0co=; b=KiDMlqceHXAtxte35bd/buKIt6bXACVent3pMAvJCYFhVa+GVOoZcS/7TUtCVU0q3H 2wOBa1HjOdyHVJ1B6++XFzkhcuihPPrlIGo64RDd514rWDe1iAf86nR0ubhttg2r7lRt ah1VbPPI+l1DgeGGR8e3aeOb64dmk7/JNjrNSVFSyhm6odlLd71rGhkliguGgfw1zdDD 5GRS8fkqVKLZIItdiY5vLUNHED8r2kxrsNyHKiCMcuuFZIHfNwiy1vCIpQezt4Od3nA2 cLGyxtNJCpYjq4ZFyME1yGBtCQTHKokHlPudst2Itk6z/p8Z5jQquQeGwPtQru/X6GcL Fg4A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i38si10983163plb.194.2019.03.18.15.19.09; Mon, 18 Mar 2019 15:19:24 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727585AbfCRWSR (ORCPT + 99 others); Mon, 18 Mar 2019 18:18:17 -0400 Received: from mga14.intel.com ([192.55.52.115]:56523 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726973AbfCRWSR (ORCPT ); Mon, 18 Mar 2019 18:18:17 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Mar 2019 15:18:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,495,1544515200"; d="scan'208";a="215318167" Received: from tstruk-mobl1.jf.intel.com ([10.7.196.61]) by orsmga001.jf.intel.com with ESMTP; 18 Mar 2019 15:18:16 -0700 Subject: [PATCH] tpm: fix a race between poll and write in tpm-dev-common From: Tadeusz Struk To: jarkko.sakkinen@linux.intel.com Cc: grawity@gmail.com, James.Bottomley@HansenPartnership.com, linux-integrity@vger.kernel.org, linux-kernel@vger.kernel.org, tadeusz.struk@intel.com Date: Mon, 18 Mar 2019 15:18:16 -0700 Message-ID: <155294749695.20367.14472779462229450620.stgit@tstruk-mobl1.jf.intel.com> User-Agent: StGit/unknown-version MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since the poll returns EPOLLIN base on the state of two variables, the response_read being false and the response_length > 0 the poll needs to take the buffer_mutex after it is woken up. Fixes: 9488585b21bef0df12 ("tpm: add support for partial reads") Reported-by: Mantas Mikulėnas Signed-off-by: Tadeusz Struk --- drivers/char/tpm/tpm-dev-common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c index 5eecad233ea1..61e458d6f652 100644 --- a/drivers/char/tpm/tpm-dev-common.c +++ b/drivers/char/tpm/tpm-dev-common.c @@ -203,12 +203,14 @@ __poll_t tpm_common_poll(struct file *file, poll_table *wait) __poll_t mask = 0; poll_wait(file, &priv->async_wait, wait); + mutex_lock(&priv->buffer_mutex); if (!priv->response_read || priv->response_length) mask = EPOLLIN | EPOLLRDNORM; else mask = EPOLLOUT | EPOLLWRNORM; + mutex_unlock(&priv->buffer_mutex); return mask; }