All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] pktcdvd: Fix possible Spectre-v1 for pkt_devs
@ 2018-07-28  2:30 Jinbum Park
  2018-07-28  2:47 ` Gustavo A. R. Silva
  0 siblings, 1 reply; 3+ messages in thread
From: Jinbum Park @ 2018-07-28  2:30 UTC (permalink / raw)
  To: axboe, bart.vanassche, jiufei.xue; +Cc: linux-block, linux-kernel, gustavo

User controls @dev_minor which to be used as index of pkt_devs.
So, It can be exploited via Spectre-like attack. (speculative execution)

This kind of attack leaks address of pkt_devs, [1]
It leads an attacker to bypass security mechanism such as KASLR.

So sanitize @dev_minor before using it to prevent attack.

[1] https://github.com/jinb-park/linux-exploit/
tree/master/exploit-remaining-spectre-gadget/leak_pkt_devs.c

Signed-off-by: Jinbum Park <jinb.park7@gmail.com>
---
v2: Fix coding style by Gustavo.

 drivers/block/pktcdvd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index c61d20c..8ec2eaa 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -67,8 +67,8 @@
 #include <scsi/scsi.h>
 #include <linux/debugfs.h>
 #include <linux/device.h>
-
 #include <linux/uaccess.h>
+#include <linux/nospec.h>
 
 #define DRIVER_NAME	"pktcdvd"
 
@@ -2231,6 +2231,7 @@ static struct pktcdvd_device *pkt_find_dev_from_minor(unsigned int dev_minor)
 {
 	if (dev_minor >= MAX_WRITERS)
 		return NULL;
+	dev_minor = array_index_nospec(dev_minor, MAX_WRITERS);
 	return pkt_devs[dev_minor];
 }
 
-- 
1.9.1

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

* Re: [PATCH v2] pktcdvd: Fix possible Spectre-v1 for pkt_devs
  2018-07-28  2:30 [PATCH v2] pktcdvd: Fix possible Spectre-v1 for pkt_devs Jinbum Park
@ 2018-07-28  2:47 ` Gustavo A. R. Silva
  2018-07-28  2:56   ` Gustavo A. R. Silva
  0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2018-07-28  2:47 UTC (permalink / raw)
  To: Jinbum Park, axboe, bart.vanassche, jiufei.xue; +Cc: linux-block, linux-kernel



On 07/27/2018 09:30 PM, Jinbum Park wrote:
> User controls @dev_minor which to be used as index of pkt_devs.
> So, It can be exploited via Spectre-like attack. (speculative execution)
> 
> This kind of attack leaks address of pkt_devs, [1]
> It leads an attacker to bypass security mechanism such as KASLR.
> 
> So sanitize @dev_minor before using it to prevent attack.
> 
> [1] https://github.com/jinb-park/linux-exploit/
> tree/master/exploit-remaining-spectre-gadget/leak_pkt_devs.c
> 
> Signed-off-by: Jinbum Park <jinb.park7@gmail.com>
> ---
> v2: Fix coding style by Gustavo.
> 
>  drivers/block/pktcdvd.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
> index c61d20c..8ec2eaa 100644
> --- a/drivers/block/pktcdvd.c
> +++ b/drivers/block/pktcdvd.c
> @@ -67,8 +67,8 @@
>  #include <scsi/scsi.h>
>  #include <linux/debugfs.h>
>  #include <linux/device.h>
> -
>  #include <linux/uaccess.h>
> +#include <linux/nospec.h>
>  
>  #define DRIVER_NAME	"pktcdvd"
>  
> @@ -2231,6 +2231,7 @@ static struct pktcdvd_device *pkt_find_dev_from_minor(unsigned int dev_minor)
>  {
>  	if (dev_minor >= MAX_WRITERS)
>  		return NULL;
> +	dev_minor = array_index_nospec(dev_minor, MAX_WRITERS);

Adding a blank line here would be even better.

>  	return pkt_devs[dev_minor];
>  }
>  
> 

Acked-by: Gustavo A. R. Silva <gustavo@embeddedor.com>

Thanks
--
Gustavo

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

* Re: [PATCH v2] pktcdvd: Fix possible Spectre-v1 for pkt_devs
  2018-07-28  2:47 ` Gustavo A. R. Silva
@ 2018-07-28  2:56   ` Gustavo A. R. Silva
  0 siblings, 0 replies; 3+ messages in thread
From: Gustavo A. R. Silva @ 2018-07-28  2:56 UTC (permalink / raw)
  To: Jinbum Park, axboe, bart.vanassche, jiufei.xue; +Cc: linux-block, linux-kernel

Jinbum,

I just noticed this patch does not apply to linux-next.

Please try again, but this time work from linux-next rather than from a stable tree.

Thanks
--
Gustavo

On 07/27/2018 09:47 PM, Gustavo A. R. Silva wrote:
> 
> 
> On 07/27/2018 09:30 PM, Jinbum Park wrote:
>> User controls @dev_minor which to be used as index of pkt_devs.
>> So, It can be exploited via Spectre-like attack. (speculative execution)
>>
>> This kind of attack leaks address of pkt_devs, [1]
>> It leads an attacker to bypass security mechanism such as KASLR.
>>
>> So sanitize @dev_minor before using it to prevent attack.
>>
>> [1] https://github.com/jinb-park/linux-exploit/
>> tree/master/exploit-remaining-spectre-gadget/leak_pkt_devs.c
>>
>> Signed-off-by: Jinbum Park <jinb.park7@gmail.com>
>> ---
>> v2: Fix coding style by Gustavo.
>>
>>  drivers/block/pktcdvd.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
>> index c61d20c..8ec2eaa 100644
>> --- a/drivers/block/pktcdvd.c
>> +++ b/drivers/block/pktcdvd.c
>> @@ -67,8 +67,8 @@
>>  #include <scsi/scsi.h>
>>  #include <linux/debugfs.h>
>>  #include <linux/device.h>
>> -
>>  #include <linux/uaccess.h>
>> +#include <linux/nospec.h>
>>  
>>  #define DRIVER_NAME	"pktcdvd"
>>  
>> @@ -2231,6 +2231,7 @@ static struct pktcdvd_device *pkt_find_dev_from_minor(unsigned int dev_minor)
>>  {
>>  	if (dev_minor >= MAX_WRITERS)
>>  		return NULL;
>> +	dev_minor = array_index_nospec(dev_minor, MAX_WRITERS);
> 
> Adding a blank line here would be even better.
> 
>>  	return pkt_devs[dev_minor];
>>  }
>>  
>>
> 
> Acked-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
> 
> Thanks
> --
> Gustavo
> 

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

end of thread, other threads:[~2018-07-28  2:56 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-28  2:30 [PATCH v2] pktcdvd: Fix possible Spectre-v1 for pkt_devs Jinbum Park
2018-07-28  2:47 ` Gustavo A. R. Silva
2018-07-28  2:56   ` Gustavo A. R. Silva

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.