Running `sysctl -a` causes crash (Hyper-V)

Julian Elischer julian at freebsd.org
Tue Nov 12 21:48:48 UTC 2013


On 11/12/13, 5:31 AM, Mateusz Guzik wrote:
> On Tue, Nov 12, 2013 at 03:33:45PM +0400, Sergey Kandaurov wrote:
>> On 12 November 2013 07:01, Mateusz Guzik <mjguzik at gmail.com> wrote:
>>> On Mon, Nov 11, 2013 at 01:33:25PM -0800, Julian Elischer wrote:
>>>> On 11/11/13, 7:49 AM, Pavel Timofeev wrote:
>>>>> Great, it helped! Thanks a lot!
>>>> the suggested change suggests fragile code. It should be able to
>>>> handle unexpected input..
>>> Indeed, I already suggested Sergey placing a compile time assertion to
>>> make sure vm_guest range is covered.
>> I have the following change for this.
>> Btw, the last element in vm_guest_sysctl_names is NULL, is it really needed
>> for something? Unlike vm_bnames/vm_pnames, it seems not.
>>
> No idea, I would leave it be.
>
>> Add CTASSERT to handle enum VM_GUEST and vm_guest_sysctl_names cooperation.
>>
>> Index: sys/sys/systm.h
>> ===================================================================
>> --- sys/sys/systm.h    (revision 258036)
>> +++ sys/sys/systm.h    (working copy)
>> @@ -72,7 +72,8 @@ extern int vm_guest;        /* Running as virtual machin
>>    * ever implemented (e.g. vendor-specific paravirtualization features).
>>    * Keep in sync with vm_guest_sysctl_names[].
>>    */
>> -enum VM_GUEST { VM_GUEST_NO = 0, VM_GUEST_VM, VM_GUEST_XEN, VM_GUEST_HV };
>> +enum VM_GUEST { VM_GUEST_NO = 0, VM_GUEST_VM, VM_GUEST_XEN, VM_GUEST_HV,
>> +        VM_LAST };
>>
>>   #if defined(WITNESS) || defined(INVARIANTS)
>>   void    kassert_panic(const char *fmt, ...)  __printflike(1, 2);
>> Index: sys/kern/subr_param.c
>> ===================================================================
>> --- sys/kern/subr_param.c    (revision 258036)
>> +++ sys/kern/subr_param.c    (working copy)
>> @@ -156,6 +156,7 @@ static const char *const vm_guest_sysctl_names[] =
>>       "hv",
>>       NULL
>>   };
>> +CTASSERT(nitems(vm_guest_sysctl_names) - 1 == VM_LAST);

hmm. one learns something every day.       nitems() is new to me..
yes assuming nitems is supported on all platforms then this adds a 
safety belt
and is a good idea.

>>
>>   #ifndef XEN
>>   static const char *const vm_bnames[] = {
>>
> I can't test it right now, I presume it works :)
>
> With that in mind looks good to me, thanks!
>



More information about the freebsd-virtualization mailing list