Date: Tue, 12 Nov 2013 15:33:45 +0400 From: Sergey Kandaurov <pluknet@gmail.com> To: Mateusz Guzik <mjguzik@gmail.com> Cc: "freebsd-virtualization@freebsd.org" <freebsd-virtualization@freebsd.org> Subject: Re: Running `sysctl -a` causes crash (Hyper-V) Message-ID: <CAE-mSOJFGos7Y-QvuskPDK9=Jv8CLqGPKi8Gck=Uj2mmy87Y0Q@mail.gmail.com> In-Reply-To: <20131112030154.GA29757@dft-labs.eu> References: <CAAoTqfvrdKH6BC=KrpWLgBKDjx402oTt_bp1TnV_Z3FC1if88A@mail.gmail.com> <CAE-mSOLKgk_h10mUPLuMXHgPfYJMEog_FFdyZvEoAOXMh=rbfg@mail.gmail.com> <CAAoTqfu9NFuVFYnLFo%2BLG7_kXd%2BAaxEPTm4nCKETzWvje7=fyA@mail.gmail.com> <CAE-mSOLeMHkh7gKLZPYcyu3GdJKqN4hAMBgEf5TwMUxB4nQ7zA@mail.gmail.com> <CAAoTqftAbsDNUiCv4QRnNfamf61dPhJ%2BWAzgfVVL4QMe9qHxcA@mail.gmail.com> <CAE-mSOLszJLfHBgmSTaUH5%2B5dTe23XLUFbp-nhfPpz2UVWMCJQ@mail.gmail.com> <CAAoTqfu716D-ifL-GXurxveZOKahLpndAivBWWt6ENHOJxXaaA@mail.gmail.com> <52814D25.1050603@freebsd.org> <20131112030154.GA29757@dft-labs.eu>
next in thread | previous in thread | raw e-mail | index | archive | help
On 12 November 2013 07:01, Mateusz Guzik <mjguzik@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAE-mSOJFGos7Y-QvuskPDK9=Jv8CLqGPKi8Gck=Uj2mmy87Y0Q>