On Sat, Oct 22, 2016 at 5:04 AM, Jarkko Sakkinen
<jarkko.sakki...@linux.intel.com> wrote:
> On Fri, Oct 21, 2016 at 04:01:13PM -0700, Josh Zimmerman wrote:
>> On Fri, Oct 21, 2016 at 9:13 AM, Jarkko Sakkinen
>> <jarkko.sakki...@linux.intel.com> wrote:
>> > On Thu, Oct 20, 2016 at 05:21:29PM -0700, Josh Zimmerman wrote:
>> >> If the TPM we're connecting to uses a static burst count, it will report
>> >> a burst count of zero throughout the response read. However, 
>> >> get_burstcount
>> >> assumes that a response of zero indicates that the TPM is not ready to
>> >> receive more data. In this case, it returns a negative error code, which
>> >> is passed on to tpm_tis_{write,read}_bytes as a u16, causing
>> >> them to read/write far too many bytes.
>> >>
>> >> This patch checks for negative return codes and bails out from recv_data
>> >> and tpm_tis_send_data.
>> >
>> > I guess this would need a "Fixes:" tag, wouldn't it?
>> Ah, yes. Good point.
>>
>> >  I would also add
>> >
>> > Cc: sta...@vger.kernel.org
>> Will do when I mail the updated patch.
>>
>> >> ---
>> >>  drivers/char/tpm/tpm_tis_core.c | 13 +++++++++++++
>> >>  1 file changed, 13 insertions(+)
>> >>
>> >> diff --git a/drivers/char/tpm/tpm_tis_core.c 
>> >> b/drivers/char/tpm/tpm_tis_core.c
>> >> index e3bf31b..d0301dc 100644
>> >> --- a/drivers/char/tpm/tpm_tis_core.c
>> >> +++ b/drivers/char/tpm/tpm_tis_core.c
>> >> @@ -186,6 +186,12 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, 
>> >> size_t count)
>> >>                                chip->timeout_c,
>> >>                                &priv->read_queue, true) == 0) {
>> >>               burstcnt = min_t(int, get_burstcount(chip), count - size);
>> >> +             if (burstcnt < 0) {
>> >> +                     dev_err(&chip->dev,
>> >> +                             "Unable to read burstcount in %s:%d (%s)\n",
>> >> +                             __FILE__, __LINE__, __func__);
>> >> +                     return rc;
>> >> +             }
>> >
>> > "return burstcnt;"
>> Done, thanks!
>>
>> > I guess __func__ would be enough to deduce the call site?
>> It is not; would you suggest removing it since it's redundant with
>> __LINE__ and __FILE__? Or is there some other macro you know of that
>> could be useful for determining the call site? (I had included it
>> initially for the sake of ease of log reading, but that's perhaps not
>> very compelling.)
>
> It's an internal function to tpm_tis_core.c and there are exactly
> two call sites for it. Just by printing __func__ you can determine
> where it fails.

I see; I misunderstood. I thought you were asking about the call site
of the function(s) that call recv_data and tpm_tis_send_data.

I think I'd prefer to leave the line number information in for now, in
case more calls to get_burstcount are added later in either of those
functions.

Josh

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel

Reply via email to