All of lore.kernel.org
 help / color / mirror / Atom feed
* algif_hash bug?
@ 2016-01-08 20:55 Tom Lendacky
  2016-01-09  5:42 ` Herbert Xu
  0 siblings, 1 reply; 3+ messages in thread
From: Tom Lendacky @ 2016-01-08 20:55 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Linux Crypto Mailing List

Herbert,

AF_ALG hash supports the accept() call to allow for partial hash states
to be cloned. If an accept() is issued against a socket before ever
doing a send(), crypto_ahash_init() will never have been called for the
original socket.  The hash_accept function in algif_hash will call
crypto_ahash_export() which will return an uninitialized request context
and then use that for import into the new socket. A problem arises here
because hash_accept sets the 'more' bit of the new context to 1
(ctx2->more = 1). This will cause the first send() call for the new
socket to skip calling crypto_ahash_init() which can result in an
error or oops because the request context for the cloned socket was
never initialized.

Is it assumed that the accept() call should only ever be made after
having issued at least one send()? Should the ctx2->more value be the
value from the original context so that crypto_ahash_init() is called
when needed?

Thanks,
Tom

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: algif_hash bug?
  2016-01-08 20:55 algif_hash bug? Tom Lendacky
@ 2016-01-09  5:42 ` Herbert Xu
  2016-01-09 15:50   ` Tom Lendacky
  0 siblings, 1 reply; 3+ messages in thread
From: Herbert Xu @ 2016-01-09  5:42 UTC (permalink / raw)
  To: Tom Lendacky; +Cc: Linux Crypto Mailing List

On Fri, Jan 08, 2016 at 02:55:14PM -0600, Tom Lendacky wrote:
> 
> AF_ALG hash supports the accept() call to allow for partial hash states
> to be cloned. If an accept() is issued against a socket before ever
> doing a send(), crypto_ahash_init() will never have been called for the
> original socket.  The hash_accept function in algif_hash will call
> crypto_ahash_export() which will return an uninitialized request context
> and then use that for import into the new socket. A problem arises here
> because hash_accept sets the 'more' bit of the new context to 1
> (ctx2->more = 1). This will cause the first send() call for the new
> socket to skip calling crypto_ahash_init() which can result in an
> error or oops because the request context for the cloned socket was
> never initialized.
> 
> Is it assumed that the accept() call should only ever be made after
> having issued at least one send()? Should the ctx2->more value be the
> value from the original context so that crypto_ahash_init() is called
> when needed?

I thought we've already fixed this bug with

commit 4afa5f9617927453ac04b24b584f6c718dfb4f45
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Sun Nov 1 17:11:19 2015 +0800

    crypto: algif_hash - Only export and import on sockets with data

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: algif_hash bug?
  2016-01-09  5:42 ` Herbert Xu
@ 2016-01-09 15:50   ` Tom Lendacky
  0 siblings, 0 replies; 3+ messages in thread
From: Tom Lendacky @ 2016-01-09 15:50 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Linux Crypto Mailing List

On 01/08/2016 11:42 PM, Herbert Xu wrote:
> On Fri, Jan 08, 2016 at 02:55:14PM -0600, Tom Lendacky wrote:
>>
>> AF_ALG hash supports the accept() call to allow for partial hash states
>> to be cloned. If an accept() is issued against a socket before ever
>> doing a send(), crypto_ahash_init() will never have been called for the
>> original socket.  The hash_accept function in algif_hash will call
>> crypto_ahash_export() which will return an uninitialized request context
>> and then use that for import into the new socket. A problem arises here
>> because hash_accept sets the 'more' bit of the new context to 1
>> (ctx2->more = 1). This will cause the first send() call for the new
>> socket to skip calling crypto_ahash_init() which can result in an
>> error or oops because the request context for the cloned socket was
>> never initialized.
>>
>> Is it assumed that the accept() call should only ever be made after
>> having issued at least one send()? Should the ctx2->more value be the
>> value from the original context so that crypto_ahash_init() is called
>> when needed?
> 
> I thought we've already fixed this bug with
> 
> commit 4afa5f9617927453ac04b24b584f6c718dfb4f45
> Author: Herbert Xu <herbert@gondor.apana.org.au>
> Date:   Sun Nov 1 17:11:19 2015 +0800
> 
>     crypto: algif_hash - Only export and import on sockets with data
> 

I thought I was on the latest tree but I wasn't...  sorry for the
time and trouble.

Tom

> Cheers,
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-01-09 15:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-08 20:55 algif_hash bug? Tom Lendacky
2016-01-09  5:42 ` Herbert Xu
2016-01-09 15:50   ` Tom Lendacky

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.