On 2021/5/10 16:41, Daniel P. Berrangé wrote: > On Mon, May 10, 2021 at 12:30:45PM +0800, Li Zhijian wrote: >> Image below user cases: >> case 1: >> ``` >> $ qemu-img create -f raw source.raw 1G >> $ qemu-img create -f qcow2 -F raw -b source.raw ./source.raw >> qemu-img info source.raw >> image: source.raw >> file format: qcow2 >> virtual size: 193K (197120 bytes) >> disk size: 196K >> cluster_size: 65536 >> backing file: source.raw <<<<<< >> backing file format: raw >> Format specific information: >> compat: 1.1 >> lazy refcounts: false >> refcount bits: 16 >> corrupt: false >> ``` >> >> case 2: >> ``` >> $ qemu-img create -f raw source.raw 1G >> $ ln -sf source.raw destination.qcow2 >> $ qemu-img create -f qcow2 -F raw -b source.raw ./destination.qcow2 >> qemu-img info source.raw >> image: source.raw >> file format: qcow2 <<<<<< >> virtual size: 2.0G (2147483648 bytes) >> disk size: 196K >> cluster_size: 65536 >> backing file: source.raw >> backing file format: raw >> Format specific information: >> compat: 1.1 >> lazy refcounts: false >> refcount bits: 16 >> corrupt: false >> ``` >> Generally, we don't expect to corrupte the source.raw anyway, while >> actually it does. >> >> Here we validate the realpath of file instead the input string. > That still won't handle the case where you use hard links > > $ ln source.raw destination.qcow2 > > To properly validate the scenarios I think it is neccessary > to ignore the filename sentirely. > > Instead attempt to open both files, and if successful, fstat() > them both, and then compare the st_dev + st_ino fields.
Sounds great, i will update it. Thanks Zhijian