2016-06-22 18:30:13

by Mathias Krause

[permalink] [raw]
Subject: [PATCH] crypto: user - re-add size check for CRYPTO_MSG_GETALG

Commit 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
accidentally removed the minimum size check for CRYPTO_MSG_GETALG
netlink messages. This allows userland to send a truncated
CRYPTO_MSG_GETALG message as short as a netlink header only making
crypto_report() operate on uninitialized memory by accessing data
beyond the end of the netlink message.

Fix this be re-adding the minimum required size of CRYPTO_MSG_GETALG
messages to the crypto_msg_min[] array.

Fixes: 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
Cc: [email protected] # v4.2
Signed-off-by: Mathias Krause <[email protected]>
Cc: Steffen Klassert <[email protected]>
---
This should go on top of crypto-2.6/master.

crypto/crypto_user.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
index 43fe85f20d57..7097a3395b25 100644
--- a/crypto/crypto_user.c
+++ b/crypto/crypto_user.c
@@ -455,6 +455,7 @@ static const int crypto_msg_min[CRYPTO_NR_MSGTYPES] = {
[CRYPTO_MSG_NEWALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
[CRYPTO_MSG_DELALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
[CRYPTO_MSG_UPDATEALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
+ [CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
[CRYPTO_MSG_DELRNG - CRYPTO_MSG_BASE] = 0,
};

--
1.7.10.4


2016-06-22 19:03:27

by Stephan Müller

[permalink] [raw]
Subject: Re: [PATCH] crypto: user - re-add size check for CRYPTO_MSG_GETALG

Am Mittwoch, 22. Juni 2016, 20:29:37 schrieb Mathias Krause:

Hi Mathias,

> Commit 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
> accidentally removed the minimum size check for CRYPTO_MSG_GETALG
> netlink messages. This allows userland to send a truncated
> CRYPTO_MSG_GETALG message as short as a netlink header only making
> crypto_report() operate on uninitialized memory by accessing data
> beyond the end of the netlink message.
>
> Fix this be re-adding the minimum required size of CRYPTO_MSG_GETALG
> messages to the crypto_msg_min[] array.

I was playing with the adding of the GETALG value as you did to track down the
issue fixed with eed1e1afd8d542d9644534c1b712599b5d680007 ("crypto: user - no
parsing of CRYPTO_MSG_GETALG") in the cryptodev-2.6 tree.

It did not occur to me that it fixes another bug. Yet, with this addition, it
would be possible to revert the patch eed1e1afd8d542d9644534c1b712599b5d680007
as your patch fixes the issue too. But my fix can also stay as it does not
hurt either.

What is your take on that?

Ciao
Stephan

2016-06-22 19:43:24

by Mathias Krause

[permalink] [raw]
Subject: Re: [PATCH] crypto: user - re-add size check for CRYPTO_MSG_GETALG

On 22 June 2016 at 21:03, Stephan Mueller <[email protected]> wrote:
> Am Mittwoch, 22. Juni 2016, 20:29:37 schrieb Mathias Krause:
>
> Hi Mathias,
>
>> Commit 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
>> accidentally removed the minimum size check for CRYPTO_MSG_GETALG
>> netlink messages. This allows userland to send a truncated
>> CRYPTO_MSG_GETALG message as short as a netlink header only making
>> crypto_report() operate on uninitialized memory by accessing data
>> beyond the end of the netlink message.
>>
>> Fix this be re-adding the minimum required size of CRYPTO_MSG_GETALG
>> messages to the crypto_msg_min[] array.
>
> I was playing with the adding of the GETALG value as you did to track down the
> issue fixed with eed1e1afd8d542d9644534c1b712599b5d680007 ("crypto: user - no
> parsing of CRYPTO_MSG_GETALG") in the cryptodev-2.6 tree.

Oh, I haven't noticed this commit. :D Just looked at Linus' master and
crypto-2.6/master.

> It did not occur to me that it fixes another bug. Yet, with this addition, it
> would be possible to revert the patch eed1e1afd8d542d9644534c1b712599b5d680007
> as your patch fixes the issue too. But my fix can also stay as it does not
> hurt either.

Well, it does. Commit eed1e1afd8d542d9644534c1b712599b5d680007 is
really just a workaround for the underlying issue. It does not fix the
bug of the missing minimal size check for CRYPTO_MSG_GETALG, it just
disables any further size checks for CRYPTO_MSG_GETALG. Putting my
patch on top of yours will still not fix the issue of the missing
minimal size check as your patch explicitly excludes CRYPTO_MSG_GETALG
from any size checks. So it needs to be reverted, sorry :/

> What is your take on that?

I'd say to revert eed1e1afd8d542d9644534c1b712599b5d680007 and fix the
issue for real with my patch in crypto-2.6/master, i.e. the upcoming
v4.7. That adds back the size check so userland can't play tricks with
us.

The patch already contains the Cc to stable, so the fix will
eventually end up in the LTS kernel releases used by distros, so this
regression should be fixed in a few weeks.


Regards,
Mathias

2016-06-23 10:44:08

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] crypto: user - re-add size check for CRYPTO_MSG_GETALG

On Wed, Jun 22, 2016 at 08:29:37PM +0200, Mathias Krause wrote:
> Commit 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
> accidentally removed the minimum size check for CRYPTO_MSG_GETALG
> netlink messages. This allows userland to send a truncated
> CRYPTO_MSG_GETALG message as short as a netlink header only making
> crypto_report() operate on uninitialized memory by accessing data
> beyond the end of the netlink message.
>
> Fix this be re-adding the minimum required size of CRYPTO_MSG_GETALG
> messages to the crypto_msg_min[] array.
>
> Fixes: 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
> Cc: [email protected] # v4.2
> Signed-off-by: Mathias Krause <[email protected]>
> Cc: Steffen Klassert <[email protected]>
> ---
> This should go on top of crypto-2.6/master.

Patch applied to crypto. Thanks!
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2016-06-23 14:46:33

by Stephan Müller

[permalink] [raw]
Subject: Re: [PATCH] crypto: user - re-add size check for CRYPTO_MSG_GETALG

Am Donnerstag, 23. Juni 2016, 18:43:57 schrieb Herbert Xu:

Hi Herbert,

> On Wed, Jun 22, 2016 at 08:29:37PM +0200, Mathias Krause wrote:
> > Commit 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
> > accidentally removed the minimum size check for CRYPTO_MSG_GETALG
> > netlink messages. This allows userland to send a truncated
> > CRYPTO_MSG_GETALG message as short as a netlink header only making
> > crypto_report() operate on uninitialized memory by accessing data
> > beyond the end of the netlink message.
> >
> > Fix this be re-adding the minimum required size of CRYPTO_MSG_GETALG
> > messages to the crypto_msg_min[] array.
> >
> > Fixes: 9aa867e46565 ("crypto: user - Add CRYPTO_MSG_DELRNG")
> > Cc: [email protected] # v4.2
> > Signed-off-by: Mathias Krause <[email protected]>
> > Cc: Steffen Klassert <[email protected]>
> > ---
> > This should go on top of crypto-2.6/master.
>
> Patch applied to crypto. Thanks!

Please revert my patch eed1e1afd8d542d9644534c1b712599b5d680007 as requested
by Matthias.


Ciao
Stephan

2016-06-24 01:00:32

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] crypto: user - re-add size check for CRYPTO_MSG_GETALG

On Thu, Jun 23, 2016 at 04:46:26PM +0200, Stephan Mueller wrote:
>
> Please revert my patch eed1e1afd8d542d9644534c1b712599b5d680007 as requested
> by Matthias.

It's already done. Thanks.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt