* [PATCH] staging: gpib: avoid unintended sign extension
@ 2024-10-17 19:54 Kees Bakker
2024-10-19 8:03 ` Greg KH
0 siblings, 1 reply; 7+ messages in thread
From: Kees Bakker @ 2024-10-17 19:54 UTC (permalink / raw)
To: Dave Penkler; +Cc: Linux Staging
The code was basically like this (assuming size_t can be u64)
var_u64 |= var_u8 << 24
var_u8 is first promoted to i32 and then the shift is done. Next, it is
promoted to u64 by first signextending to 64 bits. This is very unlikely
what was intended. So now it is first forced to u32.
var_u64 |= (u32)var_u8 << 24
This was detected by Coverity, CID 1600792.
Fixes: 4c41fe886a56 ("staging: gpib: Add Agilent/Keysight 82357x USB GPIB driver")
Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
---
drivers/staging/gpib/agilent_82357a/agilent_82357a.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
index bbc7e8866872..f3a1b81be22d 100644
--- a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
+++ b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
@@ -679,10 +679,10 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer
kfree(status_data);
return -EIO;
}
- *bytes_written = status_data[2];
- *bytes_written |= status_data[3] << 8;
- *bytes_written |= status_data[4] << 16;
- *bytes_written |= status_data[5] << 24;
+ *bytes_written = (u32)status_data[2];
+ *bytes_written |= (u32)status_data[3] << 8;
+ *bytes_written |= (u32)status_data[4] << 16;
+ *bytes_written |= (u32)status_data[5] << 24;
kfree(status_data);
//printk("%s: write completed, bytes_written=%i\n", __func__, (int)*bytes_written);
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] staging: gpib: avoid unintended sign extension
@ 2024-10-17 19:54 Kees Bakker
2024-10-17 20:51 ` Dan Carpenter
0 siblings, 1 reply; 7+ messages in thread
From: Kees Bakker @ 2024-10-17 19:54 UTC (permalink / raw)
To: Dave Penkler; +Cc: Linux Staging
The code was basically like this (assuming size_t can be u64)
var_u64 |= var_u8 << 24
var_u8 is first promoted to i32 and then the shift is done. Next, it is
promoted to u64 by first signextending to 64 bits. This is very unlikely
what was intended. So now it is first forced to u32.
var_u64 |= (u32)var_u8 << 24
Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
---
drivers/staging/gpib/agilent_82357a/agilent_82357a.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
index bbc7e8866872..f3a1b81be22d 100644
--- a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
+++ b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
@@ -679,10 +679,10 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer
kfree(status_data);
return -EIO;
}
- *bytes_written = status_data[2];
- *bytes_written |= status_data[3] << 8;
- *bytes_written |= status_data[4] << 16;
- *bytes_written |= status_data[5] << 24;
+ *bytes_written = (u32)status_data[2];
+ *bytes_written |= (u32)status_data[3] << 8;
+ *bytes_written |= (u32)status_data[4] << 16;
+ *bytes_written |= (u32)status_data[5] << 24;
kfree(status_data);
//printk("%s: write completed, bytes_written=%i\n", __func__, (int)*bytes_written);
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] staging: gpib: avoid unintended sign extension
@ 2024-10-17 19:54 Kees Bakker
2024-11-03 23:46 ` Greg KH
0 siblings, 1 reply; 7+ messages in thread
From: Kees Bakker @ 2024-10-17 19:54 UTC (permalink / raw)
To: Dave Penkler; +Cc: Linux Staging
The code was basically like this (assuming size_t can be u64)
var_u64 |= var_u8 << 24
var_u8 is first promoted to i32 and then the shift is done. Next, it is
promoted to u64 by first signextending to 64 bits. This is very unlikely
what was intended. So now it is first forced to u32.
var_u64 |= (u32)var_u8 << 24
This was detected by Coverity, CID 1600792.
Fixes: 4c41fe886a56 ("staging: gpib: Add Agilent/Keysight 82357x USB GPIB driver")
Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
---
V1 -> V2: Changed commit message, added Fixes: tag and a reference to the Coverity CID
drivers/staging/gpib/agilent_82357a/agilent_82357a.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
index bbc7e8866872..f3a1b81be22d 100644
--- a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
+++ b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c
@@ -679,10 +679,10 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer
kfree(status_data);
return -EIO;
}
- *bytes_written = status_data[2];
- *bytes_written |= status_data[3] << 8;
- *bytes_written |= status_data[4] << 16;
- *bytes_written |= status_data[5] << 24;
+ *bytes_written = (u32)status_data[2];
+ *bytes_written |= (u32)status_data[3] << 8;
+ *bytes_written |= (u32)status_data[4] << 16;
+ *bytes_written |= (u32)status_data[5] << 24;
kfree(status_data);
//printk("%s: write completed, bytes_written=%i\n", __func__, (int)*bytes_written);
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] staging: gpib: avoid unintended sign extension
2024-10-17 19:54 Kees Bakker
@ 2024-10-17 20:51 ` Dan Carpenter
2024-10-17 21:34 ` Gustavo A. R. Silva
0 siblings, 1 reply; 7+ messages in thread
From: Dan Carpenter @ 2024-10-17 20:51 UTC (permalink / raw)
To: Kees Bakker; +Cc: Dave Penkler, Linux Staging
On Thu, Oct 17, 2024 at 09:54:47PM +0200, Kees Bakker wrote:
> The code was basically like this (assuming size_t can be u64)
> var_u64 |= var_u8 << 24
> var_u8 is first promoted to i32 and then the shift is done. Next, it is
> promoted to u64 by first signextending to 64 bits. This is very unlikely
> what was intended. So now it is first forced to u32.
> var_u64 |= (u32)var_u8 << 24
>
> Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
Very good. I'm trying to figure out the impact of this bug. We'd have to write
more than INT_MAX bytes to hit this. And I think we're pretty screwed either
way if we manage to do that... Still, it probably deserves a Fixes tag. Could
you add a Fixes tag and resend?
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
regards,
dan carpenter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] staging: gpib: avoid unintended sign extension
2024-10-17 20:51 ` Dan Carpenter
@ 2024-10-17 21:34 ` Gustavo A. R. Silva
0 siblings, 0 replies; 7+ messages in thread
From: Gustavo A. R. Silva @ 2024-10-17 21:34 UTC (permalink / raw)
To: Kees Bakker; +Cc: Dave Penkler, Linux Staging, Dan Carpenter
On 17/10/24 14:51, Dan Carpenter wrote:
> On Thu, Oct 17, 2024 at 09:54:47PM +0200, Kees Bakker wrote:
>> The code was basically like this (assuming size_t can be u64)
>> var_u64 |= var_u8 << 24
>> var_u8 is first promoted to i32 and then the shift is done. Next, it is
>> promoted to u64 by first signextending to 64 bits. This is very unlikely
>> what was intended. So now it is first forced to u32.
>> var_u64 |= (u32)var_u8 << 24
>>
>> Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
>
> Very good. I'm trying to figure out the impact of this bug. We'd have to write
> more than INT_MAX bytes to hit this. And I think we're pretty screwed either
> way if we manage to do that... Still, it probably deserves a Fixes tag. Could
> you add a Fixes tag and resend?
Plus, if this was "caught by Coverity", don't forget to briefly mention that in
the changelog text.
Thanks
--
Gustavo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] staging: gpib: avoid unintended sign extension
2024-10-17 19:54 [PATCH] staging: gpib: avoid unintended sign extension Kees Bakker
@ 2024-10-19 8:03 ` Greg KH
0 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2024-10-19 8:03 UTC (permalink / raw)
To: Kees Bakker; +Cc: Dave Penkler, Linux Staging
On Thu, Oct 17, 2024 at 09:54:47PM +0200, Kees Bakker wrote:
> The code was basically like this (assuming size_t can be u64)
> var_u64 |= var_u8 << 24
> var_u8 is first promoted to i32 and then the shift is done. Next, it is
> promoted to u64 by first signextending to 64 bits. This is very unlikely
> what was intended. So now it is first forced to u32.
> var_u64 |= (u32)var_u8 << 24
>
> This was detected by Coverity, CID 1600792.
>
> Fixes: 4c41fe886a56 ("staging: gpib: Add Agilent/Keysight 82357x USB GPIB driver")
> Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
> ---
> drivers/staging/gpib/agilent_82357a/agilent_82357a.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
Hi,
This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him
a patch that has triggered this response. He used to manually respond
to these common problems, but in order to save his sanity (he kept
writing the same thing over and over, yet to different people), I was
created. Hopefully you will not take offence and will fix the problem
in your patch and resubmit it so that it can be accepted into the Linux
kernel tree.
You are receiving this message because of the following common error(s)
as indicated below:
- This looks like a new version of a previously submitted patch, but you
did not list below the --- line any changes from the previous version.
Please read the section entitled "The canonical patch format" in the
kernel file, Documentation/process/submitting-patches.rst for what
needs to be done here to properly describe this.
If you wish to discuss this problem further, or you have questions about
how to resolve this issue, please feel free to respond to this email and
Greg will reply once he has dug out from the pending patches received
from other developers.
thanks,
greg k-h's patch email bot
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] staging: gpib: avoid unintended sign extension
2024-10-17 19:54 Kees Bakker
@ 2024-11-03 23:46 ` Greg KH
0 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2024-11-03 23:46 UTC (permalink / raw)
To: Kees Bakker; +Cc: Dave Penkler, Linux Staging
On Thu, Oct 17, 2024 at 09:54:47PM +0200, Kees Bakker wrote:
> The code was basically like this (assuming size_t can be u64)
> var_u64 |= var_u8 << 24
> var_u8 is first promoted to i32 and then the shift is done. Next, it is
> promoted to u64 by first signextending to 64 bits. This is very unlikely
> what was intended. So now it is first forced to u32.
> var_u64 |= (u32)var_u8 << 24
>
> This was detected by Coverity, CID 1600792.
>
> Fixes: 4c41fe886a56 ("staging: gpib: Add Agilent/Keysight 82357x USB GPIB driver")
> Signed-off-by: Kees Bakker <kees@ijzerbout.nl>
> ---
> V1 -> V2: Changed commit message, added Fixes: tag and a reference to the Coverity CID
Again, no "v2" in the subject line :(
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-11-04 5:46 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-17 19:54 [PATCH] staging: gpib: avoid unintended sign extension Kees Bakker
2024-10-19 8:03 ` Greg KH
-- strict thread matches above, loose matches on Subject: below --
2024-10-17 19:54 Kees Bakker
2024-11-03 23:46 ` Greg KH
2024-10-17 19:54 Kees Bakker
2024-10-17 20:51 ` Dan Carpenter
2024-10-17 21:34 ` Gustavo A. R. Silva
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).