]> xenbits.xensource.com Git - xen.git/commitdiff
xen/hypfs: check the return value of snprintf to avoid leaking stack accidently
authorXenia Ragiadakou <burzalodowa@gmail.com>
Fri, 5 Aug 2022 06:38:23 +0000 (08:38 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 5 Aug 2022 06:38:23 +0000 (08:38 +0200)
The function snprintf() returns the number of characters that would have been
written in the buffer if the buffer size had been sufficiently large,
not counting the terminating null character.
Hence, the value returned is not guaranteed to be smaller than the buffer size.
Check the return value of snprintf() to prevent leaking stack contents to the
guest by accident.

Also, for debug builds, add an assertion to ensure that the assumption made on
the size of the destination buffer still holds.

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
xen/common/hypfs.c

index acd258edf20dd805ae6056c832b818077be744c9..cdf4ee01717cb5494939f8fa0ba0060b3ac169b5 100644 (file)
@@ -377,6 +377,11 @@ int hypfs_read_dyndir_id_entry(const struct hypfs_entry_dir *template,
     unsigned int e_namelen, e_len;
 
     e_namelen = snprintf(name, sizeof(name), template->e.name, id);
+    if ( e_namelen >= sizeof(name) )
+    {
+        ASSERT_UNREACHABLE();
+        return -ENOBUFS;
+    }
     e_len = DIRENTRY_SIZE(e_namelen);
     direntry.e.pad = 0;
     direntry.e.type = template->e.type;