On 22 July 2016 at 17:36, Emilio G. Cota <c...@braap.org> wrote: > So far, QHT functions assume that the passed qht has previously been > initialized--otherwise they segfault. > > This patch makes an exception for qht_statistics_init, with the goal > of simplifying calling code. For instance, qht_statistics_init is > called from the 'info jit' dump, and given that under KVM the TB qht > is never initialized, we get a segfault. Thus, instead of complicating > the 'info jit' code with additional checks, let's allow passing an > uninitialized qht to qht_statistics_init. > > While at it, add a test for this to test-qht. > > Before the patch (for $ qemu -enable-kvm [...]): > (qemu) info jit > [...] > direct jump count 0 (0%) (2 jumps=0 0%) > Program received signal SIGSEGV, Segmentation fault. > > After the patch: > (qemu) info jit > [...] > direct jump count 0 (0%) (2 jumps=0 0%) > TB hash buckets 0/0 (-nan% head buckets used) > TB hash occupancy nan% avg chain occ. Histogram: (null) > TB hash avg chain nan buckets. Histogram: (null)
This looks like we're passing NULL pointers to printf %s specifiers. This is undefined behaviour at least for POSIX printf, and I can't see anything in the glib printf-alike function documentation that gives an extra guarantee for this, so it's probably a bad idea. Printing 'nan' also looks a bit odd, though it's not UB. thanks -- PMM