On Wed, Mar 27, 2019 at 11:32:38AM -0700, Tadeusz Struk wrote:
The poll condition should only check response_length, because reads should only be issued if there is data to read. The response_read flag only prevents double writes. The problem was that the write set the response_read to false, enqued a tpm job, and returned. Then application called poll which checked the response_read flag and returned EPOLLIN. Then the application called read, but got nothing. After all that the async_work kicked in. Added also mutex_lock around the poll check to prevent other possible race conditions.
Cc: stable@vger.kernel.org Fixes: 9488585b21bef0df12 ("tpm: add support for partial reads") Reported-by: Mantas Mikulėnas grawity@gmail.com Tested-by: Mantas Mikulėnas grawity@gmail.com Signed-off-by: Tadeusz Struk tadeusz.struk@intel.com
Reviewed-by: Jarkko Sakkinen jarkko.sakkinen@linux.intel.com
Thank you, it is applied.
/Jarkko