libxc: Have xc_translate_foreign_address() set errno properly
authorRazvan Cojocaru <rcojocaru@bitdefender.com>
Thu, 3 Mar 2016 13:58:00 +0000 (15:58 +0200)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Wed, 16 Mar 2016 08:58:39 +0000 (04:58 -0400)
Currently it's possible for xc_translate_foreign_address() to fail
and errno still be set to success. This patch fixes the issue.
Based on the first half of Don Slutz' patch:
http://lists.xen.org/archives/html/xen-devel/2014-03/msg03720.html

Signed-off-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
tools/libxc/xc_pagetab.c

index ec978904da128e1e0e337a2e8e1aefd166e23b44..92eebd6882ae09c4b1a14b226bd3cdb4d9ffa8b4 100644 (file)
@@ -88,8 +88,10 @@ unsigned long xc_translate_foreign_address(xc_interface *xch, uint32_t dom,
             return 0;
         memcpy(&pte, map + (paddr & (PAGE_SIZE - 1)), size);
         munmap(map, PAGE_SIZE);
-        if (!(pte & 1)) 
+        if (!(pte & 1)) {
+            errno = EADDRNOTAVAIL;
             return 0;
+        }
         paddr = pte & 0x000ffffffffff000ull;
         if (level == 2 && (pte & PTE_PSE)) {
             mask = ((mask ^ ~-mask) >> 1); /* All bits below first set bit */