From: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
To: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
tpmdd-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org,
Peter Huewe <peterhuewe@gmx.de>,
Marcel Selhorst <tpmdd@selhorst.net>
Subject: Re: [PATCH] tpm, tpm_crb: fix unaligned read of the command buffer address
Date: Tue, 15 Sep 2015 19:46:19 +0300 [thread overview]
Message-ID: <20150915164619.GA7164@intel.com> (raw)
In-Reply-To: <20150915163039.GA17975@obsidianresearch.com>
On Tue, Sep 15, 2015 at 10:30:39AM -0600, Jason Gunthorpe wrote:
> On Tue, Sep 15, 2015 at 01:09:56PM +0300, Jarkko Sakkinen wrote:
> > However, for MMIO address the hardware might abort the entire request
> > when trying to do a 64-bit read, which causes the CPU to fill the result
> > with 1's.
>
> Okay, yes, for iomem you can't rely on packed.
>
> packed actually can mess up iomem loads on some arches as it also
> tells the compiler things are unaligned. I'd drop the __packed since
> the new structure is naturally packed in this case. (for other cases
> be careful to add __aligned(2) to avoid unaligned accesses)
>
> However, I'm still confused, the original code did:
> memcpy_fromio(&pa, &priv->cca->cmd_pa, 8);
>
> Which might do byte reads from the iomem cmd_pa, but there should be
> no problem with an unaligned access.
>
> Is the real issue that you can't do memcpy_fromio to tpm control
> memory? That would not suprise me one bit. In which case the commit
> message should be revised.
Good question and point. Emprically it seems to be so. I guess you
have to do exactly 32-bit read for the field. I'll revise the commit
message.
> > This is not hypothetical bug. We are experiencing this on some platforms
> > and the proposed fix resolves the issue.
>
> I am confused because of the memcpy_fromio:
>
> memcpy_fromio(&pa, &priv->cca->cmd_pa, 8);
> - pa = le64_to_cpu(pa);
> +
> + pa = ((u64) le32_to_cpu(ioread32(&priv->cca->cmd_pa_high)) << 32) +
> + (u64) le32_to_cpu(ioread32(&priv->cca->cmd_pa_low));
> priv->cmd = devm_ioremap_nocache(dev, pa,
> ioread32(&priv->cca->cmd_size));
>
> The code wasn't doing a direct load from cmd_pa, so the type doesn't
> matter.
>
> BTW. Does the above even compile with that memcpy_fromio left in?
Nope :) See my own reply to the original message.
> Jason
/Jarkko
next prev parent reply other threads:[~2015-09-15 16:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-14 17:15 [PATCH] tpm, tpm_crb: fix unaligned read of the command buffer address Jarkko Sakkinen
2015-09-14 17:35 ` Jason Gunthorpe
2015-09-15 10:09 ` Jarkko Sakkinen
2015-09-15 16:30 ` Jason Gunthorpe
2015-09-15 16:46 ` Jarkko Sakkinen [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-09-29 6:02 Jarkko Sakkinen
2015-09-29 6:12 ` Peter Huewe
2015-09-29 7:16 ` Jarkko Sakkinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150915164619.GA7164@intel.com \
--to=jarkko.sakkinen@intel.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jgunthorpe@obsidianresearch.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
--cc=tpmdd-devel@lists.sourceforge.net \
--cc=tpmdd@selhorst.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.