sim/ppc: initialize a memory buffer in all cases
authorAndrew Burgess <aburgess@redhat.com>
Wed, 19 Oct 2022 14:07:40 +0000 (15:07 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Mon, 24 Oct 2022 16:12:11 +0000 (17:12 +0100)
In the ppc simulator's do_fstat function, which provides the fstat
call for the simulator, if the fstat is going to fail then we
currently write an uninitialized buffer into the simulated target.

In theory, I think this is fine, we also write the error status into
the simulated target, so, given that the fstat has failed, the target
shouldn't be relying on the buffer contents.

However, writing an uninitialized buffer means we might leak simulator
private data into the simulated target, which is probably a bad thing.
Plus it probably makes life easier if something consistent, like all
zeros, is written rather than random junk, which might look like a
successful call (except for the error code).

So, in this commit, I initialize the stat buffer to zero before
it is potentially used.  If the stat call is not made then the buffer
will be left initialized as all zeros.

sim/ppc/emul_netbsd.c

index 322b584a3f13085779f0e09b9269610b03d339aa..a8bfd27610e2329e8b77b9e29bcef439815c033d 100644 (file)
@@ -879,7 +879,7 @@ do_fstat(os_emul_data *emul,
 {
   int fd = cpu_registers(processor)->gpr[arg0];
   unsigned_word stat_buf_addr = cpu_registers(processor)->gpr[arg0+1];
-  struct stat buf;
+  struct stat buf = {};
   int status;
 #ifdef SYS_fstat
   SYS(fstat);