[PATCH] pflash: Fix blk_pread_nonzeroes()

Kevin Wolf posted 1 patch 1 year ago
hw/block/block.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
[PATCH] pflash: Fix blk_pread_nonzeroes()
Posted by Kevin Wolf 1 year ago
Commit a4b15a8b introduced a new function blk_pread_nonzeroes(). Instead
of reading directly from the root node of the BlockBackend, it reads
from its 'file' child node. This can happen to mostly work for raw
images (as long as the 'raw' format driver is in use, but not actually
doing anything), but it breaks everything else.

Fix it to read from the root node instead.

Fixes: a4b15a8b9ef25b44fa92a4825312622600c1f37c
Reported-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 hw/block/block.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/hw/block/block.c b/hw/block/block.c
index af0710e477..9f52ee6e72 100644
--- a/hw/block/block.c
+++ b/hw/block/block.c
@@ -39,8 +39,7 @@ static int blk_pread_nonzeroes(BlockBackend *blk, hwaddr size, void *buf)
             return ret;
         }
         if (!(ret & BDRV_BLOCK_ZERO)) {
-            ret = bdrv_pread(bs->file, offset, bytes,
-                             (uint8_t *) buf + offset, 0);
+            ret = blk_pread(blk, offset, bytes, (uint8_t *) buf + offset, 0);
             if (ret < 0) {
                 return ret;
             }
-- 
2.39.2


Re: [PATCH] pflash: Fix blk_pread_nonzeroes()
Posted by Maciej S. Szmigiero 1 year ago
On 7.03.2023 15:02, Kevin Wolf wrote:
> Commit a4b15a8b introduced a new function blk_pread_nonzeroes(). Instead
> of reading directly from the root node of the BlockBackend, it reads
> from its 'file' child node. This can happen to mostly work for raw
> images (as long as the 'raw' format driver is in use, but not actually
> doing anything), but it breaks everything else.
> 
> Fix it to read from the root node instead.

Thanks for preparing the patch.

It seems to work fine, so:
Tested-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>

> Fixes: a4b15a8b9ef25b44fa92a4825312622600c1f37c

I think this should be:
Fixes: a4b15a8b9e ("pflash: Only read non-zero parts of backend image")

> Reported-by: Cédric Le Goater <clg@kaod.org>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---

Thanks,
Maciej


Re: [PATCH] pflash: Fix blk_pread_nonzeroes()
Posted by Cédric Le Goater 1 year ago
On 3/7/23 15:02, Kevin Wolf wrote:
> Commit a4b15a8b introduced a new function blk_pread_nonzeroes(). Instead
> of reading directly from the root node of the BlockBackend, it reads
> from its 'file' child node. This can happen to mostly work for raw
> images (as long as the 'raw' format driver is in use, but not actually
> doing anything), but it breaks everything else.
> 
> Fix it to read from the root node instead.
> 
> Fixes: a4b15a8b9ef25b44fa92a4825312622600c1f37c
> Reported-by: Cédric Le Goater <clg@kaod.org>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>

I have a couple of extra patches for 8.0. I can include this fix if no one does.

Thanks,

C.



> ---
>   hw/block/block.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/hw/block/block.c b/hw/block/block.c
> index af0710e477..9f52ee6e72 100644
> --- a/hw/block/block.c
> +++ b/hw/block/block.c
> @@ -39,8 +39,7 @@ static int blk_pread_nonzeroes(BlockBackend *blk, hwaddr size, void *buf)
>               return ret;
>           }
>           if (!(ret & BDRV_BLOCK_ZERO)) {
> -            ret = bdrv_pread(bs->file, offset, bytes,
> -                             (uint8_t *) buf + offset, 0);
> +            ret = blk_pread(blk, offset, bytes, (uint8_t *) buf + offset, 0);
>               if (ret < 0) {
>                   return ret;
>               }