qemu-img rebase: Fix output image corruption
qemu-img rebase must always give clusters in the COW file priority over those in the backing file. As it failed to use number of non-allocated clusters but assumed the maximum, it was possible that allocated clusters were taken from the backing file instead, leading to a corrupted output image. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									294cc35f3d
								
							
						
					
					
						commit
						cc60e327c0
					
				@ -1136,7 +1136,7 @@ static int img_rebase(int argc, char **argv)
 | 
				
			|||||||
    if (!unsafe) {
 | 
					    if (!unsafe) {
 | 
				
			||||||
        uint64_t num_sectors;
 | 
					        uint64_t num_sectors;
 | 
				
			||||||
        uint64_t sector;
 | 
					        uint64_t sector;
 | 
				
			||||||
        int n, n1;
 | 
					        int n;
 | 
				
			||||||
        uint8_t * buf_old;
 | 
					        uint8_t * buf_old;
 | 
				
			||||||
        uint8_t * buf_new;
 | 
					        uint8_t * buf_new;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1155,8 +1155,8 @@ static int img_rebase(int argc, char **argv)
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            /* If the cluster is allocated, we don't need to take action */
 | 
					            /* If the cluster is allocated, we don't need to take action */
 | 
				
			||||||
            if (bdrv_is_allocated(bs, sector, n, &n1)) {
 | 
					            ret = bdrv_is_allocated(bs, sector, n, &n);
 | 
				
			||||||
                n = n1;
 | 
					            if (ret) {
 | 
				
			||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user