I just checked the test environment.
[root@63beta-kvm libvirt]# getenforce
Permissive
I run the test as root, and selinux in permissive mode.
And the path test.tmpdir is 
.../client/tmp/tmp/tmpVGHhjC_virt.libvirt.virtio_blk.smp2.virtio_net.Fedora.17.x86_64.virsh_update_device.normal_test.name_option/
"VGHhjC" in the path is created automatically by autotest.

But....when I do the test manually, it worked.The step is:
1.Start guest
# virsh start virt-tests-vm1
Domain virt-tests-vm1 started

2.Make the temp directory.
# mkdir -p /add_storage/liyang/autotest_update_device_v3/client/tmp/tmp/tmpVGHhjC_virt.libvirt.virtio_blk.smp2.virtio_net.Fedora.17.x86_64.virsh_update_device.normal_test.name_option/

3.Create a iso file.
# dd if=/dev/zero of=/add_storage/liyang/autotest_update_device_v3/client/tmp/tmp/tmpVGHhjC_virt.libvirt.virtio_blk.smp2.virtio_net.Fedora.17.x86_64.virsh_update_device.normal_test.name_option/tmp.iso bs=1M count=1

4.Creat a xml file.
# vim /add_storage/liyang/autotest_update_device_v3/client/tmp/tmp/tmpVGHhjC_virt.libvirt.virtio_blk.smp2.virtio_net.Fedora.17.x86_64.virsh_update_device.normal_test.name_option/xml_file
<disk device='cdrom' type='file'>
<driver name='file'/>
<source file='/add_storage/liyang/autotest_update_device_v3/client/tmp/tmp/tmpVGHhjC_virt.libvirt.virtio_blk.smp2.virtio_net.Fedora.17.x86_64.virsh_update_device.normal_test.name_option/tmp.iso'/>
<target bus='ide' dev='hdc'/>
<readonly/>
</disk>

5.Perform virsh update-device operation
[root@63beta-kvm libvirt]# virsh update-device virt-tests-vm1 /add_storage/liyang/autotest_update_device_v3/client/tmp/tmp/tmpVGHhjC_virt.libvirt.virtio_blk.smp2.virtio_net.Fedora.17.x86_64.virsh_update_device.normal_test.name_option/xml_file
Device updated successfully