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

Sergey Kandaurov pluknet at gmail.com
Tue Nov 12 11:33:47 UTC 2013


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.

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);

 #ifndef XEN
 static const char *const vm_bnames[] = {

-- 
wbr,
pluknet


More information about the freebsd-virtualization mailing list